# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../webrtc.gni")

rtc_library("encoded_frame") {
  visibility = [ "*" ]
  sources = [
    "encoded_frame.cc",
    "encoded_frame.h",
  ]
  deps = [
    ":codec_globals_headers",
    ":video_codec_interface",
    "../../api/video:encoded_image",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video:video_rtp_headers",
    "../../modules:module_api",
    "../../modules:module_api_public",
    "../../modules/rtp_rtcp:rtp_video_header",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base/experiments:alr_experiment",
    "../../rtc_base/experiments:rtt_mult_experiment",
    "../../system_wrappers",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:variant",
  ]
}

rtc_library("nack_module") {
  visibility = [ "*" ]
  sources = [
    "histogram.cc",
    "histogram.h",
    "nack_module.cc",
    "nack_module.h",
  ]

  deps = [
    ":packet",
    "..:module_api",
    "../../api/units:time_delta",
    "../../api/units:timestamp",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base/experiments:field_trial_parser",
    "../../system_wrappers",
    "../../system_wrappers:field_trial",
    "../utility",
  ]
}

rtc_library("packet") {
  visibility = [ "*" ]
  sources = [
    "packet.cc",
    "packet.h",
  ]
  deps = [
    "..:module_api",
    "../../:webrtc_common",
    "../../api:rtp_headers",
    "../../api:rtp_packet_info",
    "../../api/video:video_frame_type",
    "../rtp_rtcp:rtp_rtcp_format",
    "../rtp_rtcp:rtp_video_header",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("video_coding") {
  visibility = [ "*" ]
  deps = [
    "..:module_fec_api",
    "../../api:array_view",
    "../../api:scoped_refptr",
    "../../api/video:encoded_image",
    "../../api/video:video_bitrate_allocation",
    "../../api/video:video_bitrate_allocator_factory",
    "../../system_wrappers:field_trial",
    "../../system_wrappers:metrics",
    "../rtp_rtcp:rtp_video_header",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/memory",
  ]

  sources = [
    "codec_timer.cc",
    "codec_timer.h",
    "decoder_database.cc",
    "decoder_database.h",
    "fec_controller_default.cc",
    "fec_controller_default.h",
    "fec_rate_table.h",
    "frame_buffer2.cc",
    "frame_buffer2.h",
    "frame_object.cc",
    "frame_object.h",
    "generic_decoder.cc",
    "generic_decoder.h",
    "h264_sprop_parameter_sets.cc",
    "h264_sprop_parameter_sets.h",
    "h264_sps_pps_tracker.cc",
    "h264_sps_pps_tracker.h",
    "include/video_codec_initializer.h",
    "inter_frame_delay.cc",
    "inter_frame_delay.h",
    "internal_defines.h",
    "jitter_estimator.cc",
    "jitter_estimator.h",
    "loss_notification_controller.cc",
    "loss_notification_controller.h",
    "media_opt_util.cc",
    "media_opt_util.h",
    "packet_buffer.cc",
    "packet_buffer.h",
    "rtp_frame_reference_finder.cc",
    "rtp_frame_reference_finder.h",
    "rtt_filter.cc",
    "rtt_filter.h",
    "timestamp_map.cc",
    "timestamp_map.h",
    "timing.cc",
    "timing.h",
    "unique_timestamp_counter.cc",
    "unique_timestamp_counter.h",
    "video_codec_initializer.cc",
    "video_receiver2.cc",
    "video_receiver2.h",
  ]

  deps += [
    ":codec_globals_headers",
    ":encoded_frame",
    ":packet",
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_vp9_helpers",
    "..:module_api",
    "..:module_api_public",
    "../../api:fec_controller_api",
    "../../api:rtp_headers",
    "../../api/units:data_rate",
    "../../api/units:time_delta",
    "../../api/video:builtin_video_bitrate_allocator_factory",
    "../../api/video:encoded_frame",
    "../../api/video:video_bitrate_allocator",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base/experiments:alr_experiment",
    "../../rtc_base/experiments:field_trial_parser",
    "../../rtc_base/experiments:jitter_upper_bound_experiment",
    "../../rtc_base/experiments:min_video_bitrate_experiment",
    "../../rtc_base/experiments:rate_control_settings",
    "../../rtc_base/experiments:rtt_mult_experiment",
    "../../rtc_base/synchronization:sequence_checker",
    "../../rtc_base/system:fallthrough",
    "../../rtc_base/task_utils:repeating_task",
    "../../rtc_base/third_party/base64",
    "../../rtc_base/time:timestamp_extrapolator",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:variant",
  ]
}

rtc_library("video_codec_interface") {
  visibility = [ "*" ]
  sources = [
    "include/video_codec_interface.cc",
    "include/video_codec_interface.h",
    "include/video_coding_defines.h",
    "include/video_error_codes.h",
    "video_coding_defines.cc",
  ]
  deps = [
    ":codec_globals_headers",
    "..:module_api",
    "../../api/video:video_frame",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../common_video/generic_frame_descriptor",
    "../../rtc_base/system:rtc_export",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("video_coding_legacy") {
  visibility = [ ":video_coding_unittests" ]
  sources = [
    "decoding_state.cc",
    "decoding_state.h",
    "frame_buffer.cc",
    "frame_buffer.h",
    "include/video_coding.h",
    "jitter_buffer.cc",
    "jitter_buffer.h",
    "jitter_buffer_common.h",
    "receiver.cc",
    "receiver.h",
    "session_info.cc",
    "session_info.h",
    "video_coding_impl.cc",
    "video_coding_impl.h",
    "video_receiver.cc",
  ]
  deps = [
    ":codec_globals_headers",
    ":encoded_frame",
    ":packet",
    ":video_codec_interface",
    ":video_coding",
    "..:module_api",
    "..:module_api_public",
    "../../api:rtp_headers",
    "../../api/video:encoded_image",
    "../../api/video:video_frame",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../modules/rtp_rtcp:rtp_video_header",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base/synchronization:sequence_checker",
    "../../system_wrappers",
    "../../system_wrappers:event_wrapper",
    "../utility",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/abseil-cpp/absl/types:variant",
  ]
}

rtc_source_set("codec_globals_headers") {
  visibility = [ "*" ]
  sources = [
    "codecs/h264/include/h264_globals.h",
    "codecs/interface/common_constants.h",
    "codecs/vp8/include/vp8_globals.h",
    "codecs/vp9/include/vp9_globals.h",
  ]

  deps = [
    "../../rtc_base:checks",
  ]
}

rtc_library("video_coding_utility") {
  visibility = [ "*" ]
  sources = [
    "utility/decoded_frames_history.cc",
    "utility/decoded_frames_history.h",
    "utility/default_video_bitrate_allocator.cc",
    "utility/default_video_bitrate_allocator.h",
    "utility/frame_dropper.cc",
    "utility/frame_dropper.h",
    "utility/framerate_controller.cc",
    "utility/framerate_controller.h",
    "utility/ivf_file_writer.cc",
    "utility/ivf_file_writer.h",
    "utility/quality_scaler.cc",
    "utility/quality_scaler.h",
    "utility/simulcast_rate_allocator.cc",
    "utility/simulcast_rate_allocator.h",
    "utility/simulcast_utility.cc",
    "utility/simulcast_utility.h",
    "utility/vp8_header_parser.cc",
    "utility/vp8_header_parser.h",
    "utility/vp9_uncompressed_header_parser.cc",
    "utility/vp9_uncompressed_header_parser.h",
  ]

  deps = [
    ":video_codec_interface",
    "..:module_api",
    "../../api/video:encoded_frame",
    "../../api/video:encoded_image",
    "../../api/video:video_bitrate_allocation",
    "../../api/video:video_bitrate_allocator",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../modules/rtp_rtcp",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base/experiments:experimental_screenshare_settings",
    "../../rtc_base/experiments:quality_scaler_settings",
    "../../rtc_base/experiments:quality_scaling_experiment",
    "../../rtc_base/experiments:rate_control_settings",
    "../../rtc_base/experiments:stable_target_rate_experiment",
    "../../rtc_base/synchronization:sequence_checker",
    "../../rtc_base/system:arch",
    "../../rtc_base/system:file_wrapper",
    "../../rtc_base/task_utils:repeating_task",
    "../../system_wrappers:field_trial",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("webrtc_h264") {
  visibility = [ "*" ]
  sources = [
    "codecs/h264/h264.cc",
    "codecs/h264/h264_color_space.cc",
    "codecs/h264/h264_color_space.h",
    "codecs/h264/h264_decoder_impl.cc",
    "codecs/h264/h264_decoder_impl.h",
    "codecs/h264/h264_encoder_impl.cc",
    "codecs/h264/h264_encoder_impl.h",
    "codecs/h264/include/h264.h",
  ]

  defines = []
  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i010",
    "../../api/video:video_frame_i420",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../media:rtc_h264_profile_id",
    "../../media:rtc_media_base",
    "../../rtc_base",
    "../../rtc_base:checks",
    "../../rtc_base/system:rtc_export",
    "../../system_wrappers:field_trial",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/libyuv",
  ]

  if (rtc_use_h264) {
    deps += [
      "//third_party/ffmpeg",
      "//third_party/openh264:encoder",
    ]
    if (!build_with_mozilla) {
      deps += [ "../../media:rtc_media_base" ]
    }
  }
}

rtc_library("webrtc_multiplex") {
  sources = [
    "codecs/multiplex/augmented_video_frame_buffer.cc",
    "codecs/multiplex/include/augmented_video_frame_buffer.h",
    "codecs/multiplex/include/multiplex_decoder_adapter.h",
    "codecs/multiplex/include/multiplex_encoder_adapter.h",
    "codecs/multiplex/multiplex_decoder_adapter.cc",
    "codecs/multiplex/multiplex_encoded_image_packer.cc",
    "codecs/multiplex/multiplex_encoded_image_packer.h",
    "codecs/multiplex/multiplex_encoder_adapter.cc",
  ]

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "..:module_api",
    "../../api:fec_controller_api",
    "../../api:scoped_refptr",
    "../../api/video:encoded_image",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base",
    "../../rtc_base:checks",
    "../rtp_rtcp:rtp_rtcp_format",
  ]
}

# This target includes the internal SW codec.
rtc_library("webrtc_vp8") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  sources = [
    "codecs/vp8/include/vp8.h",
    "codecs/vp8/libvpx_interface.cc",
    "codecs/vp8/libvpx_interface.h",
    "codecs/vp8/libvpx_vp8_decoder.cc",
    "codecs/vp8/libvpx_vp8_decoder.h",
    "codecs/vp8/libvpx_vp8_encoder.cc",
    "codecs/vp8/libvpx_vp8_encoder.h",
  ]

  deps = [
    ":codec_globals_headers",
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_vp8_temporal_layers",
    "..:module_api",
    "../..:webrtc_common",
    "../../api:fec_controller_api",
    "../../api:scoped_refptr",
    "../../api/video:encoded_image",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../api/video_codecs:vp8_temporal_layers_factory",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base/experiments:cpu_speed_experiment",
    "../../rtc_base/experiments:experimental_screenshare_settings",
    "../../rtc_base/experiments:field_trial_parser",
    "../../rtc_base/experiments:rate_control_settings",
    "../../system_wrappers:field_trial",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/libyuv",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

rtc_library("webrtc_vp8_temporal_layers") {
  visibility = [ "*" ]
  sources = [
    "codecs/vp8/default_temporal_layers.cc",
    "codecs/vp8/default_temporal_layers.h",
    "codecs/vp8/include/temporal_layers_checker.h",
    "codecs/vp8/screenshare_layers.cc",
    "codecs/vp8/screenshare_layers.h",
    "codecs/vp8/temporal_layers.h",
    "codecs/vp8/temporal_layers_checker.cc",
  ]

  deps = [
    ":codec_globals_headers",
    ":video_codec_interface",
    ":video_coding_utility",
    "..:module_api",
    "../..:webrtc_common",
    "../../api:fec_controller_api",
    "../../api/video_codecs:video_codecs_api",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../system_wrappers:field_trial",
    "../../system_wrappers:metrics",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

# This target includes VP9 files that may be used for any VP9 codec, internal SW or external HW.
rtc_library("webrtc_vp9_helpers") {
  sources = [
    "codecs/vp9/svc_config.cc",
    "codecs/vp9/svc_config.h",
    "codecs/vp9/svc_rate_allocator.cc",
    "codecs/vp9/svc_rate_allocator.h",
  ]

  deps = [
    ":codec_globals_headers",
    ":video_codec_interface",
    "../..:webrtc_common",
    "../../api/video:video_bitrate_allocation",
    "../../api/video:video_bitrate_allocator",
    "../../api/video:video_codec_constants",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base/experiments:stable_target_rate_experiment",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
  ]
}

rtc_library("webrtc_vp9") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  sources = [
    "codecs/vp9/include/vp9.h",
    "codecs/vp9/vp9.cc",
    "codecs/vp9/vp9_frame_buffer_pool.cc",
    "codecs/vp9/vp9_frame_buffer_pool.h",
    "codecs/vp9/vp9_impl.cc",
    "codecs/vp9/vp9_impl.h",
  ]

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_vp9_helpers",
    "..:module_api",
    "../..:webrtc_common",
    "../../api:fec_controller_api",
    "../../api:scoped_refptr",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i010",
    "../../api/video:video_rtp_headers",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../media:rtc_media_base",
    "../../media:rtc_vp9_profile",
    "../../rtc_base",
    "../../rtc_base:checks",
    "../../rtc_base/experiments:rate_control_settings",
    "../../system_wrappers:field_trial",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/memory",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

if (rtc_include_tests) {
  if (is_android) {
    rtc_library("android_codec_factory_helper") {
      sources = [
        "codecs/test/android_codec_factory_helper.cc",
        "codecs/test/android_codec_factory_helper.h",
      ]

      deps = [
        "../../api/video_codecs:video_codecs_api",
        "../../rtc_base:checks",
        "../../rtc_base:ignore_wundef",
        "../../rtc_base:rtc_base_approved",
        "../../sdk/android:native_api_base",
        "../../sdk/android:native_api_codecs",
        "../../sdk/android:native_api_jni",
        "//base",
      ]
    }
  }

  if (is_ios || is_mac) {
    rtc_library("objc_codec_factory_helper") {
      sources = [
        "codecs/test/objc_codec_factory_helper.h",
        "codecs/test/objc_codec_factory_helper.mm",
      ]

      deps = [
        "../../api/video:video_frame",
        "../../api/video:video_rtp_headers",
        "../../api/video_codecs:video_codecs_api",
        "../../media:rtc_audio_video",
        "../../media:rtc_media_base",
        "../../modules:module_api",
        "../../rtc_base:rtc_base_approved",
        "../../sdk:native_api",
        "../../sdk:peerconnectionfactory_base_objc",
        "../../sdk:videocodec_objc",
        "../../sdk:videosource_objc",
        "../../sdk:videotoolbox_objc",
      ]
    }
  }

  rtc_library("simulcast_test_fixture_impl") {
    testonly = true
    sources = [
      "utility/simulcast_test_fixture_impl.cc",
      "utility/simulcast_test_fixture_impl.h",
    ]

    deps = [
      ":video_codec_interface",
      ":video_coding",
      ":video_coding_utility",
      "../../:webrtc_common",
      "../../api:mock_video_decoder",
      "../../api:mock_video_encoder",
      "../../api:simulcast_test_fixture_api",
      "../../api/video:encoded_image",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video:video_rtp_headers",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../test:test_support",
    ]
  }

  rtc_library("video_codecs_test_framework") {
    testonly = true
    sources = [
      "codecs/test/video_codec_unittest.cc",
      "codecs/test/video_codec_unittest.h",
      "codecs/test/videoprocessor.cc",
      "codecs/test/videoprocessor.h",
    ]

    deps = [
      ":codec_globals_headers",
      ":video_codec_interface",
      ":video_coding",
      ":video_coding_utility",
      ":videocodec_test_stats_impl",
      ":webrtc_vp9_helpers",
      "..:module_api",
      "../../api:scoped_refptr",
      "../../api:videocodec_test_fixture_api",
      "../../api/task_queue",
      "../../api/video:builtin_video_bitrate_allocator_factory",
      "../../api/video:encoded_image",
      "../../api/video:video_bitrate_allocation",
      "../../api/video:video_bitrate_allocator",
      "../../api/video:video_bitrate_allocator_factory",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video:video_rtp_headers",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_task_queue",
      "../../rtc_base/synchronization:sequence_checker",
      "../../rtc_base/task_utils:to_queued_task",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//third_party/abseil-cpp/absl/types:optional",
      "//third_party/libyuv",
    ]
  }

  video_coding_modules_tests_resources = []
  if (is_android) {
    video_coding_modules_tests_resources += [
      "../../resources/foreman_128x96.yuv",
      "../../resources/foreman_160x120.yuv",
      "../../resources/foreman_176x144.yuv",
      "../../resources/foreman_240x136.yuv",
      "../../resources/foreman_320x240.yuv",
      "../../resources/foreman_480x272.yuv",
    ]
  }
  if (!is_android) {
    video_coding_modules_tests_resources += [
      "../../resources/FourPeople_1280x720_30.yuv",
      "../../resources/ConferenceMotion_1280_720_50.yuv",
    ]
  }

  num_video_coding_modules_tests_resources = 0
  foreach(i, video_coding_modules_tests_resources) {
    num_video_coding_modules_tests_resources += 1
  }

  if (num_video_coding_modules_tests_resources > 0) {
    if (is_ios || is_mac) {
      bundle_data("video_coding_modules_tests_resources_bundle_data") {
        testonly = true
        sources = video_coding_modules_tests_resources
        outputs = [
          "{{bundle_resources_dir}}/{{source_file_part}}",
        ]
      }
    }
  }

  rtc_library("videocodec_test_impl") {
    testonly = true
    sources = [
      "codecs/test/videocodec_test_fixture_impl.cc",
      "codecs/test/videocodec_test_fixture_impl.h",
    ]
    deps = [
      ":codec_globals_headers",
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding_utility",
      ":videocodec_test_stats_impl",
      ":webrtc_vp9_helpers",
      "../..:webrtc_common",
      "../../api:array_view",
      "../../api:videocodec_test_fixture_api",
      "../../api/test/video:function_video_factory",
      "../../api/video:video_bitrate_allocation",
      "../../api/video_codecs:video_codecs_api",
      "../../call:video_stream_api",
      "../../common_video",
      "../../media:rtc_audio_video",
      "../../media:rtc_h264_profile_id",
      "../../media:rtc_internal_video_codecs",
      "../../media:rtc_media_base",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_base_tests_utils",
      "../../rtc_base:task_queue_for_test",
      "../../system_wrappers",
      "../../test:fileutils",
      "../../test:perf_test",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }

  rtc_library("videocodec_test_stats_impl") {
    testonly = true
    sources = [
      "codecs/test/videocodec_test_stats_impl.cc",
      "codecs/test/videocodec_test_stats_impl.h",
    ]
    deps = [
      "../../api:videocodec_test_fixture_api",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_numerics",
      "../../rtc_base:stringutils",
      "../../test:test_common",
      "../rtp_rtcp:rtp_rtcp_format",
    ]
  }

  rtc_library("video_coding_modules_tests") {
    testonly = true
    defines = []

    sources = [
      "codecs/h264/test/h264_impl_unittest.cc",
      "codecs/multiplex/test/multiplex_adapter_unittest.cc",
      "codecs/test/video_encoder_decoder_instantiation_tests.cc",
      "codecs/test/videocodec_test_libvpx.cc",
      "codecs/vp8/test/mock_libvpx_interface.h",
      "codecs/vp8/test/vp8_impl_unittest.cc",
      "codecs/vp9/test/vp9_impl_unittest.cc",
    ]
    if (rtc_use_h264) {
      sources += [ "codecs/test/videocodec_test_openh264.cc" ]
    }

    deps = [
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding_utility",
      ":videocodec_test_impl",
      ":webrtc_h264",
      ":webrtc_multiplex",
      ":webrtc_vp8",
      ":webrtc_vp9",
      ":webrtc_vp9_helpers",
      "../..:webrtc_common",
      "../../api:create_videocodec_test_fixture_api",
      "../../api:mock_video_codec_factory",
      "../../api:mock_video_decoder",
      "../../api:mock_video_encoder",
      "../../api:scoped_refptr",
      "../../api:videocodec_test_fixture_api",
      "../../api/test/video:function_video_factory",
      "../../api/video:encoded_image",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video:video_rtp_headers",
      "../../api/video_codecs:rtc_software_fallback_wrappers",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video",
      "../../common_video/test:utilities",
      "../../media:rtc_h264_profile_id",
      "../../media:rtc_internal_video_codecs",
      "../../media:rtc_media_base",
      "../../media:rtc_simulcast_encoder_adapter",
      "../../media:rtc_vp9_profile",
      "../../rtc_base",
      "../../test:field_trial",
      "../../test:fileutils",
      "../../test:test_support",
      "../../test:video_test_common",
      "../rtp_rtcp:rtp_rtcp_format",
      "//third_party/abseil-cpp/absl/types:optional",
      "//third_party/libyuv",
    ]

    data = video_coding_modules_tests_resources

    if (is_android) {
      sources += [ "codecs/test/videocodec_test_mediacodec.cc" ]

      deps += [ ":android_codec_factory_helper" ]
    }

    if (is_ios || is_mac) {
      sources += [ "codecs/test/videocodec_test_videotoolbox.cc" ]

      deps += [ ":objc_codec_factory_helper" ]

      if (num_video_coding_modules_tests_resources > 0) {
        deps += [ ":video_coding_modules_tests_resources_bundle_data" ]
      }
    }

    if (rtc_build_libvpx) {
      deps += [ rtc_libvpx_dir ]
    }
  }

  rtc_library("video_coding_unittests") {
    testonly = true

    sources = [
      "codecs/test/videocodec_test_fixture_config_unittest.cc",
      "codecs/test/videocodec_test_stats_impl_unittest.cc",
      "codecs/test/videoprocessor_unittest.cc",
      "codecs/vp8/default_temporal_layers_unittest.cc",
      "codecs/vp8/libvpx_vp8_simulcast_test.cc",
      "codecs/vp8/screenshare_layers_unittest.cc",
      "codecs/vp9/svc_config_unittest.cc",
      "codecs/vp9/svc_rate_allocator_unittest.cc",
      "decoding_state_unittest.cc",
      "fec_controller_unittest.cc",
      "frame_buffer2_unittest.cc",
      "generic_decoder_unittest.cc",
      "h264_sprop_parameter_sets_unittest.cc",
      "h264_sps_pps_tracker_unittest.cc",
      "histogram_unittest.cc",
      "include/mock/mock_vcm_callbacks.h",
      "jitter_buffer_unittest.cc",
      "jitter_estimator_tests.cc",
      "loss_notification_controller_unittest.cc",
      "nack_module_unittest.cc",
      "packet_buffer_unittest.cc",
      "receiver_unittest.cc",
      "rtp_frame_reference_finder_unittest.cc",
      "session_info_unittest.cc",
      "test/stream_generator.cc",
      "test/stream_generator.h",
      "timing_unittest.cc",
      "unique_timestamp_counter_unittest.cc",
      "utility/decoded_frames_history_unittest.cc",
      "utility/default_video_bitrate_allocator_unittest.cc",
      "utility/frame_dropper_unittest.cc",
      "utility/framerate_controller_unittest.cc",
      "utility/ivf_file_writer_unittest.cc",
      "utility/quality_scaler_unittest.cc",
      "utility/simulcast_rate_allocator_unittest.cc",
      "video_codec_initializer_unittest.cc",
      "video_receiver_unittest.cc",
    ]
    if (rtc_use_h264) {
      sources += [
        "codecs/h264/h264_encoder_impl_unittest.cc",
        "codecs/h264/h264_simulcast_unittest.cc",
      ]
    }

    deps = [
      ":codec_globals_headers",
      ":encoded_frame",
      ":nack_module",
      ":packet",
      ":simulcast_test_fixture_impl",
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_legacy",
      ":video_coding_utility",
      ":videocodec_test_impl",
      ":videocodec_test_stats_impl",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp8_temporal_layers",
      ":webrtc_vp9",
      ":webrtc_vp9_helpers",
      "..:module_api",
      "..:module_fec_api",
      "../../api:array_view",
      "../../api:create_simulcast_test_fixture_api",
      "../../api:fec_controller_api",
      "../../api:mock_fec_controller_override",
      "../../api:mock_video_decoder",
      "../../api:mock_video_encoder",
      "../../api:scoped_refptr",
      "../../api:simulcast_test_fixture_api",
      "../../api:videocodec_test_fixture_api",
      "../../api/task_queue:default_task_queue_factory",
      "../../api/test/video:function_video_factory",
      "../../api/video:builtin_video_bitrate_allocator_factory",
      "../../api/video:video_bitrate_allocation",
      "../../api/video:video_bitrate_allocator",
      "../../api/video:video_bitrate_allocator_factory",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video:video_rtp_headers",
      "../../api/video_codecs:video_codecs_api",
      "../../api/video_codecs:vp8_temporal_layers_factory",
      "../../common_video",
      "../../common_video/test:utilities",
      "../../media:rtc_media_base",
      "../../rtc_base",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_base_tests_utils",
      "../../rtc_base:rtc_numerics",
      "../../rtc_base:rtc_task_queue",
      "../../rtc_base:task_queue_for_test",
      "../../rtc_base/experiments:jitter_upper_bound_experiment",
      "../../system_wrappers",
      "../../system_wrappers:event_wrapper",
      "../../system_wrappers:field_trial",
      "../../system_wrappers:metrics",
      "../../test:fake_video_codecs",
      "../../test:field_trial",
      "../../test:fileutils",
      "../../test:test_common",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "../rtp_rtcp:rtp_video_header",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/types:optional",
      "//third_party/abseil-cpp/absl/types:variant",
    ]
    if (rtc_build_libvpx) {
      deps += [ rtc_libvpx_dir ]
    }
  }
}
