# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

source_set("codec") {
  deps = [
    ":decoder",
    ":encoder",
  ]
}

source_set("encoder") {
  sources = [
    "audio_encoder.h",
    "audio_encoder_opus.cc",
    "audio_encoder_opus.h",
    "video_encoder.cc",
    "video_encoder.h",
    "video_encoder_helper.cc",
    "video_encoder_helper.h",
    "video_encoder_verbatim.cc",
    "video_encoder_verbatim.h",
    "video_encoder_vpx.cc",
    "video_encoder_vpx.h",
    "webrtc_video_encoder_vpx.cc",
    "webrtc_video_encoder_vpx.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    ":vpx_codec",
    "//base/third_party/dynamic_annotations",
    "//media",
    "//media:shared_memory_support",
    "//remoting/proto",
    "//third_party/libvpx",
    "//third_party/libyuv",
    "//third_party/opus",
    "//third_party/webrtc/modules/desktop_capture:primitives",
  ]

  if (is_nacl) {
    sources -= [
      "audio_encoder.h",
      "audio_encoder_opus.cc",
      "audio_encoder_opus.h",
      "video_encoder.cc",
      "video_encoder.h",
      "video_encoder_helper.cc",
      "video_encoder_helper.h",
      "video_encoder_verbatim.cc",
      "video_encoder_verbatim.h",
      "video_encoder_vpx.cc",
      "video_encoder_vpx.h",
      "webrtc_video_encoder_vpx.cc",
      "webrtc_video_encoder_vpx.h",
    ]
    deps -= [
      "//media",
      "//media:shared_memory_support",
    ]
  }

  # Opus depends on //media, which is not a supported include for iOS.
  # Removing Opus for iOS builds.
  if (is_ios) {
    sources -= [
      "audio_encoder_opus.cc",
      "audio_encoder_opus.h",
    ]
    deps -= [
      "//media",
      "//media:shared_memory_support",
    ]
  }
}

source_set("decoder") {
  sources = [
    "audio_decoder.cc",
    "audio_decoder.h",
    "audio_decoder_opus.cc",
    "audio_decoder_opus.h",
    "video_decoder.h",
    "video_decoder_verbatim.cc",
    "video_decoder_verbatim.h",
    "video_decoder_vpx.cc",
    "video_decoder_vpx.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    ":vpx_codec",
    "//base/third_party/dynamic_annotations",
    "//remoting/proto",
    "//third_party/libvpx",
    "//third_party/libyuv",
    "//third_party/opus",
    "//third_party/webrtc/modules/desktop_capture:primitives",
  ]
}

source_set("vpx_codec") {
  sources = [
    "scoped_vpx_codec.cc",
    "scoped_vpx_codec.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    "//third_party/libvpx",
  ]

  deps = [
    "//base/third_party/dynamic_annotations",
    "//remoting/proto",
    "//third_party/libyuv",
    "//third_party/webrtc/modules/desktop_capture:primitives",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "audio_encoder_opus_unittest.cc",
    "codec_test.cc",
    "codec_test.h",
    "video_decoder_vpx_unittest.cc",
    "video_encoder_helper_unittest.cc",
    "video_encoder_verbatim_unittest.cc",
    "video_encoder_vpx_unittest.cc",
  ]

  deps = [
    ":codec",
    "//base",
    "//remoting/proto",
    "//testing/gtest",
    "//third_party/webrtc/modules/desktop_capture",
  ]

  if (is_ios) {
    sources -= [ "audio_encoder_opus_unittest.cc" ]
  }
}
