# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//third_party/libaom/options.gni")

source_set("renderers") {
  # Do not expand the visibility here without double-checking with OWNERS, this
  # is a roll-up target which is part of the //media component. Most other DEPs
  # should be using //media and not directly DEP this roll-up target.
  visibility = [ "//media" ]

  sources = [
    "audio_renderer_impl.cc",
    "audio_renderer_impl.h",
    "default_renderer_factory.cc",
    "default_renderer_factory.h",
    "paint_canvas_video_renderer.cc",
    "paint_canvas_video_renderer.h",
    "renderer_impl.cc",
    "renderer_impl.h",
    "video_overlay_factory.cc",
    "video_overlay_factory.h",
    "video_renderer_impl.cc",
    "video_renderer_impl.h",
  ]

  deps = [
    "//base",
    "//cc/paint",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//media/base",
    "//media/filters",
    "//media/video",
    "//skia",
    "//third_party/libaom:av1_features",
    "//third_party/libyuv",
    "//ui/gfx:geometry_skia",
    "//ui/gfx:memory_buffer",
    "//ui/gfx/geometry",
  ]

  configs += [
    "//media:subcomponent_config",

    # TODO(crbug.com/167187): Fix size_t to int trunctaions.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "audio_renderer_impl_unittest.cc",
    "paint_canvas_video_renderer_unittest.cc",
    "renderer_impl_unittest.cc",
    "video_renderer_impl_unittest.cc",
  ]
  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//cc/paint",
    "//gpu:test_support",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/libyuv",
    "//ui/gfx",
  ]
}
