# 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("common_video") {
  visibility = [ "*" ]

  sources = [
    "bitrate_adjuster.cc",
    "frame_rate_estimator.cc",
    "frame_rate_estimator.h",
    "h264/h264_bitstream_parser.cc",
    "h264/h264_bitstream_parser.h",
    "h264/h264_common.cc",
    "h264/h264_common.h",
    "h264/pps_parser.cc",
    "h264/pps_parser.h",
    "h264/profile_level_id.h",
    "h264/sps_parser.cc",
    "h264/sps_parser.h",
    "h264/sps_vui_rewriter.cc",
    "h264/sps_vui_rewriter.h",
    "i420_buffer_pool.cc",
    "include/bitrate_adjuster.h",
    "include/i420_buffer_pool.h",
    "include/incoming_video_stream.h",
    "include/quality_limitation_reason.h",
    "include/video_frame.h",
    "include/video_frame_buffer.h",
    "incoming_video_stream.cc",
    "libyuv/include/webrtc_libyuv.h",
    "libyuv/webrtc_libyuv.cc",
    "video_frame_buffer.cc",
    "video_render_frames.cc",
    "video_render_frames.h",
  ]

  deps = [
    "../api:scoped_refptr",
    "../api/task_queue",
    "../api/units:time_delta",
    "../api/units:timestamp",
    "../api/video:encoded_image",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_bitrate_allocator",
    "../api/video:video_frame",
    "../api/video:video_frame_i420",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:bitstream_parser_api",
    "../media:rtc_h264_profile_id",
    "../rtc_base",
    "../rtc_base:checks",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:safe_minmax",
    "../rtc_base/system:rtc_export",
    "../system_wrappers:metrics",
    "//third_party/libyuv",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

if (rtc_include_tests) {
  common_video_resources = [ "../resources/foreman_cif.yuv" ]

  if (is_ios) {
    bundle_data("common_video_unittests_bundle_data") {
      testonly = true
      sources = common_video_resources
      outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
    }
  }

  rtc_test("common_video_unittests") {
    testonly = true

    sources = [
      "bitrate_adjuster_unittest.cc",
      "frame_rate_estimator_unittest.cc",
      "h264/h264_bitstream_parser_unittest.cc",
      "h264/pps_parser_unittest.cc",
      "h264/profile_level_id_unittest.cc",
      "h264/sps_parser_unittest.cc",
      "h264/sps_vui_rewriter_unittest.cc",
      "i420_buffer_pool_unittest.cc",
      "libyuv/libyuv_unittest.cc",
      "video_frame_unittest.cc",
    ]

    deps = [
      ":common_video",
      "../:webrtc_common",
      "../api:scoped_refptr",
      "../api/units:time_delta",
      "../api/video:video_frame",
      "../api/video:video_frame_i010",
      "../api/video:video_frame_i420",
      "../api/video:video_rtp_headers",
      "../media:rtc_h264_profile_id",
      "../rtc_base",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../system_wrappers:system_wrappers",
      "../test:fileutils",
      "../test:frame_utils",
      "../test:test_main",
      "../test:test_support",
      "../test:video_test_common",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/types:optional",
      "//third_party/libyuv",
    ]

    data = common_video_resources
    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
      shard_timeout = 900
    }

    if (is_ios) {
      deps += [ ":common_video_unittests_bundle_data" ]
    }
  }
}
