# 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("//third_party/libaom/options.gni")
import("../webrtc.gni")

group("media") {
  deps = []
  if (!build_with_mozilla) {
    deps += [
      ":rtc_media",
      ":rtc_media_base",
    ]
  }
}

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

rtc_source_set("rtc_media_config") {
  visibility = [ "*" ]
  sources = [ "base/media_config.h" ]
}

rtc_library("rtc_sdp_video_format_utils") {
  visibility = [ "*" ]
  sources = [
    "base/sdp_video_format_utils.cc",
    "base/sdp_video_format_utils.h",
  ]

  deps = [
    "../api/video_codecs:video_codecs_api",
    "../rtc_base:checks",
    "../rtc_base:stringutils",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("rtc_media_base") {
  visibility = [ "*" ]
  defines = []
  libs = []
  deps = [
    ":rtc_media_config",
    "../api:array_view",
    "../api:audio_options_api",
    "../api:field_trials_view",
    "../api:frame_transformer_interface",
    "../api:media_stream_interface",
    "../api:rtc_error",
    "../api:rtp_parameters",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "../api/audio:audio_frame_processor",
    "../api/audio_codecs:audio_codecs_api",
    "../api/crypto:frame_decryptor_interface",
    "../api/crypto:frame_encryptor_interface",
    "../api/crypto:options",
    "../api/task_queue:pending_task_safety_flag",
    "../api/transport:datagram_transport_interface",
    "../api/transport:stun_types",
    "../api/transport/rtp:rtp_source",
    "../api/units:time_delta",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_bitrate_allocator_factory",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:video_codecs_api",
    "../call:call_interfaces",
    "../call:video_stream_api",
    "../common_video",
    "../modules/async_audio_processing",
    "../modules/audio_processing:audio_processing_statistics",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base",
    "../rtc_base:buffer",
    "../rtc_base:byte_order",
    "../rtc_base:checks",
    "../rtc_base:copy_on_write_buffer",
    "../rtc_base:logging",
    "../rtc_base:macromagic",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:sanitizer",
    "../rtc_base:socket",
    "../rtc_base:stringutils",
    "../rtc_base:timeutils",
    "../rtc_base/synchronization:mutex",
    "../rtc_base/system:file_wrapper",
    "../rtc_base/system:no_unique_address",
    "../rtc_base/system:rtc_export",
    "../rtc_base/third_party/sigslot",
    "../system_wrappers:field_trial",
    "../video/config:encoder_config",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/container:inlined_vector",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  sources = [
    "base/adapted_video_track_source.cc",
    "base/adapted_video_track_source.h",
    "base/audio_source.h",
    "base/codec.cc",
    "base/codec.h",
    "base/delayable.h",
    "base/media_channel.cc",
    "base/media_channel.h",
    "base/media_constants.cc",
    "base/media_constants.h",
    "base/media_engine.cc",
    "base/media_engine.h",
    "base/rid_description.cc",
    "base/rid_description.h",
    "base/rtp_utils.cc",
    "base/rtp_utils.h",
    "base/stream_params.cc",
    "base/stream_params.h",
    "base/turn_utils.cc",
    "base/turn_utils.h",
    "base/video_adapter.cc",
    "base/video_adapter.h",
    "base/video_broadcaster.cc",
    "base/video_broadcaster.h",
    "base/video_common.cc",
    "base/video_common.h",
    "base/video_source_base.cc",
    "base/video_source_base.h",
  ]
}

rtc_library("rtc_simulcast_encoder_adapter") {
  visibility = [ "*" ]
  defines = []
  libs = []
  sources = [
    "engine/simulcast_encoder_adapter.cc",
    "engine/simulcast_encoder_adapter.h",
  ]
  deps = [
    ":rtc_media_base",
    "../api:fec_controller_api",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "../api/video:video_codec_constants",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:rtc_software_fallback_wrappers",
    "../api/video_codecs:video_codecs_api",
    "../call:video_stream_api",
    "../common_video",
    "../modules/video_coding:video_codec_interface",
    "../modules/video_coding:video_coding_utility",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "../rtc_base/experiments:encoder_info_settings",
    "../rtc_base/experiments:rate_control_settings",
    "../rtc_base/system:no_unique_address",
    "../rtc_base/system:rtc_export",
    "../system_wrappers",
    "../system_wrappers:field_trial",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtc_encoder_simulcast_proxy") {
  visibility = [ "*" ]
  defines = []
  libs = []
  sources = [
    "engine/encoder_simulcast_proxy.cc",
    "engine/encoder_simulcast_proxy.h",
  ]
  deps = [
    ":rtc_simulcast_encoder_adapter",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:video_codecs_api",
    "../modules/video_coding:video_codec_interface",
    "../rtc_base/system:rtc_export",
  ]
}

rtc_library("rtc_internal_video_codecs") {
  visibility = [ "*" ]
  allow_poison = [ "software_video_codecs" ]
  defines = []
  libs = []
  deps = [
    ":rtc_encoder_simulcast_proxy",
    ":rtc_media_base",
    ":rtc_simulcast_encoder_adapter",
    "../api/video:encoded_image",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:rtc_software_fallback_wrappers",
    "../api/video_codecs:video_codecs_api",
    "../api/video_codecs:video_encoder_factory_template",
    "../api/video_codecs:video_encoder_factory_template_libvpx_vp8_adapter",
    "../api/video_codecs:video_encoder_factory_template_libvpx_vp9_adapter",
    "../api/video_codecs:video_encoder_factory_template_open_h264_adapter",
    "../call:call_interfaces",
    "../call:video_stream_api",
    "../modules/video_coding:video_codec_interface",
    "../modules/video_coding:webrtc_h264",
    "../modules/video_coding:webrtc_multiplex",
    "../modules/video_coding:webrtc_vp8",
    "../modules/video_coding:webrtc_vp9",
    "../rtc_base:checks",
    "../rtc_base:logging",
    "../rtc_base/system:rtc_export",
    "../system_wrappers:field_trial",
    "../test:fake_video_codecs",
  ]

  if (enable_libaom) {
    defines += [ "RTC_USE_LIBAOM_AV1_ENCODER" ]
    deps += [
      "../api/video_codecs:video_encoder_factory_template_libaom_av1_adapter",
    ]
  }

  if (rtc_include_dav1d_in_internal_decoder_factory) {
    deps += [ "../modules/video_coding/codecs/av1:dav1d_decoder" ]
  }
  absl_deps = [
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  sources = [
    "engine/fake_video_codec_factory.cc",
    "engine/fake_video_codec_factory.h",
    "engine/internal_decoder_factory.cc",
    "engine/internal_decoder_factory.h",
    "engine/internal_encoder_factory.cc",
    "engine/internal_encoder_factory.h",
    "engine/multiplex_codec_factory.cc",
    "engine/multiplex_codec_factory.h",

    # TODO(bugs.webrtc.org/7925): stop exporting this header once downstream
    # targets depend on :rtc_encoder_simulcast_proxy directly.
    "engine/encoder_simulcast_proxy.h",
  ]
}

rtc_library("rtc_audio_video") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
  defines = []
  libs = []
  deps = [
    ":rtc_media_base",
    "../api:array_view",
    "../api:call_api",
    "../api:field_trials_view",
    "../api:libjingle_peerconnection_api",
    "../api:media_stream_interface",
    "../api:rtp_parameters",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "../api:transport_api",
    "../api/audio:audio_frame_processor",
    "../api/audio:audio_mixer_api",
    "../api/audio_codecs:audio_codecs_api",
    "../api/task_queue",
    "../api/task_queue:pending_task_safety_flag",
    "../api/transport:bitrate_settings",
    "../api/transport:field_trial_based_config",
    "../api/transport/rtp:rtp_source",
    "../api/units:data_rate",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_bitrate_allocator_factory",
    "../api/video:video_codec_constants",
    "../api/video:video_frame",
    "../api/video:video_rtp_headers",
    "../api/video_codecs:rtc_software_fallback_wrappers",
    "../api/video_codecs:video_codecs_api",
    "../call",
    "../call:call_interfaces",
    "../call:video_stream_api",
    "../common_video",
    "../modules/async_audio_processing:async_audio_processing",
    "../modules/audio_device",
    "../modules/audio_device:audio_device_impl",
    "../modules/audio_mixer:audio_mixer_impl",
    "../modules/audio_processing:api",
    "../modules/audio_processing/aec_dump",
    "../modules/audio_processing/agc:gain_control_interface",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../modules/video_coding",
    "../modules/video_coding:video_codec_interface",
    "../modules/video_coding:video_coding_utility",
    "../modules/video_coding:webrtc_vp9_helpers",
    "../modules/video_coding/svc:scalability_mode_util",
    "../rtc_base",
    "../rtc_base:audio_format_to_string",
    "../rtc_base:buffer",
    "../rtc_base:byte_order",
    "../rtc_base:checks",
    "../rtc_base:copy_on_write_buffer",
    "../rtc_base:event_tracer",
    "../rtc_base:ignore_wundef",
    "../rtc_base:logging",
    "../rtc_base:macromagic",
    "../rtc_base:race_checker",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:safe_conversions",
    "../rtc_base:stringutils",
    "../rtc_base:threading",
    "../rtc_base:timeutils",
    "../rtc_base/experiments:field_trial_parser",
    "../rtc_base/experiments:min_video_bitrate_experiment",
    "../rtc_base/experiments:normalize_simulcast_size_experiment",
    "../rtc_base/experiments:rate_control_settings",
    "../rtc_base/synchronization:mutex",
    "../rtc_base/system:no_unique_address",
    "../rtc_base/system:rtc_export",
    "../rtc_base/third_party/base64",
    "../system_wrappers",
    "../system_wrappers:metrics",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  sources = [
    "engine/adm_helpers.cc",
    "engine/adm_helpers.h",
    "engine/null_webrtc_video_engine.h",
    "engine/payload_type_mapper.cc",
    "engine/payload_type_mapper.h",
    "engine/unhandled_packets_buffer.cc",
    "engine/unhandled_packets_buffer.h",
    "engine/webrtc_media_engine.cc",
    "engine/webrtc_media_engine.h",
    "engine/webrtc_video_engine.cc",
    "engine/webrtc_video_engine.h",
    "engine/webrtc_voice_engine.cc",
    "engine/webrtc_voice_engine.h",
  ]

  public_configs = []
  if (!build_with_chromium) {
    public_configs += [ ":rtc_media_defines_config" ]
    deps += [ "../modules/video_capture:video_capture_internal_impl" ]
  }
  if (rtc_enable_protobuf) {
    deps += [
      "../modules/audio_coding:ana_config_proto",
      "../modules/audio_processing/aec_dump:aec_dump_impl",
    ]
  } else {
    deps += [ "../modules/audio_processing/aec_dump:null_aec_dump_factory" ]
  }
}

# Heavy but optional helper for unittests and webrtc users who prefer to use
# defaults factories or do not worry about extra dependencies and binary size.
rtc_library("rtc_media_engine_defaults") {
  visibility = [ "*" ]
  allow_poison = [
    "audio_codecs",
    "default_task_queue",
    "software_video_codecs",
  ]
  sources = [
    "engine/webrtc_media_engine_defaults.cc",
    "engine/webrtc_media_engine_defaults.h",
  ]
  deps = [
    ":rtc_audio_video",
    "../api/audio_codecs:builtin_audio_decoder_factory",
    "../api/audio_codecs:builtin_audio_encoder_factory",
    "../api/task_queue:default_task_queue_factory",
    "../api/video:builtin_video_bitrate_allocator_factory",
    "../api/video_codecs:builtin_video_decoder_factory",
    "../api/video_codecs:builtin_video_encoder_factory",
    "../modules/audio_processing:api",
    "../rtc_base:checks",
    "../rtc_base/system:rtc_export",
  ]
}

rtc_source_set("rtc_data_sctp_transport_internal") {
  sources = [ "sctp/sctp_transport_internal.h" ]
  deps = [
    "../api/transport:datagram_transport_interface",
    "../media:rtc_media_base",
    "../p2p:rtc_p2p",
    "../rtc_base:copy_on_write_buffer",
    "../rtc_base:threading",
  ]
}

if (rtc_build_dcsctp) {
  rtc_library("rtc_data_dcsctp_transport") {
    sources = [
      "sctp/dcsctp_transport.cc",
      "sctp/dcsctp_transport.h",
    ]
    deps = [
      ":rtc_data_sctp_transport_internal",
      "../api:array_view",
      "../api/task_queue:pending_task_safety_flag",
      "../api/task_queue:task_queue",
      "../media:rtc_media_base",
      "../net/dcsctp/public:factory",
      "../net/dcsctp/public:socket",
      "../net/dcsctp/public:types",
      "../net/dcsctp/public:utils",
      "../net/dcsctp/timer:task_queue_timeout",
      "../p2p:rtc_p2p",
      "../rtc_base:checks",
      "../rtc_base:copy_on_write_buffer",
      "../rtc_base:event_tracer",
      "../rtc_base:logging",
      "../rtc_base:macromagic",
      "../rtc_base:random",
      "../rtc_base:socket",
      "../rtc_base:stringutils",
      "../rtc_base:threading",
      "../rtc_base/containers:flat_map",
      "../rtc_base/third_party/sigslot:sigslot",
      "../system_wrappers",
    ]
    absl_deps += [
      "//third_party/abseil-cpp/absl/strings:strings",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}

rtc_library("rtc_data_sctp_transport_factory") {
  defines = []
  sources = [
    "sctp/sctp_transport_factory.cc",
    "sctp/sctp_transport_factory.h",
  ]
  deps = [
    ":rtc_data_sctp_transport_internal",
    "../api/transport:sctp_transport_factory_interface",
    "../rtc_base:threading",
    "../rtc_base/system:unused",
  ]

  if (rtc_enable_sctp) {
    assert(rtc_build_dcsctp, "An SCTP backend is required to enable SCTP")
  }

  if (rtc_build_dcsctp) {
    defines += [ "WEBRTC_HAVE_DCSCTP" ]
    deps += [
      ":rtc_data_dcsctp_transport",
      "../system_wrappers",
      "../system_wrappers:field_trial",
    ]
  }
}

rtc_source_set("rtc_media") {
  visibility = [ "*" ]
  allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
  deps = [ ":rtc_audio_video" ]
}

if (rtc_include_tests) {
  rtc_library("rtc_media_tests_utils") {
    testonly = true

    defines = []
    deps = [
      ":rtc_audio_video",
      ":rtc_internal_video_codecs",
      ":rtc_media",
      ":rtc_media_base",
      ":rtc_simulcast_encoder_adapter",
      "../api:call_api",
      "../api:fec_controller_api",
      "../api:scoped_refptr",
      "../api/task_queue",
      "../api/task_queue:pending_task_safety_flag",
      "../api/transport:field_trial_based_config",
      "../api/video:encoded_image",
      "../api/video:video_bitrate_allocation",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../api/video_codecs:video_codecs_api",
      "../call:call_interfaces",
      "../call:mock_rtp_interfaces",
      "../call:video_stream_api",
      "../common_video",
      "../modules/audio_processing",
      "../modules/audio_processing:api",
      "../modules/rtp_rtcp:rtp_rtcp_format",
      "../modules/video_coding:video_codec_interface",
      "../modules/video_coding:video_coding_utility",
      "../p2p:rtc_p2p",
      "../rtc_base",
      "../rtc_base:buffer",
      "../rtc_base:byte_order",
      "../rtc_base:checks",
      "../rtc_base:copy_on_write_buffer",
      "../rtc_base:gunit_helpers",
      "../rtc_base:macromagic",
      "../rtc_base:rtc_event",
      "../rtc_base:rtc_task_queue",
      "../rtc_base:stringutils",
      "../rtc_base:threading",
      "../rtc_base:timeutils",
      "../rtc_base/synchronization:mutex",
      "../rtc_base/third_party/sigslot",
      "../test:scoped_key_value_config",
      "../test:test_support",
      "../video/config:streams_config",
      "//testing/gtest",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/algorithm:container",
      "//third_party/abseil-cpp/absl/strings",
    ]
    sources = [
      "base/fake_frame_source.cc",
      "base/fake_frame_source.h",
      "base/fake_media_engine.cc",
      "base/fake_media_engine.h",
      "base/fake_network_interface.h",
      "base/fake_rtp.cc",
      "base/fake_rtp.h",
      "base/fake_video_renderer.cc",
      "base/fake_video_renderer.h",
      "base/test_utils.cc",
      "base/test_utils.h",
      "engine/fake_webrtc_call.cc",
      "engine/fake_webrtc_call.h",
      "engine/fake_webrtc_video_engine.cc",
      "engine/fake_webrtc_video_engine.h",
    ]
  }

  if (!build_with_chromium) {
    rtc_media_unittests_resources = [
      "../resources/media/captured-320x240-2s-48.frames",
      "../resources/media/faces.1280x720_P420.yuv",
      "../resources/media/faces_I400.jpg",
      "../resources/media/faces_I411.jpg",
      "../resources/media/faces_I420.jpg",
      "../resources/media/faces_I422.jpg",
      "../resources/media/faces_I444.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 = [
        ":rtc_audio_video",
        ":rtc_encoder_simulcast_proxy",
        ":rtc_internal_video_codecs",
        ":rtc_media",
        ":rtc_media_base",
        ":rtc_media_engine_defaults",
        ":rtc_media_tests_utils",
        ":rtc_sdp_video_format_utils",
        ":rtc_simulcast_encoder_adapter",
        "../api:create_simulcast_test_fixture_api",
        "../api:libjingle_peerconnection_api",
        "../api:mock_encoder_selector",
        "../api:mock_video_bitrate_allocator",
        "../api:mock_video_bitrate_allocator_factory",
        "../api:mock_video_codec_factory",
        "../api:mock_video_encoder",
        "../api:rtp_parameters",
        "../api:scoped_refptr",
        "../api:simulcast_test_fixture_api",
        "../api/audio_codecs:builtin_audio_decoder_factory",
        "../api/audio_codecs:builtin_audio_encoder_factory",
        "../api/rtc_event_log",
        "../api/task_queue",
        "../api/task_queue:default_task_queue_factory",
        "../api/test/video:function_video_factory",
        "../api/transport:field_trial_based_config",
        "../api/units:time_delta",
        "../api/units:timestamp",
        "../api/video:builtin_video_bitrate_allocator_factory",
        "../api/video:resolution",
        "../api/video:video_bitrate_allocation",
        "../api/video:video_codec_constants",
        "../api/video:video_frame",
        "../api/video:video_rtp_headers",
        "../api/video_codecs:builtin_video_decoder_factory",
        "../api/video_codecs:builtin_video_encoder_factory",
        "../api/video_codecs:video_codecs_api",
        "../audio",
        "../call:call_interfaces",
        "../common_video",
        "../modules/audio_device:mock_audio_device",
        "../modules/audio_processing",
        "../modules/audio_processing:api",
        "../modules/audio_processing:mocks",
        "../modules/rtp_rtcp",
        "../modules/rtp_rtcp:rtp_rtcp_format",
        "../modules/video_coding:simulcast_test_fixture_impl",
        "../modules/video_coding:video_codec_interface",
        "../modules/video_coding:webrtc_h264",
        "../modules/video_coding:webrtc_vp8",
        "../p2p:p2p_test_utils",
        "../rtc_base",
        "../rtc_base:byte_order",
        "../rtc_base:checks",
        "../rtc_base:gunit_helpers",
        "../rtc_base:logging",
        "../rtc_base:macromagic",
        "../rtc_base:rtc_base_tests_utils",
        "../rtc_base:rtc_event",
        "../rtc_base:rtc_task_queue",
        "../rtc_base:safe_conversions",
        "../rtc_base:stringutils",
        "../rtc_base:threading",
        "../rtc_base:timeutils",
        "../rtc_base/experiments:min_video_bitrate_experiment",
        "../rtc_base/synchronization:mutex",
        "../rtc_base/third_party/sigslot",
        "../system_wrappers:field_trial",
        "../test:audio_codec_mocks",
        "../test:fake_video_codecs",
        "../test:field_trial",
        "../test:rtp_test_utils",
        "../test:scoped_key_value_config",
        "../test:test_main",
        "../test:test_support",
        "../test:video_test_common",
        "../test/time_controller",
        "../video/config:streams_config",
      ]

      if (enable_libaom) {
        defines += [ "RTC_USE_LIBAOM_AV1_ENCODER" ]
      }

      absl_deps = [
        "//third_party/abseil-cpp/absl/algorithm:container",
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/strings",
        "//third_party/abseil-cpp/absl/types:optional",
      ]
      sources = [
        "base/codec_unittest.cc",
        "base/media_engine_unittest.cc",
        "base/rtp_utils_unittest.cc",
        "base/sdp_video_format_utils_unittest.cc",
        "base/stream_params_unittest.cc",
        "base/turn_utils_unittest.cc",
        "base/video_adapter_unittest.cc",
        "base/video_broadcaster_unittest.cc",
        "base/video_common_unittest.cc",
        "engine/encoder_simulcast_proxy_unittest.cc",
        "engine/internal_decoder_factory_unittest.cc",
        "engine/internal_encoder_factory_unittest.cc",
        "engine/multiplex_codec_factory_unittest.cc",
        "engine/null_webrtc_video_engine_unittest.cc",
        "engine/payload_type_mapper_unittest.cc",
        "engine/simulcast_encoder_adapter_unittest.cc",
        "engine/unhandled_packets_buffer_unittest.cc",
        "engine/webrtc_media_engine_unittest.cc",
        "engine/webrtc_video_engine_unittest.cc",
      ]

      # TODO(kthelgason): Reenable this test on iOS.
      # See bugs.webrtc.org/5569
      if (!is_ios) {
        sources += [ "engine/webrtc_voice_engine_unittest.cc" ]
      }

      if (rtc_opus_support_120ms_ptime) {
        defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=1" ]
      } else {
        defines += [ "WEBRTC_OPUS_SUPPORT_120MS_PTIME=0" ]
      }

      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" ]
      }

      if (rtc_build_dcsctp) {
        sources += [ "sctp/dcsctp_transport_unittest.cc" ]
        deps += [
          ":rtc_data_dcsctp_transport",
          "../net/dcsctp/public:factory",
          "../net/dcsctp/public:mocks",
          "../net/dcsctp/public:socket",
        ]
      }
    }
  }
}
