# 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("//media/gpu/args.gni")
import("//media/media_options.gni")

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

  sources = [
    "audio_clock.cc",
    "audio_clock.h",
    "audio_renderer_algorithm.cc",
    "audio_renderer_algorithm.h",
    "audio_timestamp_validator.cc",
    "audio_timestamp_validator.h",
    "chunk_demuxer.cc",
    "chunk_demuxer.h",
    "decoder_selector.cc",
    "decoder_selector.h",
    "decoder_stream.cc",
    "decoder_stream.h",
    "decoder_stream_traits.cc",
    "decoder_stream_traits.h",
    "decrypting_audio_decoder.cc",
    "decrypting_audio_decoder.h",
    "decrypting_demuxer_stream.cc",
    "decrypting_demuxer_stream.h",
    "decrypting_media_resource.cc",
    "decrypting_media_resource.h",
    "decrypting_video_decoder.cc",
    "decrypting_video_decoder.h",
    "file_data_source.cc",
    "file_data_source.h",
    "frame_buffer_pool.cc",
    "frame_buffer_pool.h",
    "frame_processor.cc",
    "frame_processor.h",
    "memory_data_source.cc",
    "memory_data_source.h",
    "offloading_video_decoder.cc",
    "offloading_video_decoder.h",
    "pipeline_controller.cc",
    "pipeline_controller.h",
    "source_buffer_parse_warnings.h",
    "source_buffer_range.cc",
    "source_buffer_range.h",
    "source_buffer_state.cc",
    "source_buffer_state.h",
    "source_buffer_stream.cc",
    "source_buffer_stream.h",
    "stream_parser_factory.cc",
    "stream_parser_factory.h",
    "video_cadence_estimator.cc",
    "video_cadence_estimator.h",
    "video_renderer_algorithm.cc",
    "video_renderer_algorithm.h",
    "vp9_bool_decoder.cc",
    "vp9_bool_decoder.h",
    "vp9_compressed_header_parser.cc",
    "vp9_compressed_header_parser.h",
    "vp9_parser.cc",
    "vp9_parser.h",
    "vp9_raw_bits_reader.cc",
    "vp9_raw_bits_reader.h",
    "vp9_uncompressed_header_parser.cc",
    "vp9_uncompressed_header_parser.h",
    "wsola_internals.cc",
    "wsola_internals.h",
  ]

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

  deps = [
    "//base",
    "//build:chromeos_buildflags",
    "//cc/base",  # For MathUtil.
    "//media:media_buildflags",
    "//media/base",
    "//media/cdm",
    "//media/formats",
    "//media/video",
    "//third_party/libyuv",
    "//ui/gfx/geometry:geometry",
  ]

  libs = []

  if (proprietary_codecs) {
    sources += [
      "h264_to_annex_b_bitstream_converter.cc",
      "h264_to_annex_b_bitstream_converter.h",
    ]
  }

  if (media_use_ffmpeg) {
    deps += [
      "//media/ffmpeg",
      "//third_party/ffmpeg",
      "//third_party/ffmpeg:ffmpeg_features",
      "//third_party/opus",
    ]
    sources += [
      "audio_file_reader.cc",
      "audio_file_reader.h",
      "audio_video_metadata_extractor.cc",
      "audio_video_metadata_extractor.h",
      "blocking_url_protocol.cc",
      "blocking_url_protocol.h",
      "ffmpeg_audio_decoder.cc",
      "ffmpeg_audio_decoder.h",
      "ffmpeg_bitstream_converter.h",
      "ffmpeg_demuxer.cc",
      "ffmpeg_demuxer.h",
      "ffmpeg_glue.cc",
      "ffmpeg_glue.h",
      "in_memory_url_protocol.cc",
      "in_memory_url_protocol.h",
      "media_file_checker.cc",
      "media_file_checker.h",
    ]
  }

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

  if (enable_dav1d_decoder) {
    sources += [
      "dav1d_video_decoder.cc",
      "dav1d_video_decoder.h",
    ]
    deps += [ "//third_party/dav1d" ]
  }

  if (enable_libgav1_decoder) {
    sources += [
      "gav1_video_decoder.cc",
      "gav1_video_decoder.h",
    ]
    deps += [ "//third_party/libgav1" ]
  }

  if (media_use_ffmpeg) {
    if (proprietary_codecs) {
      sources += [
        "ffmpeg_aac_bitstream_converter.cc",
        "ffmpeg_aac_bitstream_converter.h",
        "ffmpeg_h264_to_annex_b_bitstream_converter.cc",
        "ffmpeg_h264_to_annex_b_bitstream_converter.h",
      ]

      if (enable_platform_hevc) {
        sources += [
          "ffmpeg_h265_to_annex_b_bitstream_converter.cc",
          "ffmpeg_h265_to_annex_b_bitstream_converter.h",
        ]
      }
    }

    if (enable_ffmpeg_video_decoders) {
      sources += [
        "ffmpeg_video_decoder.cc",
        "ffmpeg_video_decoder.h",
      ]
    }

    if (is_android) {
      sources += [
        "android/video_frame_extractor.cc",
        "android/video_frame_extractor.h",
      ]
    }
  }

  if (is_android) {
    sources -= [
      "decrypting_audio_decoder.cc",
      "decrypting_audio_decoder.h",
      "decrypting_video_decoder.cc",
      "decrypting_video_decoder.h",
    ]
    sources += [
      "android/media_codec_audio_decoder.cc",
      "android/media_codec_audio_decoder.h",
    ]
    deps += [ "//media/base/android" ]
  }

  if (use_vaapi) {
    sources += [
      "h264_bitstream_buffer.cc",
      "h264_bitstream_buffer.h",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "fuchsia/fuchsia_video_decoder.cc",
      "fuchsia/fuchsia_video_decoder.h",
    ]
    public_deps = [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.media" ]
    deps += [
      "//components/viz/common",
      "//gpu/command_buffer/client",
      "//gpu/command_buffer/common",
      "//gpu/ipc/common",
      "//media/fuchsia/cdm",
      "//media/fuchsia/common",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.mediacodec",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem",
      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
      "//ui/ozone",
    ]
  }
}

source_set("perftests") {
  testonly = true
  sources = []

  if (media_use_ffmpeg) {
    sources += [ "demuxer_perftest.cc" ]
  }

  configs += [ "//media:media_config" ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//testing/perf",
  ]
}

static_library("test_support") {
  testonly = true
  visibility = [ "//media:test_support" ]

  sources = [
    "fake_video_decoder.cc",
    "fake_video_decoder.h",
    "ivf_parser.cc",
    "ivf_parser.h",
  ]

  deps = [
    "//base/test:test_support",
    "//media/base:test_support",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "audio_clock_unittest.cc",
    "audio_decoder_stream_unittest.cc",
    "audio_renderer_algorithm_unittest.cc",
    "audio_timestamp_validator_unittest.cc",
    "chunk_demuxer_unittest.cc",
    "decoder_selector_unittest.cc",
    "decrypting_audio_decoder_unittest.cc",
    "decrypting_demuxer_stream_unittest.cc",
    "decrypting_media_resource_unittest.cc",
    "decrypting_video_decoder_unittest.cc",
    "fake_video_decoder_unittest.cc",
    "file_data_source_unittest.cc",
    "frame_buffer_pool_unittest.cc",
    "frame_processor_unittest.cc",
    "ivf_parser_unittest.cc",
    "memory_data_source_unittest.cc",
    "offloading_video_decoder_unittest.cc",
    "pipeline_controller_unittest.cc",
    "source_buffer_state_unittest.cc",
    "source_buffer_stream_unittest.cc",
    "video_cadence_estimator_unittest.cc",
    "video_decoder_stream_unittest.cc",
    "video_renderer_algorithm_unittest.cc",
    "vp9_parser_unittest.cc",
    "vp9_raw_bits_reader_unittest.cc",
    "vp9_uncompressed_header_parser_unittest.cc",
  ]

  deps = [
    "//base/test:test_support",
    "//build:chromeos_buildflags",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx:test_support",
  ]

  if (is_android) {
    sources += [ "android/video_frame_extractor_unittest.cc" ]
    sources -= [
      "decrypting_audio_decoder_unittest.cc",
      "decrypting_video_decoder_unittest.cc",
    ]

    deps += [ "//ui/gl" ]
  }

  if (is_fuchsia) {
    sources += [ "fuchsia/fuchsia_video_decoder_unittest.cc" ]
    deps += [
      "//components/viz/common",
      "//components/viz/test:test_support",
      "//gpu/command_buffer/client",
      "//gpu/config",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem",
      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
    ]
  }

  # libvpx for running vpx test on chromecast doesn't support high bit depth.
  # This may cause some unit tests failure.
  if (is_chromecast) {
    defines = [ "LIBVPX_NO_HIGH_BIT_DEPTH" ]
  }

  if (media_use_ffmpeg) {
    sources += [
      "audio_decoder_unittest.cc",
      "audio_file_reader_unittest.cc",
      "blocking_url_protocol_unittest.cc",
      "ffmpeg_demuxer_unittest.cc",
      "ffmpeg_glue_unittest.cc",
      "in_memory_url_protocol_unittest.cc",
    ]

    deps += [
      # Direct dependency needed for the config
      "//third_party/opus",
    ]

    # Even if FFmpeg is enabled on Android we don't want these.
    # TODO(watk): Refactor tests that could be made to run on Android.
    if (!is_android) {
      sources += [
        "audio_video_metadata_extractor_unittest.cc",
        "media_file_checker_unittest.cc",
      ]
    }

    if (enable_ffmpeg_video_decoders) {
      sources += [ "ffmpeg_video_decoder_unittest.cc" ]
    }
  }

  if (media_use_libvpx) {
    sources += [ "vpx_video_decoder_unittest.cc" ]
  }

  if (enable_dav1d_decoder) {
    sources += [ "dav1d_video_decoder_unittest.cc" ]
  }

  if (enable_libgav1_decoder) {
    sources += [ "gav1_video_decoder_unittest.cc" ]
  }

  if (use_vaapi) {
    sources += [ "h264_bitstream_buffer_unittest.cc" ]
  }

  if (proprietary_codecs) {
    sources += [ "h264_to_annex_b_bitstream_converter_unittest.cc" ]

    if (media_use_ffmpeg) {
      sources += [
        "ffmpeg_aac_bitstream_converter_unittest.cc",
        "ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc",
      ]
    }
  }

  if (media_use_ffmpeg) {
    # Direct dependency required to inherit config.
    deps += [ "//third_party/ffmpeg" ]
  }
}
