# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//starboard/build/config/os_definitions.gni")

config("media_config") {
  if (!is_win) {
    cflags_cc = [
      "-Wno-conversion",
      "-Wno-unused-parameter",
      "-Wno-unused-variable",
    ]
  }

  defines = [ "MEDIA_IMPLEMENTATION" ]
}

component("media") {
  sources = [
    "base/audio_bus.cc",
    "base/audio_bus.h",
    "base/cval_stats.cc",
    "base/cval_stats.h",
    "base/data_source.cc",
    "base/data_source.h",
    "base/decode_target_provider.h",
    "base/decoder_buffer_cache.cc",
    "base/decoder_buffer_cache.h",
    "base/drm_system.cc",
    "base/drm_system.h",
    "base/format_support_query_metrics.cc",
    "base/format_support_query_metrics.h",
    "base/interleaved_sinc_resampler.cc",
    "base/interleaved_sinc_resampler.h",
    "base/metrics_provider.cc",
    "base/metrics_provider.h",
    "base/playback_statistics.cc",
    "base/playback_statistics.h",
    "base/sbplayer_bridge.cc",
    "base/sbplayer_bridge.h",
    "base/sbplayer_interface.cc",
    "base/sbplayer_interface.h",
    "base/sbplayer_pipeline.cc",
    "base/sbplayer_pipeline.h",
    "base/sbplayer_set_bounds_helper.cc",
    "base/sbplayer_set_bounds_helper.h",
    "decoder_buffer_allocator.cc",
    "decoder_buffer_allocator.h",
    "decoder_buffer_memory_info.h",
    "file_data_source.cc",
    "file_data_source.h",
    "media_module.cc",
    "media_module.h",
    "player/web_media_player_impl.cc",
    "player/web_media_player_impl.h",
    "player/web_media_player_proxy.cc",
    "player/web_media_player_proxy.h",
    "progressive/avc_access_unit.cc",
    "progressive/avc_access_unit.h",
    "progressive/avc_parser.cc",
    "progressive/avc_parser.h",
    "progressive/data_source_reader.cc",
    "progressive/data_source_reader.h",
    "progressive/demuxer_extension_wrapper.cc",
    "progressive/demuxer_extension_wrapper.h",
    "progressive/mp4_map.cc",
    "progressive/mp4_map.h",
    "progressive/mp4_parser.cc",
    "progressive/mp4_parser.h",
    "progressive/progressive_demuxer.cc",
    "progressive/progressive_demuxer.h",
    "progressive/progressive_parser.cc",
    "progressive/progressive_parser.h",
    "progressive/rbsp_stream.cc",
    "progressive/rbsp_stream.h",
    "url_fetcher_data_source.cc",
    "url_fetcher_data_source.h",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [
    "//starboard/build/config:speed",
    ":media_config",
  ]

  deps = [
    "//base",
    "//cobalt/base",
    "//cobalt/browser:browser_switches",
    "//cobalt/csp",
    "//cobalt/loader",
    "//cobalt/loader:origin",
    "//cobalt/math",
    "//cobalt/network",
    "//cobalt/render_tree:render_tree",
    "//cobalt/system_window:system_window",
    "//nb",
    "//net",
    "//starboard:starboard_group",
    "//third_party/chromium/media",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}

target(gtest_target_type, "media_test") {
  testonly = true

  sources = [
    "base/cval_stats_test.cc",
    "base/decoder_buffer_cache_test.cc",
    "file_data_source_test.cc",
    "media_module_test.cc",
    "progressive/demuxer_extension_wrapper_test.cc",
    "progressive/mock_data_source_reader.h",
    "progressive/mp4_map_unittest.cc",
    "progressive/rbsp_stream_unittest.cc",
  ]

  configs -= [ "//starboard/build/config:size" ]
  configs += [ "//starboard/build/config:speed" ]

  deps = [
    ":media",
    "//base/test:test_support",
    "//cobalt//browser:test_dependencies_on_browser",
    "//cobalt/base",
    "//cobalt/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/chromium/media:media",
  ]

  data_deps = [ "//cobalt/media/testing:cobalt_media_download_test_data" ]

  # TODO: b/296715826 - Fix symbol resolution in cval_stats_test.cc.
  if (sb_is_modular && is_host_win) {
    sources -= [ "base/cval_stats_test.cc" ]
  }
}
