# 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") {
  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_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",
    "include/video_coding_defines.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",
    "protection_bitrate_calculator.cc",
    "protection_bitrate_calculator.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 = [
    ":video_coding_utility",
    ":webrtc_h264",
    ":webrtc_i420",
    ":webrtc_vp8",
    ":webrtc_vp9",
    "..:module_api",
    "../..:video_stream_api",
    "../..:webrtc_common",
    "../../base:rtc_base",
    "../../base:rtc_base_approved",
    "../../base:rtc_numerics",
    "../../base:rtc_task_queue",
    "../../common_video",
    "../../system_wrappers",
    "../rtp_rtcp:rtp_rtcp",
    "../utility:utility",
  ]
}

rtc_static_library("video_coding_utility") {
  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/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 = [
    "..:module_api",
    "../..:webrtc_common",
    "../../api/video_codecs:video_codecs_api",
    "../../base:rtc_base_approved",
    "../../base:rtc_numerics",
    "../../base:rtc_task_queue",
    "../../common_video",
    "../../modules/rtp_rtcp:rtp_rtcp",
    "../../system_wrappers",
  ]
}

rtc_static_library("webrtc_h264") {
  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_coding_utility",
    "../../base:rtc_base_approved",
    "../../media:rtc_media_base",
    "../../system_wrappers",
  ]

  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",
      "../../media:rtc_media_base",
      "//third_party/ffmpeg:ffmpeg",
      "//third_party/openh264:encoder",
    ]
  }
}

rtc_static_library("webrtc_i420") {
  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 = [
    "../..:webrtc_common",
    "../../base:rtc_base_approved",
    "../../common_video:common_video",
    "../../system_wrappers",
  ]
}

rtc_static_library("webrtc_vp8") {
  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_encoder_adapter.cc",
    "codecs/vp8/simulcast_encoder_adapter.h",
    "codecs/vp8/simulcast_rate_allocator.cc",
    "codecs/vp8/simulcast_rate_allocator.h",
    "codecs/vp8/temporal_layers.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_coding_utility",
    "..:module_api",
    "../..:webrtc_common",
    "../../api/video_codecs:video_codecs_api",
    "../../base:rtc_base_approved",
    "../../base:rtc_task_queue",
    "../../common_video",
    "../../system_wrappers",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

rtc_static_library("webrtc_vp9") {
  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_coding_utility",
    "..:module_api",
    "../../base:rtc_base_approved",
    "../../common_video",
    "../../system_wrappers",
  ]
  if (rtc_build_libvpx) {
    deps += [ rtc_libvpx_dir ]
  }
}

if (rtc_include_tests) {
  rtc_executable("video_quality_measurement") {
    testonly = true

    sources = [
      "codecs/tools/video_quality_measurement.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_codecs_test_framework",
      ":video_coding",
      ":webrtc_vp8",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../system_wrappers:field_trial_default",
      "../../system_wrappers:metrics_default",
      "../../system_wrappers:system_wrappers",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../video_capture",
      "//third_party/gflags",
    ]
  }  # video_quality_measurement

  rtc_source_set("video_codecs_test_framework") {
    testonly = true
    sources = [
      "codecs/test/mock/mock_packet_manipulator.h",
      "codecs/test/packet_manipulator.cc",
      "codecs/test/packet_manipulator.h",
      "codecs/test/predictive_packet_manipulator.cc",
      "codecs/test/predictive_packet_manipulator.h",
      "codecs/test/stats.cc",
      "codecs/test/stats.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 = [
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_vp8",
      "../..:webrtc_common",
      "../../api/video_codecs:video_codecs_api",
      "../../base:rtc_base_approved",
      "../../common_video:common_video",
      "../../system_wrappers:system_wrappers",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
    ]
  }

  rtc_source_set("video_coding_videoprocessor_integration_test") {
    testonly = true

    sources = [
      "codecs/test/videoprocessor_integrationtest.h",
    ]

    deps = [
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp9",
      "../..:webrtc_common",
      "../../base:rtc_base_approved",
      "../../media:rtc_media",
      "../../test:test_support",
      "../../test:video_test_support",
    ]

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

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

    if (is_ios || is_mac) {
      deps += [
        "../../media:rtc_media_base",
        "../../sdk:objc_videotoolbox",
      ]
    }
  }

  rtc_source_set("video_coding_modules_tests") {
    testonly = true

    # Skip restricting visibility on mobile platforms since the tests on those
    # gets additional generated targets which would require many lines here to
    # cover (which would be confusing to read and hard to maintain).
    if (!is_android && !is_ios) {
      visibility = [ "//webrtc/modules:modules_tests" ]
    }
    sources = [
      "codecs/h264/test/h264_impl_unittest.cc",
      "codecs/test/videoprocessor_integrationtest.cc",
      "codecs/vp8/test/vp8_impl_unittest.cc",
      "codecs/vp9/test/vp9_impl_unittest.cc",
    ]

    deps = [
      ":video_codecs_test_framework",
      ":video_coding_videoprocessor_integration_test",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp9",
      "../../api:video_frame_api",
      "../../base:rtc_base_approved",
      "../../common_video:common_video",
      "../../test:test_support",
      "../../test:video_test_common",
      "../video_capture",
    ]

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

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

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

  if (is_ios || is_mac) {
    bundle_data("plot_videoprocessor_integrationtest_bundle_data") {
      testonly = true
      sources = plot_videoprocessor_integrationtest_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  # This executable is meant for local codec perf testing and should not be run
  # on the trybots/buildbots, hence the existence of this special build target.
  rtc_test("plot_videoprocessor_integrationtest") {
    testonly = true

    sources = [
      "codecs/test/plot_videoprocessor_integrationtest.cc",
    ]

    deps = [
      ":video_coding_videoprocessor_integration_test",
      "../../test:test_main",
      "../../test:video_test_common",
      "../video_capture",
    ]

    data = plot_videoprocessor_integrationtest_resources

    if (is_android) {
      deps += [
        "../../base:rtc_base_approved",

        # TODO(brandtr): Figure out if the java dep below could be moved into
        # :video_coding_videoprocessor_integration_test, where it belongs.
        # When that is done, support for Android HW codecs can be added to the
        # modules_tests target as well.
        "../../sdk/android:libjingle_peerconnection_java",
        "../../sdk/android:libjingle_peerconnection_jni",
        "//base",
        "//testing/android/native_test:native_test_support",
      ]

      shard_timeout = 900
    }

    if (is_ios || is_mac) {
      deps += [ ":plot_videoprocessor_integrationtest_bundle_data" ]
    }

    # TODO(brandtr): Remove this define when the modules_tests target properly
    # loads the Java classes mentioned above.
    defines = [ "WEBRTC_VIDEOPROCESSOR_INTEGRATIONTEST_HW_CODECS_ENABLED" ]

    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

    # Skip restricting visibility on mobile platforms since the tests on those
    # gets additional generated targets which would require many lines here to
    # cover (which would be confusing to read and hard to maintain).
    if (!is_android && !is_ios) {
      visibility = [ "//webrtc/modules:modules_unittests" ]
    }
    sources = [
      "codecs/test/packet_manipulator_unittest.cc",
      "codecs/test/stats_unittest.cc",
      "codecs/test/videoprocessor_unittest.cc",
      "codecs/vp8/default_temporal_layers_unittest.cc",
      "codecs/vp8/screenshare_layers_unittest.cc",
      "codecs/vp8/simulcast_encoder_adapter_unittest.cc",
      "codecs/vp8/simulcast_unittest.cc",
      "codecs/vp8/simulcast_unittest.h",
      "decoding_state_unittest.cc",
      "frame_buffer2_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",
      "protection_bitrate_calculator_unittest.cc",
      "receiver_unittest.cc",
      "rtp_frame_reference_finder_unittest.cc",
      "sequence_number_util_unittest.cc",
      "session_info_unittest.cc",
      "test/stream_generator.cc",
      "test/stream_generator.h",
      "timing_unittest.cc",
      "utility/default_video_bitrate_allocator_unittest.cc",
      "utility/frame_dropper_unittest.cc",
      "utility/ivf_file_writer_unittest.cc",
      "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 = [
      ":video_codecs_test_framework",
      ":video_coding",
      ":video_coding_utility",
      ":webrtc_h264",
      ":webrtc_vp8",
      ":webrtc_vp9",
      "..:module_api",
      "../..:webrtc_common",
      "../../api:video_frame_api",
      "../../api/video_codecs:video_codecs_api",
      "../../base:rtc_base",
      "../../base:rtc_base_approved",
      "../../base:rtc_task_queue",
      "../../common_video:common_video",
      "../../system_wrappers:metrics_default",
      "../../system_wrappers:system_wrappers",
      "../../test:field_trial",
      "../../test:test_support",
      "../../test:video_test_common",
      "../../test:video_test_support",
      "../rtp_rtcp:rtp_rtcp",
      "//testing/gmock",
    ]
    if (rtc_build_libvpx) {
      deps += [ rtc_libvpx_dir ]
    }
    if (is_win) {
      cflags = [
        # TODO(kjellander): bugs.webrtc.org/261: Fix this warning.
        "/wd4373",  # virtual function override.
      ]
    }

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