# 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("video_coding") {
  visibility = [ "*" ]
  sources = [
    "codec_database.cc",
    "codec_database.h",
    "codec_timer.cc",
    "codec_timer.h",
    "decoding_state.cc",
    "decoding_state.h",
    "encoded_frame.cc",
    "encoded_frame.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",
    "histogram.cc",
    "histogram.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",
    "nack_module.cc",
    "nack_module.h",
    "packet.cc",
    "packet.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",
  ]

  # TODO(jschuh): Bug 1348: fix this warning.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  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",
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_h264",
    ":webrtc_i420",
    ":webrtc_stereo",
    ":webrtc_vp8",
    ":webrtc_vp8_helpers",
    ":webrtc_vp9",
    "..:module_api",
    "..:module_api_public",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api:fec_controller_api",
    "../../api:optional",
    "../../api:video_frame_api",
    "../../api:video_frame_api_i420",
    "../../api/video_codecs:video_codecs_api",
    "../../call:video_stream_api",
    "../../common_video",
    "../../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",
    "../../system_wrappers",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
    "../rtp_rtcp:rtp_rtcp_format",
    "../utility:utility",
  ]
}

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

rtc_source_set("mock_headers") {
  testonly = true
  sources = [
    "codecs/interface/mock/mock_video_codec_interface.h",
    "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/stereo/include/stereo_globals.h",
    "codecs/vp8/include/vp8_globals.h",
    "codecs/vp9/include/vp9_globals.h",
  ]
}

rtc_source_set("video_coding_utility") {
  visibility = [ "*" ]
  sources = [
    "codecs/interface/video_codec_interface.h",
    "codecs/interface/video_error_codes.h",
    "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/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:optional",
    "../../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",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp_format",
  ]
}

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_frame_api_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",
  ]

  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/8745): stop using av_lockmgr_register
    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_frame_api_i420",
    "../../common_video:common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
    "//third_party/libyuv",
  ]
}

rtc_static_library("webrtc_stereo") {
  sources = [
    "codecs/stereo/include/stereo_decoder_adapter.h",
    "codecs/stereo/include/stereo_encoder_adapter.h",
    "codecs/stereo/stereo_decoder_adapter.cc",
    "codecs/stereo/stereo_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_frame_api",
    "../../api:video_frame_api_i420",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video:common_video",
    "../../rtc_base:rtc_base",
    "../../system_wrappers",
  ]
}

# This target includes VP8 files that may be used for any VP8 codec, internal SW or external HW.
rtc_source_set("webrtc_vp8_helpers") {
  sources = [
    "codecs/vp8/include/vp8_common_types.h",
    "codecs/vp8/screenshare_layers.h",
    "codecs/vp8/simulcast_rate_allocator.h",
    "codecs/vp8/temporal_layers.h",
  ]

  deps = [
    ":video_coding_utility",
    "..:module_api",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api/video_codecs:video_codecs_api",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base_approved",
    "../../system_wrappers",
    "../../system_wrappers:field_trial_api",
    "../../system_wrappers:metrics_api",
  ]
}

# This target includes the internal SW codec.
rtc_static_library("webrtc_vp8") {
  visibility = [ "*" ]
  sources = [
    "codecs/vp8/default_temporal_layers.cc",
    "codecs/vp8/default_temporal_layers.h",
    "codecs/vp8/include/vp8.h",
    "codecs/vp8/include/vp8_common_types.h",
    "codecs/vp8/screenshare_layers.cc",
    "codecs/vp8/simulcast_rate_allocator.cc",
    "codecs/vp8/temporal_layers.cc",
    "codecs/vp8/vp8_impl.cc",
    "codecs/vp8/vp8_impl.h",
  ]

  # TODO(jschuh): Bug 1348: fix this warning.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  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_vp8_helpers",
    "..:module_api",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api:optional",
    "../../api:video_frame_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/libyuv",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

rtc_static_library("webrtc_vp9") {
  visibility = [ "*" ]
  if (rtc_libvpx_build_vp9) {
    sources = [
      "codecs/vp9/include/vp9.h",
      "codecs/vp9/screenshare_layers.cc",
      "codecs/vp9/screenshare_layers.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",
    "..:module_api",
    "../../common_video",
    "../../rtc_base:checks",
    "../../rtc_base:rtc_base",
    "../../system_wrappers",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

if (rtc_include_tests) {
  if (is_ios || is_mac) {
    rtc_static_library("codec_test_objc") {
      sources = [
        "codecs/test/objc_codec_h264_test.h",
        "codecs/test/objc_codec_h264_test.mm",
      ]
      deps = [
        "../../api:video_frame_api",
        "../../api/video_codecs:video_codecs_api",
        "../../media:rtc_audio_video",
        "../../modules:module_api",
        "../../rtc_base:rtc_base_approved",
        "../../sdk:common_objc",
        "../../sdk:peerconnection_objc",
        "../../sdk:peerconnectionfactory_objc",
        "../../sdk:videotoolbox_objc",
        "../../sdk:videotracksource_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_utility") {
    testonly = true
    sources = [
      "codecs/vp8/simulcast_test_utility.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",
      ":webrtc_vp8",
      ":webrtc_vp8_helpers",
      "../../api:video_frame_api",
      "../../api:video_frame_api_i420",
      "../../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/stats.cc",
      "codecs/test/stats.h",
      "codecs/test/test_config.cc",
      "codecs/test/test_config.h",
      "codecs/test/video_codec_test.cc",
      "codecs/test/video_codec_test.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 = [
      ":codec_globals_headers",
      ":video_codec_interface",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_vp8",
      ":webrtc_vp8_helpers",
      "../..:webrtc_common",
      "../../:typedefs",
      "../../api:video_frame_api",
      "../../api:video_frame_api_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:sequenced_task_checker",
      "../../system_wrappers",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
    ]
  }

  video_coding_modules_tests_resources = [
    "../../resources/foreman_128x96.yuv",
    "../../resources/foreman_160x120.yuv",
    "../../resources/foreman_176x144.yuv",
    "../../resources/foreman_320x240.yuv",
  ]

  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("video_coding_modules_tests") {
    testonly = true

    sources = [
      "codecs/h264/test/h264_impl_unittest.cc",
      "codecs/stereo/test/stereo_adapter_unittest.cc",
      "codecs/test/videoprocessor_integrationtest.cc",
      "codecs/test/videoprocessor_integrationtest.h",
      "codecs/test/videoprocessor_integrationtest_libvpx.cc",
      "codecs/test/videoprocessor_integrationtest_openh264.cc",
      "codecs/test/videoprocessor_integrationtest_parameterized.cc",
      "codecs/vp8/test/vp8_impl_unittest.cc",
      "codecs/vp9/test/vp9_impl_unittest.cc",
    ]

    deps = [
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_h264",
      ":webrtc_stereo",
      ":webrtc_vp8",
      ":webrtc_vp8_helpers",
      ":webrtc_vp9",
      "../..:webrtc_common",
      "../../api:mock_video_codec_factory",
      "../../api:optional",
      "../../api:video_frame_api",
      "../../api:video_frame_api_i420",
      "../../api/video_codecs:video_codecs_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",
      "../../rtc_base:rtc_base_tests_utils",
      "../../system_wrappers",
      "../../test:field_trial",
      "../../test:test_common",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../video_capture",
    ]

    data = video_coding_modules_tests_resources

    if (is_android) {
      sources += [
        "codecs/test/android_test_initializer.cc",
        "codecs/test/android_test_initializer.h",
        "codecs/test/videoprocessor_integrationtest_mediacodec.cc",
      ]

      deps += [
        "../../sdk/android:libjingle_peerconnection_jni",
        "//base",
      ]
    }

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

      deps += [
        ":codec_test_objc",
        ":video_coding_modules_tests_resources_bundle_data",
        "../../media:rtc_media_base",
        "../../sdk:videotoolbox_objc",
      ]
    }

    if (rtc_use_h264) {
      defines = [ "WEBRTC_USE_H264" ]
    }

    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/stats_unittest.cc",
      "codecs/test/test_config_unittest.cc",
      "codecs/test/videoprocessor_unittest.cc",
      "codecs/vp8/default_temporal_layers_unittest.cc",
      "codecs/vp8/screenshare_layers_unittest.cc",
      "codecs/vp8/simulcast_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_libvpx_build_vp9) {
      sources += [ "codecs/vp9/vp9_screenshare_layers_unittest.cc" ]
    }
    if (rtc_use_h264) {
      sources += [ "codecs/h264/h264_encoder_impl_unittest.cc" ]
    }
    deps = [
      ":mock_headers",
      ":simulcast_test_utility",
      ":video_codec_interface",
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp8_helpers",
      ":webrtc_vp9",
      "..:module_api",
      "../..:webrtc_common",
      "../../:typedefs",
      "../../api:video_frame_api",
      "../../api:video_frame_api_i420",
      "../../api/video_codecs:video_codecs_api",
      "../../common_video:common_video",
      "../../rtc_base:checks",
      "../../rtc_base:rtc_base",
      "../../rtc_base:rtc_base_approved",
      "../../rtc_base:rtc_numerics",
      "../../rtc_base:rtc_task_queue",
      "../../system_wrappers",
      "../../system_wrappers:field_trial_api",
      "../../system_wrappers:metrics_api",
      "../../system_wrappers:metrics_default",
      "../../test:field_trial",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp_format",
      "//testing/gmock",
    ]
    if (rtc_build_libvpx) {
      deps += [ rtc_libvpx_dir ]
    }

    # TODO(jschuh): bugs.webrtc.org/1348: fix this warning.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
    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" ]
    }
  }
}
