# Copyright (c) 2016 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/config/linux/pkg_config.gni")
import("../build/webrtc.gni")

group("media") {
  public_deps = [
    ":rtc_media",
  ]
}

config("rtc_media_defines_config") {
  defines = [
    "HAVE_WEBRTC_VIDEO",
    "HAVE_WEBRTC_VOICE",
  ]
}

config("rtc_media_warnings_config") {
  # GN orders flags on a target before flags from configs. The default config
  # adds these flags so to cancel them out they need to come from a config and
  # cannot be on the target directly.
  if (!is_win) {
    cflags = [ "-Wno-deprecated-declarations" ]
    cflags_cc = [ "-Wno-overloaded-virtual" ]
  }
}

if (is_linux && rtc_use_gtk) {
  pkg_config("gtk-lib") {
    packages = [
      "gobject-2.0",
      "gthread-2.0",
      "gtk+-2.0",
    ]
  }
}

rtc_static_library("rtc_media") {
  defines = []
  libs = []
  deps = []
  sources = [
    "base/adaptedvideotracksource.cc",
    "base/adaptedvideotracksource.h",
    "base/audiosource.h",
    "base/codec.cc",
    "base/codec.h",
    "base/cryptoparams.h",
    "base/device.h",
    "base/hybriddataengine.h",
    "base/mediachannel.h",
    "base/mediacommon.h",
    "base/mediaconstants.cc",
    "base/mediaconstants.h",
    "base/mediaengine.cc",
    "base/mediaengine.h",
    "base/rtpdataengine.cc",
    "base/rtpdataengine.h",
    "base/rtpdump.cc",
    "base/rtpdump.h",
    "base/rtputils.cc",
    "base/rtputils.h",
    "base/screencastid.h",
    "base/streamparams.cc",
    "base/streamparams.h",
    "base/turnutils.cc",
    "base/turnutils.h",
    "base/videoadapter.cc",
    "base/videoadapter.h",
    "base/videobroadcaster.cc",
    "base/videobroadcaster.h",
    "base/videocapturer.cc",
    "base/videocapturer.h",
    "base/videocapturerfactory.h",
    "base/videocommon.cc",
    "base/videocommon.h",
    "base/videoframe.cc",
    "base/videoframe.h",
    "base/videosourcebase.cc",
    "base/videosourcebase.h",
    "devices/videorendererfactory.h",
    "engine/nullwebrtcvideoengine.h",
    "engine/payload_type_mapper.cc",
    "engine/payload_type_mapper.h",
    "engine/simulcast.cc",
    "engine/simulcast.h",
    "engine/webrtccommon.h",
    "engine/webrtcmediaengine.cc",
    "engine/webrtcmediaengine.h",
    "engine/webrtcvideocapturer.cc",
    "engine/webrtcvideocapturer.h",
    "engine/webrtcvideocapturerfactory.cc",
    "engine/webrtcvideocapturerfactory.h",
    "engine/webrtcvideodecoderfactory.h",
    "engine/webrtcvideoencoderfactory.h",
    "engine/webrtcvideoengine2.cc",
    "engine/webrtcvideoengine2.h",
    "engine/webrtcvideoframe.cc",
    "engine/webrtcvideoframe.h",
    "engine/webrtcvoe.h",
    "engine/webrtcvoiceengine.cc",
    "engine/webrtcvoiceengine.h",
    "sctp/sctpdataengine.cc",
    "sctp/sctpdataengine.h",
  ]

  configs += [ ":rtc_media_warnings_config" ]

  if (is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  if (is_win) {
    cflags = [
      "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
      "/wd4267",  # conversion from "size_t" to "int", possible loss of data.
      "/wd4389",  # signed/unsigned mismatch.
    ]
  }

  if (rtc_enable_intelligibility_enhancer) {
    defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
  } else {
    defines += [ "WEBRTC_INTELLIGIBILITY_ENHANCER=0" ]
  }

  include_dirs = []
  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 (rtc_build_usrsctp) {
    include_dirs += [
      # TODO(jiayl): move this into the public_configs of
      # //third_party/usrsctp/BUILD.gn.
      "//third_party/usrsctp/usrsctplib",
    ]
    deps += [ "//third_party/usrsctp" ]
  }

  public_configs = []
  if (build_with_chromium) {
    deps += [ "../modules/video_capture:video_capture" ]
  } else {
    public_configs += [ ":rtc_media_defines_config" ]
    deps += [ "../modules/video_capture:video_capture_internal_impl" ]
  }
  if (is_linux && rtc_use_gtk) {
    sources += [
      "devices/gtkvideorenderer.cc",
      "devices/gtkvideorenderer.h",
    ]
    public_configs += [ ":gtk-lib" ]
  }
  if (is_win) {
    sources += [
      "devices/gdivideorenderer.cc",
      "devices/gdivideorenderer.h",
    ]
    libs += [
      "d3d9.lib",
      "gdi32.lib",
      "strmiids.lib",
    ]
  }
  deps += [
    "..:webrtc_common",
    "../api:call_api",
    "../base:rtc_base_approved",
    "../call",
    "../libjingle/xmllite",
    "../libjingle/xmpp",
    "../modules/video_coding",
    "../p2p",
    "../system_wrappers",
    "../video",
    "../voice_engine",
  ]
}

if (rtc_include_tests) {
  config("rtc_unittest_main_config") {
    # GN orders flags on a target before flags from configs. The default config
    # adds -Wall, and this flag have to be after -Wall -- so they need to
    # come from a config and can"t be on the target directly.
    if (is_clang && is_ios) {
      cflags = [ "-Wno-unused-variable" ]
    }
  }

  rtc_source_set("rtc_unittest_main") {
    testonly = true

    include_dirs = []
    public_deps = []
    deps = []
    sources = [
      "base/fakemediaengine.h",
      "base/fakenetworkinterface.h",
      "base/fakertp.h",
      "base/fakevideocapturer.h",
      "base/fakevideorenderer.h",
      "base/test/mock_mediachannel.h",
      "base/testutils.cc",
      "base/testutils.h",
      "engine/fakewebrtccall.cc",
      "engine/fakewebrtccall.h",
      "engine/fakewebrtcdeviceinfo.h",
      "engine/fakewebrtcvcmfactory.h",
      "engine/fakewebrtcvideocapturemodule.h",
      "engine/fakewebrtcvideoengine.h",
      "engine/fakewebrtcvoiceengine.h",
    ]

    configs += [ ":rtc_unittest_main_config" ]

    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_clang) {
      # Suppress warnings from the Chromium Clang plugin.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps += [
      "../base:rtc_base_tests_utils",
      "//testing/gtest",
    ]
    public_deps += [ "//testing/gmock" ]
  }

  config("rtc_media_unittests_config") {
    # GN orders flags on a target before flags from configs. The default config
    # adds -Wall, and this flag have to be after -Wall -- so they need to
    # come from a config and can"t be on the target directly.
    # TODO(kjellander): Make the code compile without disabling these flags.
    # See https://bugs.webrtc.org/3307.
    if (is_clang && is_win) {
      cflags = [
        # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6266
        # for -Wno-sign-compare
        "-Wno-sign-compare",
        "-Wno-unused-function",
      ]
    }
    if (!is_win) {
      cflags = [ "-Wno-sign-compare" ]
      cflags_cc = [ "-Wno-overloaded-virtual" ]
    }
  }

  rtc_media_unittests_resources = [
    "//resources/media/captured-320x240-2s-48.frames",
    "//resources/media/faces.1280x720_P420.yuv",
    "//resources/media/faces_I420.jpg",
    "//resources/media/faces_I422.jpg",
    "//resources/media/faces_I444.jpg",
    "//resources/media/faces_I411.jpg",
    "//resources/media/faces_I400.jpg",
  ]

  if (is_ios) {
    bundle_data("rtc_media_unittests_bundle_data") {
      testonly = true
      sources = rtc_media_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("rtc_media_unittests") {
    testonly = true

    defines = []
    deps = []
    sources = [
      "base/codec_unittest.cc",
      "base/rtpdataengine_unittest.cc",
      "base/rtpdump_unittest.cc",
      "base/rtputils_unittest.cc",
      "base/streamparams_unittest.cc",
      "base/turnutils_unittest.cc",
      "base/videoadapter_unittest.cc",
      "base/videobroadcaster_unittest.cc",
      "base/videocapturer_unittest.cc",
      "base/videocommon_unittest.cc",
      "base/videoengine_unittest.h",
      "base/videoframe_unittest.h",
      "engine/nullwebrtcvideoengine_unittest.cc",
      "engine/payload_type_mapper_unittest.cc",
      "engine/simulcast_unittest.cc",
      "engine/webrtcmediaengine_unittest.cc",
      "engine/webrtcvideocapturer_unittest.cc",
      "engine/webrtcvideoengine2_unittest.cc",
      "engine/webrtcvideoframe_unittest.cc",
      "engine/webrtcvoiceengine_unittest.cc",
      "sctp/sctpdataengine_unittest.cc",
    ]

    configs += [ ":rtc_media_unittests_config" ]

    if (rtc_use_h264) {
      defines += [ "WEBRTC_USE_H264" ]
    }
    if (is_win) {
      cflags = [
        "/wd4245",  # conversion from int to size_t, signed/unsigned mismatch.
        "/wd4373",  # virtual function override.
        "/wd4389",  # signed/unsigned mismatch.
      ]
    }

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [
        "//build/config/clang:extra_warnings",
        "//build/config/clang:find_bad_constructs",
      ]
    }

    data = rtc_media_unittests_resources

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

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

    deps += [
      # TODO(kjellander): Move as part of work in bugs.webrtc.org/4243.
      ":rtc_media",
      ":rtc_unittest_main",
      "../audio",
      "../base:rtc_base_tests_utils",
      "../system_wrappers:metrics_default",
    ]
  }
}
