# 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("../build/webrtc.gni")
import("//testing/test.gni")

config("common_video_config") {
  include_dirs = [
    "include",
    "libyuv/include",
  ]
}

source_set("common_video") {
  sources = [
    "bitrate_adjuster.cc",
    "h264/h264_common.cc",
    "h264/h264_common.h",
    "h264/pps_parser.cc",
    "h264/pps_parser.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/frame_callback.h",
    "include/i420_buffer_pool.h",
    "include/incoming_video_stream.h",
    "include/video_frame_buffer.h",
    "incoming_video_stream.cc",
    "libyuv/include/webrtc_libyuv.h",
    "libyuv/webrtc_libyuv.cc",
    "video_frame.cc",
    "video_frame_buffer.cc",
    "video_render_frames.cc",
    "video_render_frames.h",
  ]

  include_dirs = [ "../modules/interface" ]

  configs += [ "..:common_config" ]
  public_configs = [
    "..:common_inherited_config",
    ":common_video_config",
  ]

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  deps = [
    "..:webrtc_common",
    "../system_wrappers",
  ]

  if (rtc_build_libyuv) {
    deps += [ "$rtc_libyuv_dir" ]
    public_deps = [
      "$rtc_libyuv_dir",
    ]
  } else {
    # Need to add a directory normally exported by libyuv.
    include_dirs += [ "$rtc_libyuv_dir/include" ]
  }

  if (is_ios || is_mac) {
    sources += [
      "corevideo_frame_buffer.cc",
      "include/corevideo_frame_buffer.h",
    ]
    libs = [ "CoreVideo.framework" ]
  }
}

if (rtc_include_tests) {
  test("common_video_unittests") {
    testonly = true

    sources = [
      "bitrate_adjuster_unittest.cc",
      "h264/pps_parser_unittest.cc",
      "h264/sps_parser_unittest.cc",
      "h264/sps_vui_rewriter_unittest.cc",
      "i420_buffer_pool_unittest.cc",
      "i420_video_frame_unittest.cc",
      "libyuv/libyuv_unittest.cc",
    ]

    configs += [ "..:common_config" ]
    public_configs = [ "..:common_inherited_config" ]

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

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      configs -= [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":common_video",
      "../system_wrappers:system_wrappers",
      "../test:test_support_main",
      "../test:video_test_common",
      "//testing/gmock",
      "//testing/gtest",
    ]

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]

      # This needs to be kept in sync with the .isolate file.
      # TODO(kjellander); Move this to android_assets targets instead.
      data = [
        "//resources/foreman_cif.yuv",
      ]
    }
  }
}
