# 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 = [ "*" ]
  deps = []

  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" ]
  }

  if (rtc_use_builtin_sw_codecs) {
    deps += [
      ":webrtc_i420",
      ":webrtc_vp8",
      ":webrtc_vp9",
    ]
  }

  deps += [
    ":codec_globals_headers",
    ":video_codec_interface",
    ":video_coding_utility",
    ":webrtc_h264",
    ":webrtc_vp8_helpers",
    "..: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",
    "../../rtc_base/system:fallthrough",
    "../../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/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_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_frame_api",
    "../../api:video_frame_api_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 VP8 files that may be used for any VP8 codec, internal SW or external HW.
rtc_static_library("webrtc_vp8_helpers") {
  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/screenshare_layers.h",
    "codecs/vp8/simulcast_rate_allocator.cc",
    "codecs/vp8/simulcast_rate_allocator.h",
    "codecs/vp8/temporal_layers.cc",
    "codecs/vp8/temporal_layers.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",
    "..:module_api",
    "../..:webrtc_common",
    "../../:typedefs",
    "../../api:optional",
    "../../api:video_frame_api",
    "../../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/libyuv",
  ]
}

# This target includes the internal SW codec.
rtc_static_library("webrtc_vp8") {
  visibility = [ "*" ]
  sources = [
    "codecs/vp8/include/vp8.h",
    "codecs/vp8/include/vp8_common_types.h",
    "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",
    "../../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/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:native_api",
        "../../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_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_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 = [
      ":codec_globals_headers",
      ":video_codec_interface",
      ":video_coding",
      ":video_coding_utility",
      ":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",
      "../../media:rtc_audio_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",
      "//third_party/libyuv",
    ]
  }

  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/multiplex/test/multiplex_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_multiplex",
      ":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",
      "../../media:rtc_software_fallback_wrappers",
      "../../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:native_api_base",
        "../../sdk/android:native_api_codecs",
        "../../sdk/android:native_api_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",
    ]
    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" ]
    }
  }
}
