# 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",
    "decrypting_renderer.cc",
    "decrypting_renderer.h",
    "decrypting_renderer_factory.cc",
    "decrypting_renderer_factory.h",
    "default_decoder_factory.cc",
    "default_decoder_factory.h",
    "default_renderer_factory.cc",
    "default_renderer_factory.h",
    "paint_canvas_video_renderer.cc",
    "paint_canvas_video_renderer.h",
    "remote_playback_client_wrapper.h",
    "renderer_impl.cc",
    "renderer_impl.h",
    "video_overlay_factory.cc",
    "video_overlay_factory.h",
    "video_renderer_impl.cc",
    "video_renderer_impl.h",
    "video_resource_updater.cc",
    "video_resource_updater.h",
  ]

  deps = [
    "//base",
    "//cc/base",  # For MathUtil.
    "//cc/paint",
    "//components/viz/client",
    "//components/viz/common",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//media:media_buildflags",
    "//media/audio",
    "//media/base",
    "//media/filters",
    "//media/video",
    "//third_party/libaom:libaom_buildflags",
    "//third_party/libyuv",
    "//ui/gfx:geometry_skia",
    "//ui/gfx:memory_buffer",
    "//ui/gfx/geometry",
    "//ui/gl",
  ]

  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",
    "decrypting_renderer_unittest.cc",
    "paint_canvas_video_renderer_unittest.cc",
    "renderer_impl_unittest.cc",
    "video_renderer_impl_unittest.cc",
    "video_resource_updater_unittest.cc",
  ]
  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//cc/paint",
    "//components/viz/client",
    "//components/viz/test:test_support",
    "//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",
    "//ui/gl",
    "//ui/gl:test_support",
  ]
}
