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

import("//media/media_options.gni")

source_set("video") {
  # 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",
    "//media/filters",
    "//media/formats",
    "//media/renderers",
  ]

  sources = [
    "gpu_memory_buffer_video_frame_pool.cc",
    "gpu_memory_buffer_video_frame_pool.h",
    "gpu_video_accelerator_factories.cc",
    "gpu_video_accelerator_factories.h",
    "h264_bit_reader.cc",
    "h264_bit_reader.h",
    "h264_level_limits.cc",
    "h264_level_limits.h",
    "h264_parser.cc",
    "h264_parser.h",
    "h264_poc.cc",
    "h264_poc.h",
    "half_float_maker.cc",
    "half_float_maker.h",
    "offloading_video_encoder.cc",
    "offloading_video_encoder.h",
    "picture.cc",
    "picture.h",
    "renderable_gpu_memory_buffer_video_frame_pool.cc",
    "renderable_gpu_memory_buffer_video_frame_pool.h",
    "trace_util.cc",
    "trace_util.h",
    "video_decode_accelerator.cc",
    "video_decode_accelerator.h",
    "video_encode_accelerator.cc",
    "video_encode_accelerator.h",
    "video_encode_accelerator_adapter.cc",
    "video_encode_accelerator_adapter.h",
    "video_encoder_fallback.cc",
    "video_encoder_fallback.h",
    "video_encoder_info.cc",
    "video_encoder_info.h",
  ]

  if (enable_platform_hevc) {
    sources += [
      "h265_nalu_parser.cc",
      "h265_nalu_parser.h",
    ]
    if (enable_hevc_parser_and_hw_decoder) {
      sources += [
        "h265_parser.cc",
        "h265_parser.h",
        "h265_poc.cc",
        "h265_poc.h",
      ]
    }
  }

  public_deps = [ "//gpu/command_buffer/client:gles2_interface" ]

  deps = [
    "//build:chromeos_buildflags",
    "//gpu/command_buffer/client",
    "//gpu/command_buffer/common",
    "//gpu/ipc/common",
    "//media/base",
    "//third_party/libyuv",
    "//ui/gfx",
    "//ui/gl",
  ]

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

  if (enable_libaom) {
    sources += [
      "av1_video_encoder.cc",
      "av1_video_encoder.h",
    ]

    public_deps += [ "//third_party/libaom" ]
  }

  if (media_use_libvpx) {
    sources += [
      "vpx_video_encoder.cc",
      "vpx_video_encoder.h",
    ]
    deps += [ "//third_party/libvpx" ]
  }

  if (proprietary_codecs && media_use_openh264) {
    sources += [
      "openh264_video_encoder.cc",
      "openh264_video_encoder.h",
    ]
    deps += [ "//third_party/openh264:encoder" ]
  }
}

# Note: This is a roll-up only target; do not expand the visibility. DEPS should
# depend on the //media:test_support target instead.
static_library("test_support") {
  visibility = [ "//media:test_support" ]
  testonly = true
  sources = [
    "fake_gpu_memory_buffer.cc",
    "fake_gpu_memory_buffer.h",
    "fake_video_encode_accelerator.cc",
    "fake_video_encode_accelerator.h",
    "mock_gpu_memory_buffer_video_frame_pool.cc",
    "mock_gpu_memory_buffer_video_frame_pool.h",
    "mock_gpu_video_accelerator_factories.cc",
    "mock_gpu_video_accelerator_factories.h",
    "mock_video_decode_accelerator.cc",
    "mock_video_decode_accelerator.h",
    "mock_video_encode_accelerator.cc",
    "mock_video_encode_accelerator.h",
  ]
  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/common",
    "//media/base:test_support",
    "//services/viz/public/cpp/gpu",
    "//testing/gmock",
    "//ui/gfx",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "gpu_memory_buffer_video_frame_pool_unittest.cc",
    "h264_bit_reader_unittest.cc",
    "h264_parser_unittest.cc",
    "h264_poc_unittest.cc",
    "half_float_maker_unittest.cc",
    "offloading_video_encoder_unittest.cc",
    "renderable_gpu_memory_buffer_video_frame_pool_unittest.cc",
    "software_video_encoder_test.cc",
    "video_encode_accelerator_adapter_test.cc",
    "video_encoder_fallback_test.cc",
  ]
  if (enable_platform_hevc) {
    sources += [ "h265_nalu_parser_unittest.cc" ]
    if (enable_hevc_parser_and_hw_decoder) {
      sources += [
        "h265_parser_unittest.cc",
        "h265_poc_unittest.cc",
      ]
    }
  }

  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//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:libyuv",
    "//ui/gfx",
  ]
}

fuzzer_test("media_h264_parser_fuzzer") {
  sources = [ "h264_parser_fuzzertest.cc" ]
  deps = [
    "//base",
    "//media",
    "//ui/gfx/geometry",
  ]
}

if (enable_hevc_parser_and_hw_decoder) {
  fuzzer_test("media_h265_parser_fuzzer") {
    sources = [ "h265_parser_fuzzertest.cc" ]
    deps = [
      "//base",
      "//media",
    ]
  }
}
