# Copyright 2014 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.

import("//build/config/android/config.gni")
import("//build/config/arm.gni")
import("//build/config/ui.gni")
import("//build/config/linux/pkg_config.gni")
import("//media/media_options.gni")

# Common configuration for targets in the media directory.
# NOT for exporting.
config("media_config") {
  defines = [ "MEDIA_IMPLEMENTATION" ]
  if (cpu_arch == "arm" && arm_use_neon) {
    defines += [ "USE_NEON" ]
  }
  if (use_pulseaudio) {
    defines += [ "USE_PULSEAUDIO" ]
    if (!linux_link_pulseaudio) {
      defines += [ "DLOPEN_PULSEAUDIO" ]
    }
  }
  if (use_cras) {
    defines += [ "USE_CRAS" ]
  }
  if (enable_mpeg2ts_stream_parser) {
    defines += [ "ENABLE_MPEG2TS_STREAM_PARSER" ]
  }
}

config("media_dependent_config") {
  if (!media_use_libvpx) {
    defines = [ "MEDIA_DISABLE_LIBVPX" ]
  }
  if (is_win) {
    ldflags = [
      "/DELAYLOAD:mf.dll",
      "/DELAYLOAD:mfplat.dll",
      "/DELAYLOAD:mfreadwrite.dll",
    ]
  }
}

if (use_ozone) {
  action("generate_ozone_constructor_list") {
    # Ozone platform objects are auto-generated using similar
    # patterns for naming and classes constructors. Here we build the
    # object MediaOzonePlatform.
    script = "../ui/ozone/generate_constructor_list.py"

    platform_list_txt_file = "$target_gen_dir/ui/ozone/platform_list.txt"
    constructor_list_cc_file = "$target_gen_dir/media/ozone/constructor_list.cc"

    sources = [ platform_list_txt_file ]
    outputs = [ constructor_list_cc_file ]
    args = [
      "--platform_list=$platform_list_txt_file",
      "--output_cc=$constructor_list_cc_file",
      "--namespace=media",
      "--typename=MediaOzonePlatform",
      "--include=\"media/ozone/media_ozone_platform.h\""
    ]
  }
}

component("media") {
  sources = [
    "cdm/aes_decryptor.cc",
    "cdm/aes_decryptor.h",
    "cdm/json_web_key.cc",
    "cdm/json_web_key.h",
    "cdm/key_system_names.cc",
    "cdm/key_system_names.h",
    "cdm/player_tracker_impl.cc",
    "cdm/player_tracker_impl.h",
    "ffmpeg/ffmpeg_deleters.h",
    "filters/audio_clock.cc",
    "filters/audio_clock.h",
    "filters/audio_renderer_algorithm.cc",
    "filters/audio_renderer_algorithm.h",
    "filters/audio_renderer_impl.cc",
    "filters/audio_renderer_impl.h",
    "filters/chunk_demuxer.cc",
    "filters/chunk_demuxer.h",
    "filters/decoder_selector.cc",
    "filters/decoder_selector.h",
    "filters/decoder_stream.cc",
    "filters/decoder_stream.h",
    "filters/decoder_stream_traits.cc",
    "filters/decoder_stream_traits.h",
    "filters/decrypting_audio_decoder.cc",
    "filters/decrypting_audio_decoder.h",
    "filters/decrypting_demuxer_stream.cc",
    "filters/decrypting_demuxer_stream.h",
    "filters/decrypting_video_decoder.cc",
    "filters/decrypting_video_decoder.h",
    "filters/file_data_source.cc",
    "filters/file_data_source.h",
    "filters/frame_processor.cc",
    "filters/frame_processor.h",
    "filters/gpu_video_accelerator_factories.cc",
    "filters/gpu_video_accelerator_factories.h",
    "filters/gpu_video_decoder.cc",
    "filters/gpu_video_decoder.h",
    "filters/h264_bit_reader.cc",
    "filters/h264_bit_reader.h",
    "filters/h264_parser.cc",
    "filters/h264_parser.h",
    "filters/skcanvas_video_renderer.cc",
    "filters/skcanvas_video_renderer.h",
    "filters/source_buffer_platform.cc",
    "filters/source_buffer_platform.h",
    "filters/source_buffer_stream.cc",
    "filters/source_buffer_stream.h",
    "filters/stream_parser_factory.cc",
    "filters/stream_parser_factory.h",
    "filters/video_frame_scheduler.h",
    "filters/video_frame_scheduler_impl.cc",
    "filters/video_frame_scheduler_impl.h",
    "filters/video_frame_scheduler_proxy.cc",
    "filters/video_frame_scheduler_proxy.h",
    "filters/video_renderer_impl.cc",
    "filters/video_renderer_impl.h",
    "filters/webvtt_util.h",
    "filters/wsola_internals.cc",
    "filters/wsola_internals.h",
    "midi/midi_manager.cc",
    "midi/midi_manager.h",
    "midi/midi_manager_mac.cc",
    "midi/midi_manager_mac.h",
    "midi/midi_manager_usb.cc",
    "midi/midi_manager_usb.h",
    "midi/midi_manager_win.cc",
    "midi/midi_manager_win.h",
    "midi/midi_message_queue.cc",
    "midi/midi_message_queue.h",
    "midi/midi_message_util.cc",
    "midi/midi_message_util.h",
    "midi/midi_port_info.cc",
    "midi/midi_port_info.h",
    "midi/usb_midi_descriptor_parser.cc",
    "midi/usb_midi_descriptor_parser.h",
    "midi/usb_midi_device.h",
    "midi/usb_midi_input_stream.cc",
    "midi/usb_midi_input_stream.h",
    "midi/usb_midi_jack.h",
    "midi/usb_midi_output_stream.cc",
    "midi/usb_midi_output_stream.h",
    "video/capture/fake_video_capture_device.cc",
    "video/capture/fake_video_capture_device.h",
    "video/capture/fake_video_capture_device_factory.h",
    "video/capture/fake_video_capture_device_factory.cc",
    "video/capture/file_video_capture_device.cc",
    "video/capture/file_video_capture_device.h",
    "video/capture/file_video_capture_device_factory.h",
    "video/capture/file_video_capture_device_factory.cc",
    "video/capture/linux/video_capture_device_factory_linux.cc",
    "video/capture/linux/video_capture_device_factory_linux.h",
    "video/capture/linux/video_capture_device_linux.cc",
    "video/capture/linux/video_capture_device_linux.h",
    "video/capture/linux/video_capture_device_chromeos.cc",
    "video/capture/linux/video_capture_device_chromeos.h",
    "video/capture/mac/avfoundation_glue.h",
    "video/capture/mac/avfoundation_glue.mm",
    "video/capture/mac/coremedia_glue.h",
    "video/capture/mac/coremedia_glue.mm",
    "video/capture/mac/platform_video_capturing_mac.h",
    "video/capture/mac/video_capture_device_avfoundation_mac.h",
    "video/capture/mac/video_capture_device_avfoundation_mac.mm",
    "video/capture/mac/video_capture_device_factory_mac.h",
    "video/capture/mac/video_capture_device_factory_mac.mm",
    "video/capture/mac/video_capture_device_mac.h",
    "video/capture/mac/video_capture_device_mac.mm",
    "video/capture/mac/video_capture_device_qtkit_mac.h",
    "video/capture/mac/video_capture_device_qtkit_mac.mm",
    "video/capture/video_capture_device.cc",
    "video/capture/video_capture_device.h",
    "video/capture/video_capture_device_factory.cc",
    "video/capture/video_capture_device_factory.h",
    "video/capture/video_capture_types.cc",
    "video/capture/video_capture_types.h",
    "video/capture/win/capability_list_win.cc",
    "video/capture/win/capability_list_win.h",
    "video/capture/win/filter_base_win.cc",
    "video/capture/win/filter_base_win.h",
    "video/capture/win/pin_base_win.cc",
    "video/capture/win/pin_base_win.h",
    "video/capture/win/sink_filter_observer_win.h",
    "video/capture/win/sink_filter_win.cc",
    "video/capture/win/sink_filter_win.h",
    "video/capture/win/sink_input_pin_win.cc",
    "video/capture/win/sink_input_pin_win.h",
    "video/capture/win/video_capture_device_factory_win.cc",
    "video/capture/win/video_capture_device_factory_win.h",
    "video/capture/win/video_capture_device_mf_win.cc",
    "video/capture/win/video_capture_device_mf_win.h",
    "video/capture/win/video_capture_device_win.cc",
    "video/capture/win/video_capture_device_win.h",
    "video/picture.cc",
    "video/picture.h",
    "video/video_decode_accelerator.cc",
    "video/video_decode_accelerator.h",
    "video/video_encode_accelerator.cc",
    "video/video_encode_accelerator.h",
    "formats/common/offset_byte_queue.cc",
    "formats/common/offset_byte_queue.h",
    "formats/webm/webm_audio_client.cc",
    "formats/webm/webm_audio_client.h",
    "formats/webm/webm_cluster_parser.cc",
    "formats/webm/webm_cluster_parser.h",
    "formats/webm/webm_constants.cc",
    "formats/webm/webm_constants.h",
    "formats/webm/webm_content_encodings.cc",
    "formats/webm/webm_content_encodings.h",
    "formats/webm/webm_content_encodings_client.cc",
    "formats/webm/webm_content_encodings_client.h",
    "formats/webm/webm_crypto_helpers.cc",
    "formats/webm/webm_crypto_helpers.h",
    "formats/webm/webm_info_parser.cc",
    "formats/webm/webm_info_parser.h",
    "formats/webm/webm_parser.cc",
    "formats/webm/webm_parser.h",
    "formats/webm/webm_stream_parser.cc",
    "formats/webm/webm_stream_parser.h",
    "formats/webm/webm_tracks_parser.cc",
    "formats/webm/webm_tracks_parser.h",
    "formats/webm/webm_video_client.cc",
    "formats/webm/webm_video_client.h",
    "formats/webm/webm_webvtt_parser.cc",
    "formats/webm/webm_webvtt_parser.h",
  ]

  configs += [ ":media_config", ]
  all_dependent_configs = [ ":media_dependent_config" ]

  cflags = []
  libs = []
  defines = []
  deps = []

  include_dirs = [ "." ]
  if (media_use_ffmpeg) {
    deps += [ "//third_party/ffmpeg" ]
    sources += [
      "ffmpeg/ffmpeg_common.cc",
      "ffmpeg/ffmpeg_common.h",
      "filters/audio_file_reader.cc",
      "filters/audio_file_reader.h",
      "filters/blocking_url_protocol.cc",
      "filters/blocking_url_protocol.h",
      "filters/ffmpeg_audio_decoder.cc",
      "filters/ffmpeg_audio_decoder.h",
      "filters/ffmpeg_demuxer.cc",
      "filters/ffmpeg_demuxer.h",
      "filters/ffmpeg_glue.cc",
      "filters/ffmpeg_glue.h",
      "filters/ffmpeg_video_decoder.cc",
      "filters/ffmpeg_video_decoder.h",
      "filters/in_memory_url_protocol.cc",
      "filters/in_memory_url_protocol.h",
    ]
    if (proprietary_codecs) {
      sources += [
        "filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc",
        "filters/ffmpeg_h264_to_annex_b_bitstream_converter.h",
      ]
    }
  }

  if (cpu_arch == "arm" && arm_use_neon) {
    defines += [ "USE_NEON" ]
  }

  if (media_use_libvpx) {
     sources += [
       "filters/vpx_video_decoder.cc",
       "filters/vpx_video_decoder.h",
     ]
     deps += [ "//third_party/libvpx" ]
  }

  if (!is_android) {
    sources += [
      "filters/opus_audio_decoder.cc",
      "filters/opus_audio_decoder.h",
    ]
  } else {
    sources += [
      "midi/midi_manager_android.cc",
      "midi/usb_midi_device_android.cc",
      "midi/usb_midi_device_android.h",
      "midi/usb_midi_device_factory_android.cc",
      "midi/usb_midi_device_factory_android.h",
      "video/capture/android/video_capture_device_android.cc",
      "video/capture/android/video_capture_device_android.h",
      "video/capture/android/video_capture_device_factory_android.cc",
      "video/capture/android/video_capture_device_factory_android.h",
    ]
    deps += [
      "//media/base/android",
      "//media/base/android:media_jni_headers",
      "//media/base/android:video_capture_jni_headers",
    ]
    if (!is_android_webview_build) {
      deps += [ ":media_java" ]
    }
  }

  if (use_alsa) {
    libs += [ "asound" ]
    defines += [ "USE_ALSA" ]
    sources += [
      "midi/midi_manager_alsa.cc",
      "midi/midi_manager_alsa.h",
    ]
  }

  # A simple WebM encoder for animated avatars on ChromeOS.

  if (use_ozone) {
    # Used for the generated listing header (ui/ozone/platform_list.h)
    include_dirs += [ target_gen_dir ]

    sources += [
      "ozone/media_ozone_platform.cc",
      "ozone/media_ozone_platform.h",
    ] + get_target_outputs(":generate_ozone_constructor_list")

    deps += [
      ":generate_ozone_constructor_list",
      "//ui/ozone",
    ]
  }

  if (is_mac) {
    libs += [
      "CoreMIDI.framework",
      "CoreVideo.framework",
      "OpenGL.framework",
      "QTKit.framework",
    ]
  }

  if (is_win) {
    libs += [
      "mf.lib",
      "mfplat.lib",
      "mfreadwrite.lib",
      "mfuuid.lib",
    ]
    cflags += [
      "/wd4267"  # TODO(wolenetz): Fix size_t to int trunctaion in win64. See
                 # http://crbug.com/171009
    ]
  }

  if (proprietary_codecs) {
    sources += [
      "formats/mp2t/es_adapter_video.cc",
      "formats/mp2t/es_adapter_video.h",
      "formats/mp2t/es_parser.h",
      "formats/mp2t/es_parser_adts.cc",
      "formats/mp2t/es_parser_adts.h",
      "formats/mp2t/es_parser_h264.cc",
      "formats/mp2t/es_parser_h264.h",
      "formats/mp2t/mp2t_common.h",
      "formats/mp2t/mp2t_stream_parser.cc",
      "formats/mp2t/mp2t_stream_parser.h",
      "formats/mp2t/ts_packet.cc",
      "formats/mp2t/ts_packet.h",
      "formats/mp2t/ts_section.h",
      "formats/mp2t/ts_section_pat.cc",
      "formats/mp2t/ts_section_pat.h",
      "formats/mp2t/ts_section_pes.cc",
      "formats/mp2t/ts_section_pes.h",
      "formats/mp2t/ts_section_pmt.cc",
      "formats/mp2t/ts_section_pmt.h",
      "formats/mp2t/ts_section_psi.cc",
      "formats/mp2t/ts_section_psi.h",
      "formats/mp4/aac.cc",
      "formats/mp4/aac.h",
      "formats/mp4/avc.cc",
      "formats/mp4/avc.h",
      "formats/mp4/box_definitions.cc",
      "formats/mp4/box_definitions.h",
      "formats/mp4/box_reader.cc",
      "formats/mp4/box_reader.h",
      "formats/mp4/cenc.cc",
      "formats/mp4/cenc.h",
      "formats/mp4/es_descriptor.cc",
      "formats/mp4/es_descriptor.h",
      "formats/mp4/mp4_stream_parser.cc",
      "formats/mp4/mp4_stream_parser.h",
      "formats/mp4/sample_to_group_iterator.cc",
      "formats/mp4/sample_to_group_iterator.h",
      "formats/mp4/track_run_iterator.cc",
      "formats/mp4/track_run_iterator.h",
      "formats/mpeg/adts_constants.cc",
      "formats/mpeg/adts_constants.h",
      "formats/mpeg/adts_stream_parser.cc",
      "formats/mpeg/adts_stream_parser.h",
      "formats/mpeg/mp3_stream_parser.cc",
      "formats/mpeg/mp3_stream_parser.h",
      "formats/mpeg/mpeg_audio_stream_parser_base.cc",
      "formats/mpeg/mpeg_audio_stream_parser_base.h",
    ]
  }

  deps += [
    ":shared_memory_support",
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//crypto",
    "//crypto:platform",  # TODO(ajwong): This used to be provided by crypto.gyp via export_dependent_settings
    "//gpu/command_buffer/common",
    "//media/audio",
    "//media/base",
    "//skia",
    "//third_party/libyuv",
    "//third_party/opus",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]
}

test("media_unittests") {
  sources = [
    "cdm/aes_decryptor_unittest.cc",
    "cdm/json_web_key_unittest.cc",
    "filters/audio_clock_unittest.cc",
    "filters/audio_decoder_selector_unittest.cc",
    "filters/audio_renderer_algorithm_unittest.cc",
    "filters/audio_renderer_impl_unittest.cc",
    "filters/chunk_demuxer_unittest.cc",
    "filters/decrypting_audio_decoder_unittest.cc",
    "filters/decrypting_demuxer_stream_unittest.cc",
    "filters/decrypting_video_decoder_unittest.cc",
    "filters/fake_demuxer_stream.cc",
    "filters/fake_demuxer_stream.h",
    "filters/fake_demuxer_stream_unittest.cc",
    "filters/fake_video_decoder.cc",
    "filters/fake_video_decoder.h",
    "filters/fake_video_decoder_unittest.cc",
    "filters/file_data_source_unittest.cc",
    "filters/frame_processor_unittest.cc",
    "filters/h264_bit_reader_unittest.cc",
    "filters/h264_parser_unittest.cc",
    "filters/skcanvas_video_renderer_unittest.cc",
    "filters/source_buffer_stream_unittest.cc",
    "filters/video_decoder_selector_unittest.cc",
    "filters/video_frame_scheduler_impl_unittest.cc",
    "filters/video_frame_scheduler_unittest.cc",
    "filters/video_frame_stream_unittest.cc",
    "filters/video_renderer_impl_unittest.cc",
    "midi/midi_manager_unittest.cc",
    "midi/midi_manager_usb_unittest.cc",
    "midi/midi_message_queue_unittest.cc",
    "midi/midi_message_util_unittest.cc",
    "midi/usb_midi_descriptor_parser_unittest.cc",
    "midi/usb_midi_input_stream_unittest.cc",
    "midi/usb_midi_output_stream_unittest.cc",
    "video/capture/fake_video_capture_device_unittest.cc",
    "video/capture/video_capture_device_unittest.cc",
    "formats/common/offset_byte_queue_unittest.cc",
    "formats/webm/cluster_builder.cc",
    "formats/webm/cluster_builder.h",
    "formats/webm/tracks_builder.cc",
    "formats/webm/tracks_builder.h",
    "formats/webm/webm_cluster_parser_unittest.cc",
    "formats/webm/webm_content_encodings_client_unittest.cc",
    "formats/webm/webm_parser_unittest.cc",
    "formats/webm/webm_tracks_parser_unittest.cc",
    "formats/webm/webm_webvtt_parser_unittest.cc",
  ]

  if (!is_android) {
    sources += [
      "ffmpeg/ffmpeg_common_unittest.cc",
      "filters/audio_decoder_unittest.cc",
      "filters/audio_file_reader_unittest.cc",
      "filters/blocking_url_protocol_unittest.cc",
      "filters/ffmpeg_demuxer_unittest.cc",
      "filters/ffmpeg_glue_unittest.cc",
      "filters/ffmpeg_video_decoder_unittest.cc",
      "filters/in_memory_url_protocol_unittest.cc",
      "filters/pipeline_integration_test.cc",
      "filters/pipeline_integration_test_base.cc",
    ]
  } else {
# TODO(ajwong): Blocked on android.
#    deps += [
#      ":player_android",
#      "//testing/android:native_test_native_code"
#    ]
  }

  if (cpu_arch != "arm" && is_chromeos && use_x11) {
    sources += [ "filters/h264_bitstream_buffer_unittest.cc" ]
  }

  if (proprietary_codecs) {
    sources += [
      "filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc",
      "filters/h264_to_annex_b_bitstream_converter_unittest.cc",
      "formats/common/stream_parser_test_base.cc",
      "formats/common/stream_parser_test_base.h",
      "formats/mp2t/es_adapter_video_unittest.cc",
      "formats/mp2t/es_parser_adts_unittest.cc",
      "formats/mp2t/es_parser_h264_unittest.cc",
      "formats/mp2t/es_parser_test_base.cc",
      "formats/mp2t/es_parser_test_base.h",
      "formats/mp2t/mp2t_stream_parser_unittest.cc",
      "formats/mp4/aac_unittest.cc",
      "formats/mp4/avc_unittest.cc",
      "formats/mp4/box_reader_unittest.cc",
      "formats/mp4/es_descriptor_unittest.cc",
      "formats/mp4/mp4_stream_parser_unittest.cc",
      "formats/mp4/sample_to_group_iterator_unittest.cc",
      "formats/mp4/track_run_iterator_unittest.cc",
      "formats/mpeg/adts_stream_parser_unittest.cc",
      "formats/mpeg/mp3_stream_parser_unittest.cc",
    ]
  }

  if (is_win && cpu_arch == "x64") {
    cflags += [
      "/wd4267"  # TODO(wolenetz): Fix size_t to int trunctaion in win64. See
                 # http://crbug.com/171009
    ]
  }

  if (is_mac) {
    sources += [
      "video/capture/mac/video_capture_device_factory_mac_unittest.mm"
    ]
  }

#      include_dirs += [
#        # Needed by media_drm_bridge.cc.
#        target_gen_dir,
#      ],

  configs += [ ":media_config" ]

# TODO(ajwong): This was in the original gyp, but it seems silly.
#        ['os_posix==1 and OS!="mac"', {
#          'conditions': [
#            ['use_allocator!="none"', {
#              'dependencies': [
#                '../base/allocator/allocator.gyp:allocator',
#              ],
#            }],
#          ],
#        }],
  deps = [
    ":media",
    ":test_support",
    "//base/test:test_support",
    "//media/audio:unittests",
    "//media/audio:test_support",
    "//media/base:unittests",
    "//media/base:test_support",
    "//skia",  # Direct dependency required to inherit config.
    "//testing/gmock",
    "//testing/gtest",
    # TODO(dalecurtis): Port the rest of Widevine stuff.
    "//third_party/widevine/cdm:version_h",
    "//ui/gfx:test_support",
    "//url",
  ]
  if (media_use_ffmpeg) {
    deps += [
      "//third_party/ffmpeg",  # Direct dependency required to inherit config.
    ]
  }
}

test("media_perftests") {
  sources = []
  if (media_use_ffmpeg) {
    sources += [
      "filters/pipeline_integration_perftest.cc",
      "filters/pipeline_integration_test_base.cc",
    ]
  }
  configs += [ ":media_config" ]
  deps = [
    ":media",
    ":shared_memory_support",
    ":test_support",
    "//base/test:test_support",
    "//media/audio:test_support",
    "//media/base:perftests",
    "//media/base:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//testing/perf",
    "//third_party/widevine/cdm:version_h",
    "//ui/gfx:test_support",
  ]
  if (is_android) {
    deps += [ "//ui/gl" ]
  }
  if (media_use_ffmpeg) {
    deps += [
      "//third_party/ffmpeg",  # Direct dependency required to inherit config.
    ]
  }
}

source_set("test_support") {
  sources = [
    "filters/clockless_video_frame_scheduler.cc",
    "filters/clockless_video_frame_scheduler.h",
    "filters/mock_gpu_video_accelerator_factories.cc",
    "filters/mock_gpu_video_accelerator_factories.h",
    "filters/test_video_frame_scheduler.cc",
    "filters/test_video_frame_scheduler.h",
    "video/mock_video_decode_accelerator.cc",
    "video/mock_video_decode_accelerator.h",
  ]
  deps = [
    ":media",
    ":shared_memory_support",
    "//base",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

# TODO(dalecurtis): How to split this across audio/base directories??
component("shared_memory_support") {
  sources = [
    "audio/audio_parameters.cc",
    "audio/audio_parameters.h",
    "base/audio_bus.cc",
    "base/audio_bus.h",
    "base/channel_layout.cc",
    "base/channel_layout.h",
    "base/limits.h",
    "base/media_export.h",
    "base/vector_math.cc",
    "base/vector_math.h",
  ]
  configs += [ ":media_config" ]
  deps = [ "//base" ]
}

if (media_use_ffmpeg) {
  test("ffmpeg_unittests") {
    sources = [ "ffmpeg/ffmpeg_unittest.cc" ]

    deps = [
       ":media",
       ":test_support",
       "//base",
       "//base:i18n",
       "//base/test:test_support",
       "//testing/gtest",
       "//third_party/ffmpeg",
       "//ui/gfx:test_support",
    ]
  }

  test("ffmpeg_regression_tests") {
    sources = [
      "base/run_all_unittests.cc",
      "ffmpeg/ffmpeg_regression_tests.cc",
      "filters/pipeline_integration_test_base.cc",
    ]
    configs += [ ":media_config" ]
    deps = [
      ":media",
      ":test_support",
      "//base/test:test_support",
      "//media/audio:test_support",
      "//media/base:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/ffmpeg",
      "//ui/gfx/geometry",
      "//ui/gfx:test_support",
    ]
  # TODO(ajwong): This was in the original gyp, but it seems silly.
  #        ['os_posix==1 and OS!="mac"', {
  #          'conditions': [
  #            ['use_allocator!="none"', {
  #              'dependencies': [
  #                '../base/allocator/allocator.gyp:allocator',
  #              ],
  #            }],
  #          ],
  #        }],
  }
}

if (use_x11) {
  executable("player_x11") {
    sources = [
      "tools/player_x11/data_source_logger.cc",
      "tools/player_x11/data_source_logger.h",
      "tools/player_x11/gl_video_renderer.cc",
      "tools/player_x11/gl_video_renderer.h",
      "tools/player_x11/player_x11.cc",
      "tools/player_x11/x11_video_renderer.cc",
      "tools/player_x11/x11_video_renderer.h",
    ]
    configs += [
      ":media_config",
      "//build/config/linux:x11",
      "//build/config/linux:xext",
# TODO(ajwong): Why does xext get a separate thing in //build/config/linux:BUILD.gn
    #  "//build/config/linux:xrender",
    ]
    deps = [
      ":media",
      ":shared_memory_support",
      "//base",
      "//ui/gl",
      "//ui/gfx",
      "//ui/gfx/geometry",
    ]
  }
}

if (is_android) {
  import("//build/config/android/rules.gni")
  android_library("media_java") {
    srcjar_deps = [
      ":media_android_imageformat_list",
    ]
    java_files = []
  }

  java_cpp_template("media_android_imageformat_list") {
    sources = [
      "base/android/java/src/org/chromium/media/ImageFormat.template",
    ]
    inputs = [
      "video/capture/android/imageformat_list.h"
    ]
    package_name = "org/chromium/media"
  }
}
