# Copyright (c) 2012 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. { 'variables': { 'chromium_code': 1, # Override to dynamically link the cras (ChromeOS audio) library. 'use_cras%': 0, # Option e.g. for Linux distributions to link pulseaudio directly # (DT_NEEDED) instead of using dlopen. This helps with automated # detection of ABI mismatches and prevents silent errors. 'linux_link_pulseaudio%': 0, 'conditions': [ ['OS=="android"', { # Android doesn't use ffmpeg. 'media_use_ffmpeg%': 0, # Android doesn't use libvpx. 'media_use_libvpx%': 0, }, { # 'OS!="android"' 'media_use_ffmpeg%': 1, 'media_use_libvpx%': 1, }], # ALSA usage. ['(OS=="linux" or OS=="freebsd" or OS=="solaris") and embedded!=1', { 'use_alsa%': 1, }, { 'use_alsa%': 0, }], ['os_posix==1 and OS!="mac" and OS!="android" and chromeos!=1 and embedded!=1', { 'use_pulseaudio%': 1, }, { 'use_pulseaudio%': 0, }], ], }, 'includes': [ 'media_cdm.gypi', ], 'targets': [ { 'target_name': 'media', 'type': '<(component)', 'dependencies': [ '../base/base.gyp:base', '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', '../crypto/crypto.gyp:crypto', '../net/net.gyp:net', '../gpu/gpu.gyp:command_buffer_common', '../skia/skia.gyp:skia', '../third_party/opus/opus.gyp:opus', '../ui/events/events.gyp:events_base', '../ui/gfx/gfx.gyp:gfx', '../url/url.gyp:url_lib', 'shared_memory_support', ], 'defines': [ 'MEDIA_IMPLEMENTATION', ], 'include_dirs': [ '..', ], 'sources': [ 'audio/agc_audio_stream.h', 'audio/alsa/alsa_input.cc', 'audio/alsa/alsa_input.h', 'audio/alsa/alsa_output.cc', 'audio/alsa/alsa_output.h', 'audio/alsa/alsa_util.cc', 'audio/alsa/alsa_util.h', 'audio/alsa/alsa_wrapper.cc', 'audio/alsa/alsa_wrapper.h', 'audio/alsa/audio_manager_alsa.cc', 'audio/alsa/audio_manager_alsa.h', 'audio/android/audio_manager_android.cc', 'audio/android/audio_manager_android.h', 'audio/android/audio_record_input.cc', 'audio/android/audio_record_input.h', 'audio/android/opensles_input.cc', 'audio/android/opensles_input.h', 'audio/android/opensles_output.cc', 'audio/android/opensles_output.h', 'audio/android/opensles_wrapper.cc', 'audio/audio_buffers_state.cc', 'audio/audio_buffers_state.h', 'audio/audio_device_name.cc', 'audio/audio_device_name.h', 'audio/audio_device_thread.cc', 'audio/audio_device_thread.h', 'audio/audio_input_controller.cc', 'audio/audio_input_controller.h', 'audio/audio_input_device.cc', 'audio/audio_input_device.h', 'audio/audio_input_ipc.cc', 'audio/audio_input_ipc.h', 'audio/audio_io.h', 'audio/audio_manager.cc', 'audio/audio_manager.h', 'audio/audio_manager_base.cc', 'audio/audio_manager_base.h', 'audio/audio_output_controller.cc', 'audio/audio_output_controller.h', 'audio/audio_output_device.cc', 'audio/audio_output_device.h', 'audio/audio_output_dispatcher.cc', 'audio/audio_output_dispatcher.h', 'audio/audio_output_dispatcher_impl.cc', 'audio/audio_output_dispatcher_impl.h', 'audio/audio_output_ipc.cc', 'audio/audio_output_ipc.h', 'audio/audio_output_proxy.cc', 'audio/audio_output_proxy.h', 'audio/audio_output_resampler.cc', 'audio/audio_output_resampler.h', 'audio/audio_power_monitor.cc', 'audio/audio_power_monitor.h', 'audio/audio_source_diverter.h', 'audio/clockless_audio_sink.cc', 'audio/clockless_audio_sink.h', 'audio/cras/audio_manager_cras.cc', 'audio/cras/audio_manager_cras.h', 'audio/cras/cras_input.cc', 'audio/cras/cras_input.h', 'audio/cras/cras_unified.cc', 'audio/cras/cras_unified.h', 'audio/fake_audio_consumer.cc', 'audio/fake_audio_consumer.h', 'audio/fake_audio_input_stream.cc', 'audio/fake_audio_input_stream.h', 'audio/fake_audio_log_factory.h', 'audio/fake_audio_log_factory.cc', 'audio/fake_audio_manager.cc', 'audio/fake_audio_manager.h', 'audio/fake_audio_output_stream.cc', 'audio/fake_audio_output_stream.h', 'audio/linux/audio_manager_linux.cc', 'audio/mac/aggregate_device_manager.cc', 'audio/mac/aggregate_device_manager.h', 'audio/mac/audio_auhal_mac.cc', 'audio/mac/audio_auhal_mac.h', 'audio/mac/audio_device_listener_mac.cc', 'audio/mac/audio_device_listener_mac.h', 'audio/mac/audio_input_mac.cc', 'audio/mac/audio_input_mac.h', 'audio/mac/audio_low_latency_input_mac.cc', 'audio/mac/audio_low_latency_input_mac.h', 'audio/mac/audio_low_latency_output_mac.cc', 'audio/mac/audio_low_latency_output_mac.h', 'audio/mac/audio_manager_mac.cc', 'audio/mac/audio_manager_mac.h', 'audio/mac/audio_synchronized_mac.cc', 'audio/mac/audio_synchronized_mac.h', 'audio/mac/audio_unified_mac.cc', 'audio/mac/audio_unified_mac.h', 'audio/null_audio_sink.cc', 'audio/null_audio_sink.h', 'audio/openbsd/audio_manager_openbsd.cc', 'audio/openbsd/audio_manager_openbsd.h', 'audio/pulse/audio_manager_pulse.cc', 'audio/pulse/audio_manager_pulse.h', 'audio/pulse/pulse_input.cc', 'audio/pulse/pulse_input.h', 'audio/pulse/pulse_output.cc', 'audio/pulse/pulse_output.h', 'audio/pulse/pulse_unified.cc', 'audio/pulse/pulse_unified.h', 'audio/pulse/pulse_util.cc', 'audio/pulse/pulse_util.h', 'audio/sample_rates.cc', 'audio/sample_rates.h', 'audio/scoped_loop_observer.cc', 'audio/scoped_loop_observer.h', 'audio/simple_sources.cc', 'audio/simple_sources.h', 'audio/sounds/audio_stream_handler.cc', 'audio/sounds/audio_stream_handler.h', 'audio/sounds/sounds_manager.cc', 'audio/sounds/sounds_manager.h', 'audio/sounds/wav_audio_handler.cc', 'audio/sounds/wav_audio_handler.h', 'audio/virtual_audio_input_stream.cc', 'audio/virtual_audio_input_stream.h', 'audio/virtual_audio_output_stream.cc', 'audio/virtual_audio_output_stream.h', 'audio/win/audio_device_listener_win.cc', 'audio/win/audio_device_listener_win.h', 'audio/win/audio_low_latency_input_win.cc', 'audio/win/audio_low_latency_input_win.h', 'audio/win/audio_low_latency_output_win.cc', 'audio/win/audio_low_latency_output_win.h', 'audio/win/audio_manager_win.cc', 'audio/win/audio_manager_win.h', 'audio/win/audio_unified_win.cc', 'audio/win/audio_unified_win.h', 'audio/win/avrt_wrapper_win.cc', 'audio/win/avrt_wrapper_win.h', 'audio/win/core_audio_util_win.cc', 'audio/win/core_audio_util_win.h', 'audio/win/device_enumeration_win.cc', 'audio/win/device_enumeration_win.h', 'audio/win/wavein_input_win.cc', 'audio/win/wavein_input_win.h', 'audio/win/waveout_output_win.cc', 'audio/win/waveout_output_win.h', 'base/android/demuxer_android.h', 'base/android/demuxer_stream_player_params.cc', 'base/android/demuxer_stream_player_params.h', 'base/android/media_player_manager.h', 'base/android/media_resource_getter.cc', 'base/android/media_resource_getter.h', 'base/audio_buffer.cc', 'base/audio_buffer.h', 'base/audio_buffer_queue.cc', 'base/audio_buffer_queue.h', 'base/audio_capturer_source.h', 'base/audio_converter.cc', 'base/audio_converter.h', 'base/audio_decoder.cc', 'base/audio_decoder.h', 'base/audio_decoder_config.cc', 'base/audio_decoder_config.h', 'base/audio_fifo.cc', 'base/audio_fifo.h', 'base/audio_hardware_config.cc', 'base/audio_hardware_config.h', 'base/audio_hash.cc', 'base/audio_hash.h', 'base/audio_pull_fifo.cc', 'base/audio_pull_fifo.h', 'base/audio_renderer.cc', 'base/audio_renderer.h', 'base/audio_renderer_mixer.cc', 'base/audio_renderer_mixer.h', 'base/audio_renderer_mixer_input.cc', 'base/audio_renderer_mixer_input.h', 'base/audio_renderer_sink.h', 'base/audio_splicer.cc', 'base/audio_splicer.h', 'base/audio_timestamp_helper.cc', 'base/audio_timestamp_helper.h', 'base/bind_to_loop.h', 'base/bit_reader.cc', 'base/bit_reader.h', 'base/bitstream_buffer.h', 'base/buffers.h', 'base/byte_queue.cc', 'base/byte_queue.h', 'base/channel_mixer.cc', 'base/channel_mixer.h', 'base/clock.cc', 'base/clock.h', 'base/container_names.cc', 'base/container_names.h', 'base/data_buffer.cc', 'base/data_buffer.h', 'base/data_source.cc', 'base/data_source.h', 'base/decoder_buffer.cc', 'base/decoder_buffer.h', 'base/decoder_buffer_queue.cc', 'base/decoder_buffer_queue.h', 'base/decrypt_config.cc', 'base/decrypt_config.h', 'base/decryptor.cc', 'base/decryptor.h', 'base/demuxer.cc', 'base/demuxer.h', 'base/demuxer_stream.cc', 'base/demuxer_stream.h', 'base/djb2.cc', 'base/djb2.h', 'base/filter_collection.cc', 'base/filter_collection.h', 'base/keyboard_event_counter.cc', 'base/keyboard_event_counter.h', 'base/media.cc', 'base/media.h', 'base/media_file_checker.cc', 'base/media_file_checker.h', 'base/media_keys.cc', 'base/media_keys.h', 'base/media_log.cc', 'base/media_log.h', 'base/media_log_event.h', 'base/media_posix.cc', 'base/media_switches.cc', 'base/media_switches.h', 'base/media_win.cc', 'base/multi_channel_resampler.cc', 'base/multi_channel_resampler.h', 'base/pipeline.cc', 'base/pipeline.h', 'base/pipeline_status.h', 'base/ranges.cc', 'base/ranges.h', 'base/sample_format.cc', 'base/sample_format.h', 'base/scoped_histogram_timer.h', 'base/seekable_buffer.cc', 'base/seekable_buffer.h', 'base/serial_runner.cc', 'base/serial_runner.h', 'base/simd/convert_rgb_to_yuv.h', 'base/simd/convert_rgb_to_yuv_c.cc', 'base/simd/convert_yuv_to_rgb.h', 'base/simd/convert_yuv_to_rgb_c.cc', 'base/simd/filter_yuv.h', 'base/simd/filter_yuv_c.cc', 'base/simd/yuv_to_rgb_table.cc', 'base/simd/yuv_to_rgb_table.h', 'base/sinc_resampler.cc', 'base/sinc_resampler.h', 'base/stream_parser.cc', 'base/stream_parser.h', 'base/stream_parser_buffer.cc', 'base/stream_parser_buffer.h', 'base/text_cue.cc', 'base/text_cue.h', 'base/text_renderer.cc', 'base/text_renderer.h', 'base/text_track.h', 'base/text_track_config.cc', 'base/text_track_config.h', 'base/user_input_monitor.cc', 'base/user_input_monitor.h', 'base/user_input_monitor_linux.cc', 'base/user_input_monitor_mac.cc', 'base/user_input_monitor_win.cc', 'base/video_decoder.cc', 'base/video_decoder.h', 'base/video_decoder_config.cc', 'base/video_decoder_config.h', 'base/video_frame.cc', 'base/video_frame.h', 'base/video_frame_pool.cc', 'base/video_frame_pool.h', 'base/video_renderer.cc', 'base/video_renderer.h', 'base/video_util.cc', 'base/video_util.h', 'base/yuv_convert.cc', 'base/yuv_convert.h', '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', 'ffmpeg/ffmpeg_common.cc', 'ffmpeg/ffmpeg_common.h', 'filters/audio_decoder_selector.cc', 'filters/audio_decoder_selector.h', 'filters/audio_file_reader.cc', 'filters/audio_file_reader.h', 'filters/audio_renderer_algorithm.cc', 'filters/audio_renderer_algorithm.h', 'filters/audio_renderer_impl.cc', 'filters/audio_renderer_impl.h', 'filters/blocking_url_protocol.cc', 'filters/blocking_url_protocol.h', 'filters/chunk_demuxer.cc', 'filters/chunk_demuxer.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/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_h264_to_annex_b_bitstream_converter.cc', 'filters/ffmpeg_h264_to_annex_b_bitstream_converter.h', 'filters/ffmpeg_video_decoder.cc', 'filters/ffmpeg_video_decoder.h', 'filters/file_data_source.cc', 'filters/file_data_source.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_to_annex_b_bitstream_converter.cc', 'filters/h264_to_annex_b_bitstream_converter.h', 'filters/in_memory_url_protocol.cc', 'filters/in_memory_url_protocol.h', 'filters/opus_audio_decoder.cc', 'filters/opus_audio_decoder.h', 'filters/skcanvas_video_renderer.cc', 'filters/skcanvas_video_renderer.h', 'filters/source_buffer_stream.cc', 'filters/source_buffer_stream.h', 'filters/stream_parser_factory.cc', 'filters/stream_parser_factory.h', 'filters/video_decoder_selector.cc', 'filters/video_decoder_selector.h', 'filters/video_frame_stream.cc', 'filters/video_frame_stream.h', 'filters/video_renderer_impl.cc', 'filters/video_renderer_impl.h', 'filters/vpx_video_decoder.cc', 'filters/vpx_video_decoder.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_message_queue.cc', 'midi/midi_message_queue.h', 'midi/midi_message_util.cc', 'midi/midi_message_util.h', 'midi/midi_manager_win.cc', 'midi/midi_manager_win.h', 'midi/midi_port_info.cc', 'midi/midi_port_info.h', 'video/capture/android/video_capture_device_android.cc', 'video/capture/android/video_capture_device_android.h', 'video/capture/fake_video_capture_device.cc', 'video/capture/fake_video_capture_device.h', 'video/capture/file_video_capture_device.cc', 'video/capture/file_video_capture_device.h', 'video/capture/linux/video_capture_device_linux.cc', 'video/capture/linux/video_capture_device_linux.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_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.h', 'video/capture/video_capture_device.cc', 'video/capture/video_capture_device.h', 'video/capture/video_capture_proxy.cc', 'video/capture/video_capture_proxy.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_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', 'webm/webm_audio_client.cc', 'webm/webm_audio_client.h', 'webm/webm_cluster_parser.cc', 'webm/webm_cluster_parser.h', 'webm/webm_constants.cc', 'webm/webm_constants.h', 'webm/webm_content_encodings.cc', 'webm/webm_content_encodings.h', 'webm/webm_content_encodings_client.cc', 'webm/webm_content_encodings_client.h', 'webm/webm_crypto_helpers.cc', 'webm/webm_crypto_helpers.h', 'webm/webm_info_parser.cc', 'webm/webm_info_parser.h', 'webm/webm_parser.cc', 'webm/webm_parser.h', 'webm/webm_stream_parser.cc', 'webm/webm_stream_parser.h', 'webm/webm_tracks_parser.cc', 'webm/webm_tracks_parser.h', 'webm/webm_video_client.cc', 'webm/webm_video_client.h', 'webm/webm_webvtt_parser.cc', 'webm/webm_webvtt_parser.h' ], 'direct_dependent_settings': { 'include_dirs': [ '..', ], }, 'conditions': [ ['arm_neon==1', { 'defines': [ 'USE_NEON' ], }], ['media_use_ffmpeg==1', { 'dependencies': [ '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg', ], }, { # media_use_ffmpeg==0 # Exclude the sources that depend on ffmpeg. 'sources!': [ 'base/container_names.cc', 'base/container_names.h', 'base/media_file_checker.cc', 'base/media_file_checker.h', 'base/media_posix.cc', '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_h264_to_annex_b_bitstream_converter.cc', 'filters/ffmpeg_h264_to_annex_b_bitstream_converter.h', 'filters/ffmpeg_video_decoder.cc', 'filters/ffmpeg_video_decoder.h', ], }], ['media_use_libvpx==1', { 'dependencies': [ '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx', ], }, { # media_use_libvpx==0 'direct_dependent_settings': { 'defines': [ 'MEDIA_DISABLE_LIBVPX', ], }, # Exclude the sources that depend on libvpx. 'sources!': [ 'filters/vpx_video_decoder.cc', 'filters/vpx_video_decoder.h', ], }], ['OS=="android"', { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)/media', ], 'dependencies': [ 'media_android_jni_headers', 'player_android', 'video_capture_android_jni_headers', ], 'sources': [ 'base/media.cc', 'base/media.h', 'base/media_stub.cc', ], 'sources!': [ 'filters/opus_audio_decoder.cc', 'filters/opus_audio_decoder.h', ], 'conditions': [ ['android_webview_build==0', { 'dependencies': [ 'media_java', ], }], ], 'defines': [ 'DISABLE_USER_INPUT_MONITOR', ], }], # A simple WebM encoder for animated avatars on ChromeOS. ['chromeos==1', { 'dependencies': [ '../third_party/libvpx/libvpx.gyp:libvpx', '../third_party/libyuv/libyuv.gyp:libyuv', ], 'sources': [ 'webm/chromeos/ebml_writer.cc', 'webm/chromeos/ebml_writer.h', 'webm/chromeos/webm_encoder.cc', 'webm/chromeos/webm_encoder.h', ], }], ['use_alsa==1', { 'link_settings': { 'libraries': [ '-lasound', ], }, 'defines': [ 'USE_ALSA', ], }, { # use_alsa==0 'sources/': [ ['exclude', '(^|/)alsa/'], ], }], ['OS!="openbsd"', { 'sources!': [ 'audio/openbsd/audio_manager_openbsd.cc', 'audio/openbsd/audio_manager_openbsd.h', ], }], ['OS=="linux"', { 'variables': { 'conditions': [ ['sysroot!=""', { 'pkg-config': '../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"', }, { 'pkg-config': 'pkg-config' }], ], }, 'conditions': [ ['use_x11==1', { 'link_settings': { 'libraries': [ '-lX11', '-lXdamage', '-lXext', '-lXfixes', '-lXtst', ], }, }, { # else: use_x11==0 'sources!': [ 'base/user_input_monitor_linux.cc', ], 'defines': [ 'DISABLE_USER_INPUT_MONITOR', ], }], ['use_cras==1', { 'cflags': [ '