# 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_static_library("encoded_frame") {
  visibility = [ "*" ]
  sources = [
    "encoded_frame.cc",
    "encoded_frame.h",
  ]
  deps = [
    ":video_codec_interface",
    "../../:webrtc_common",
    "../../api/video:video_frame_i420",
    "../../common_video:common_video",
    "../../modules:module_api",
    "../../modules:module_api_public",
    "../../modules/video_coding:video_coding_utility",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base/experiments:alr_experiment",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:system_wrappers",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }
}

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

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":packet",
    "..:module_api",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../system_wrappers",
    "../utility:utility",
  ]
}

rtc_static_library("packet") {
  visibility = [ "*" ]
  sources = [
    "packet.cc",
    "packet.h",
  ]
  deps = [
    "..:module_api",
    "../../:typedefs",
  ]
}

rtc_static_library("video_coding") {
  visibility = [ "*" ]
  deps = []

  sources = [
    "codec_timer.cc",
    "codec_timer.h",
    "decoder_database.cc",
    "decoder_database.h",
    "decoding_state.cc",
    "decoding_state.h",
    "encoder_database.cc",
    "encoder_database.h",
    "fec_controller_default.cc",
    "fec_controller_default.h",
    "fec_rate_table.h",
    "frame_buffer.cc",
    "frame_buffer.h",
    "frame_buffer2.cc",
    "frame_buffer2.h",
    "frame_object.cc",
    "frame_object.h",
    "generic_decoder.cc",
    "generic_decoder.h",
    "generic_encoder.cc",
    "generic_encoder.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",
    "include/video_coding.h",
    "inter_frame_delay.cc",
    "inter_frame_delay.h",
    "internal_defines.h",
    "jitter_buffer.cc",
    "jitter_buffer.h",
    "jitter_buffer_common.h",
    "jitter_estimator.cc",
    "jitter_estimator.h",
    "media_opt_util.cc",
    "media_opt_util.h",
    "media_optimization.cc",
    "media_optimization.h",
    "nack_fec_tables.h",
    "packet_buffer.cc",
    "packet_buffer.h",
    "qp_parser.cc",
    "qp_parser.h",
    "receiver.cc",
    "receiver.h",
    "rtp_frame_reference_finder.cc",
    "rtp_frame_reference_finder.h",
    "rtt_filter.cc",
    "rtt_filter.h",
    "session_info.cc",
    "session_info.h",
    "timestamp_map.cc",
    "timestamp_map.h",
    "timing.cc",
    "timing.h",
    "video_codec_initializer.cc",
    "video_coding_impl.cc",
    "video_coding_impl.h",
    "video_receiver.cc",
    "video_sender.cc",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps += [
    ":codec_globals_headers",
    ":encoded_frame",
    ":packet",
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_vp9_helpers",
    "..:module_api",
    "..:module_api_public",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api:fec_controller_api",
    "../../api/video:encoded_frame",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base:base64",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../rtc_base:rtc_task_queue",
    "../../rtc_base:sequenced_task_checker",
    "../../rtc_base/experiments:alr_experiment",
    "../../rtc_base/system:fallthrough",
    "../../rtc_base/time:timestamp_extrapolator",
    "../../system_wrappers",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
    "../rtp_rtcp:rtp_rtcp_format",
    "../utility:utility",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("video_codec_interface") {
  visibility = [ "*" ]
  sources = [
    "include/video_codec_interface.h",
    "include/video_coding_defines.h",
    "include/video_error_codes.h",
    "video_coding_defines.cc",
  ]
  deps = [
    "..:module_api",
    "../..:typedefs",
    "../..:webrtc_common",
    "../../api/video:video_frame",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video:common_video",
  ]
}

rtc_source_set("mock_headers") {
  testonly = true
  sources = [
    "include/mock/mock_video_codec_interface.h",
  ]
  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../test:test_support",
  ]
}

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

rtc_source_set("video_coding_utility") {
  visibility = [ "*" ]
  sources = [
    "utility/default_video_bitrate_allocator.cc",
    "utility/default_video_bitrate_allocator.h",
    "utility/frame_dropper.cc",
    "utility/frame_dropper.h",
    "utility/ivf_file_writer.cc",
    "utility/ivf_file_writer.h",
    "utility/moving_average.cc",
    "utility/moving_average.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",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    "..:module_api",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../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:sequenced_task_checker",
    "../../rtc_base/experiments:quality_scaling_experiment",
    "../../system_wrappers",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
    "../rtp_rtcp:rtp_rtcp_format",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_static_library("webrtc_h264") {
  visibility = [ "*" ]
  sources = [
    "codecs/h264/h264.cc",
    "codecs/h264/include/h264.h",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  defines = []
  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "../../api/video:video_frame_i420",
    "../../api/video_codecs:video_codecs_api",
    "../../media:rtc_h264_profile_id",
    "../../media:rtc_media_base",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../system_wrappers:metrics_api",
    "//third_party/libyuv",
  ]

  if (rtc_use_h264) {
    defines += [ "WEBRTC_USE_H264" ]
    if (rtc_initialize_ffmpeg) {
      defines += [ "WEBRTC_INITIALIZE_FFMPEG" ]
    }
    sources += [
      "codecs/h264/h264_decoder_impl.cc",
      "codecs/h264/h264_decoder_impl.h",
      "codecs/h264/h264_encoder_impl.cc",
      "codecs/h264/h264_encoder_impl.h",
    ]
    deps += [
      "../../common_video",
      "//third_party/ffmpeg:ffmpeg",
      "//third_party/openh264:encoder",
    ]

    # TODO(bugs.webrtc.org/9352): Stop using ffmpeg deprecated functions.
    if (!is_win) {
      cflags = [ "-Wno-deprecated-declarations" ]
    }

    if (!build_with_mozilla) {
      deps += [ "../../media:rtc_media_base" ]
    }
  }
}

rtc_static_library("webrtc_i420") {
  visibility = [ "*" ]
  sources = [
    "codecs/i420/i420.cc",
    "codecs/i420/include/i420.h",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api/video:video_frame_i420",
    "../../common_video:common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
    "//third_party/libyuv",
  ]
}

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

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "..:module_api",
    "../..:webrtc_common",
    "../../api/video:video_frame",
    "../../api/video:video_frame_i420",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video:common_video",
    "../../rtc_base:rtc_base",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp_format",
  ]
}

# This target includes the internal SW codec.
rtc_static_library("webrtc_vp8") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  sources = [
    "codecs/vp8/default_temporal_layers.cc",
    "codecs/vp8/default_temporal_layers.h",
    "codecs/vp8/include/vp8.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",
    "codecs/vp8/screenshare_layers.cc",
    "codecs/vp8/screenshare_layers.h",
    "codecs/vp8/temporal_layers.cc",
    "codecs/vp8/temporal_layers.h",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    "..:module_api",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api/video:video_frame",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../rtc_base:rtc_numerics",
    "../../system_wrappers",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/libyuv",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

# This target includes VP9 files that may be used for any VP9 codec, internal SW or external HW.
rtc_static_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",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    "../..:webrtc_common",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base:checks",
  ]
}

rtc_static_library("webrtc_vp9") {
  visibility = [ "*" ]
  poisonous = [ "software_video_codecs" ]
  if (rtc_libvpx_build_vp9) {
    sources = [
      "codecs/vp9/include/vp9.h",
      "codecs/vp9/vp9_frame_buffer_pool.cc",
      "codecs/vp9/vp9_frame_buffer_pool.h",
      "codecs/vp9/vp9_impl.cc",
      "codecs/vp9/vp9_impl.h",
    ]
  } else {
    sources = [
      "codecs/vp9/vp9_noop.cc",
    ]
  }

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_vp9_helpers",
    "..:module_api",
    "../..:webrtc_common",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp_format",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

if (rtc_include_tests) {
  if (is_android) {
    rtc_static_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: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_static_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_codecs:video_codecs_api",
        "../../media:rtc_audio_video",
        "../../media:rtc_media_base",
        "../../modules:module_api",
        "../../rtc_base:rtc_base_approved",
        "../../sdk:common_objc",
        "../../sdk:native_api",
        "../../sdk:peerconnectionfactory_base_objc",
        "../../sdk:videocodec_objc",
        "../../sdk:videosource_objc",
        "../../sdk:videotoolbox_objc",
      ]

      if (!build_with_chromium && is_clang) {
        # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }
    }
  }

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

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

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

  rtc_source_set("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",
    ]

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":video_codec_interface",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_vp9_helpers",
      "../..:webrtc_common",
      "../../:typedefs",
      "../../api:videocodec_test_fixture_api",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video:common_video",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_task_queue",
      "../../rtc_base:rtc_task_queue_for_test",
      "../../rtc_base:sequenced_task_checker",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//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_source_set("videocodec_test_impl") {
    testonly = true
    sources = [
      "codecs/test/videocodec_test_fixture_impl.cc",
      "codecs/test/videocodec_test_fixture_impl.h",
      "codecs/test/videocodec_test_stats_impl.cc",
      "codecs/test/videocodec_test_stats_impl.h",
    ]
    deps = [
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding_utility",
      ":webrtc_vp9_helpers",
      "../..:webrtc_common",
      "../../api:videocodec_test_fixture_api",
      "../../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:rtc_event",
      "../../rtc_base:rtc_task_queue_for_test",
      "../../system_wrappers",
      "../../test:fileutils",
      "../../test:test_common",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_source_set("video_coding_modules_tests") {
    testonly = true

    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/test/videocodec_test_parameterized.cc",
      "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_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:videocodec_test_fixture_api",
      "../../api/video:video_frame_i420",
      "../../api/video_codecs:rtc_software_fallback_wrappers",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video",
      "../../media:rtc_h264_profile_id",
      "../../media:rtc_internal_video_codecs",
      "../../media:rtc_media_base",
      "../../rtc_base:rtc_base",
      "../../test:fileutils",
      "../../test:test_common",
      "../../test:test_support",
      "../../test:video_test_common",
      "../rtp_rtcp:rtp_rtcp_format",
      "//third_party/abseil-cpp/absl/types:optional",
    ]

    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 (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_source_set("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_encoder_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",
      "nack_module_unittest.cc",
      "receiver_unittest.cc",
      "rtp_frame_reference_finder_unittest.cc",
      "session_info_unittest.cc",
      "test/stream_generator.cc",
      "test/stream_generator.h",
      "test/test_util.h",
      "timing_unittest.cc",
      "utility/default_video_bitrate_allocator_unittest.cc",
      "utility/frame_dropper_unittest.cc",
      "utility/ivf_file_writer_unittest.cc",
      "utility/mock/mock_frame_dropper.h",
      "utility/moving_average_unittest.cc",
      "utility/quality_scaler_unittest.cc",
      "utility/simulcast_rate_allocator_unittest.cc",
      "video_codec_initializer_unittest.cc",
      "video_packet_buffer_unittest.cc",
      "video_receiver_unittest.cc",
      "video_sender_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",
      ":mock_headers",
      ":nack_module",
      ":packet",
      ":simulcast_test_fixture_impl",
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_utility",
      ":videocodec_test_impl",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp9",
      ":webrtc_vp9_helpers",
      "..:module_api",
      "../..:webrtc_common",
      "../../:typedefs",
      "../../api:create_simulcast_test_fixture_api",
      "../../api:simulcast_test_fixture_api",
      "../../api:videocodec_test_fixture_api",
      "../../api/video:video_frame",
      "../../api/video:video_frame_i420",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video:common_video",
      "../../media:rtc_media_base",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_base_tests_utils",
      "../../rtc_base:rtc_numerics",
      "../../rtc_base:rtc_task_queue",
      "../../rtc_base:rtc_task_queue_for_test",
      "../../system_wrappers",
      "../../system_wrappers:field_trial_api",
      "../../system_wrappers:metrics_api",
      "../../system_wrappers:metrics_default",
      "../../test:field_trial",
      "../../test:fileutils",
      "../../test:test_common",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
    ]
    if (rtc_build_libvpx) {
      deps += [ rtc_libvpx_dir ]
    }
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
}
