# 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")

source_set("video") {
  sources = [
    "../video_engine/call_stats.cc",
    "../video_engine/call_stats.h",
    "../video_engine/encoder_state_feedback.cc",
    "../video_engine/encoder_state_feedback.h",
    "../video_engine/overuse_frame_detector.cc",
    "../video_engine/overuse_frame_detector.h",
    "../video_engine/payload_router.cc",
    "../video_engine/payload_router.h",
    "../video_engine/report_block_stats.cc",
    "../video_engine/report_block_stats.h",
    "../video_engine/stream_synchronization.cc",
    "../video_engine/stream_synchronization.h",
    "../video_engine/vie_channel.cc",
    "../video_engine/vie_channel.h",
    "../video_engine/vie_channel_group.cc",
    "../video_engine/vie_channel_group.h",
    "../video_engine/vie_defines.h",
    "../video_engine/vie_encoder.cc",
    "../video_engine/vie_encoder.h",
    "../video_engine/vie_receiver.cc",
    "../video_engine/vie_receiver.h",
    "../video_engine/vie_remb.cc",
    "../video_engine/vie_remb.h",
    "../video_engine/vie_sync_module.cc",
    "../video_engine/vie_sync_module.h",
    "encoded_frame_callback_adapter.cc",
    "encoded_frame_callback_adapter.h",
    "receive_statistics_proxy.cc",
    "receive_statistics_proxy.h",
    "send_statistics_proxy.cc",
    "send_statistics_proxy.h",
    "video_capture_input.cc",
    "video_capture_input.h",
    "video_decoder.cc",
    "video_encoder.cc",
    "video_receive_stream.cc",
    "video_receive_stream.h",
    "video_send_stream.cc",
    "video_send_stream.h",
  ]

  configs += [ "..:common_config" ]
  public_configs = [ "..:common_inherited_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 = [
    "..:rtc_event_log",
    "..:webrtc_common",
    "../common_video",
    "../modules/bitrate_controller",
    "../modules/pacing",
    "../modules/rtp_rtcp",
    "../modules/utility",
    "../modules/video_capture:video_capture_module",
    "../modules/video_coding",
    "../modules/video_processing",
    "../modules/video_render:video_render_module",
    "../voice_engine",
    "../system_wrappers",
  ]
}
