media.gyp revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1# Copyright (c) 2012 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5{
6  'variables': {
7    'chromium_code': 1,
8    # Override to dynamically link the cras (ChromeOS audio) library.
9    'use_cras%': 0,
10    # Option e.g. for Linux distributions to link pulseaudio directly
11    # (DT_NEEDED) instead of using dlopen. This helps with automated
12    # detection of ABI mismatches and prevents silent errors.
13    'linux_link_pulseaudio%': 0,
14    'conditions': [
15      ['OS == "android" or OS == "ios"', {
16        # Android and iOS don't use ffmpeg.
17        'media_use_ffmpeg%': 0,
18        # Android and iOS don't use libvpx.
19        'media_use_libvpx%': 0,
20      }, {  # 'OS != "android" and OS != "ios"'
21        'media_use_ffmpeg%': 1,
22        'media_use_libvpx%': 1,
23      }],
24      # Screen capturer works only on Windows, OSX and Linux (with X11).
25      ['OS=="win" or OS=="mac" or (OS=="linux" and use_x11==1)', {
26        'screen_capture_supported%': 1,
27      }, {
28        'screen_capture_supported%': 0,
29      }],
30      # ALSA usage.
31      ['OS=="linux" or OS=="freebsd" or OS=="solaris"', {
32        'use_alsa%': 1,
33      }, {
34        'use_alsa%': 0,
35      }],
36      ['os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android" and chromeos != 1', {
37        'use_pulseaudio%': 1,
38      }, {
39        'use_pulseaudio%': 0,
40      }],
41    ],
42  },
43  'targets': [
44    {
45      'target_name': 'media',
46      'type': '<(component)',
47      'dependencies': [
48        '../base/base.gyp:base',
49        '../build/temp_gyp/googleurl.gyp:googleurl',
50        '../crypto/crypto.gyp:crypto',
51        '../skia/skia.gyp:skia',
52        '../third_party/opus/opus.gyp:opus',
53        '../ui/ui.gyp:ui',
54      ],
55      'defines': [
56        'MEDIA_IMPLEMENTATION',
57      ],
58      'include_dirs': [
59        '..',
60      ],
61      'sources': [
62        'audio/android/audio_manager_android.cc',
63        'audio/android/audio_manager_android.h',
64        'audio/android/opensles_input.cc',
65        'audio/android/opensles_input.h',
66        'audio/android/opensles_output.cc',
67        'audio/android/opensles_output.h',
68        'audio/async_socket_io_handler.h',
69        'audio/async_socket_io_handler_posix.cc',
70        'audio/async_socket_io_handler_win.cc',
71        'audio/audio_buffers_state.cc',
72        'audio/audio_buffers_state.h',
73        'audio/audio_device_name.cc',
74        'audio/audio_device_name.h',
75        'audio/audio_device_thread.cc',
76        'audio/audio_device_thread.h',
77        'audio/audio_input_controller.cc',
78        'audio/audio_input_controller.h',
79        'audio/audio_input_device.cc',
80        'audio/audio_input_device.h',
81        'audio/audio_input_ipc.cc',
82        'audio/audio_input_ipc.h',
83        'audio/audio_input_stream_impl.cc',
84        'audio/audio_input_stream_impl.h',
85        'audio/audio_io.h',
86        'audio/audio_manager.cc',
87        'audio/audio_manager.h',
88        'audio/audio_manager_base.cc',
89        'audio/audio_manager_base.h',
90        'audio/audio_output_controller.cc',
91        'audio/audio_output_controller.h',
92        'audio/audio_output_device.cc',
93        'audio/audio_output_device.h',
94        'audio/audio_output_dispatcher.cc',
95        'audio/audio_output_dispatcher.h',
96        'audio/audio_output_dispatcher_impl.cc',
97        'audio/audio_output_dispatcher_impl.h',
98        'audio/audio_output_ipc.cc',
99        'audio/audio_output_ipc.h',
100        'audio/audio_output_proxy.cc',
101        'audio/audio_output_proxy.h',
102        'audio/audio_output_resampler.cc',
103        'audio/audio_output_resampler.h',
104        'audio/audio_silence_detector.cc',
105        'audio/audio_silence_detector.h',
106        'audio/audio_source_diverter.h',
107        'audio/audio_util.cc',
108        'audio/audio_util.h',
109        'audio/cras/audio_manager_cras.cc',
110        'audio/cras/audio_manager_cras.h',
111        'audio/cras/cras_input.cc',
112        'audio/cras/cras_input.h',
113        'audio/cras/cras_unified.cc',
114        'audio/cras/cras_unified.h',
115        'audio/cross_process_notification.cc',
116        'audio/cross_process_notification.h',
117        'audio/cross_process_notification_posix.cc',
118        'audio/cross_process_notification_win.cc',
119        'audio/fake_audio_consumer.cc',
120        'audio/fake_audio_consumer.h',
121        'audio/fake_audio_input_stream.cc',
122        'audio/fake_audio_input_stream.h',
123        'audio/fake_audio_output_stream.cc',
124        'audio/fake_audio_output_stream.h',
125        'audio/ios/audio_manager_ios.h',
126        'audio/ios/audio_manager_ios.mm',
127        'audio/ios/audio_session_util_ios.h',
128        'audio/ios/audio_session_util_ios.mm',
129        'audio/linux/alsa_input.cc',
130        'audio/linux/alsa_input.h',
131        'audio/linux/alsa_output.cc',
132        'audio/linux/alsa_output.h',
133        'audio/linux/alsa_util.cc',
134        'audio/linux/alsa_util.h',
135        'audio/linux/alsa_wrapper.cc',
136        'audio/linux/alsa_wrapper.h',
137        'audio/linux/audio_manager_linux.cc',
138        'audio/linux/audio_manager_linux.h',
139        'audio/mac/aggregate_device_manager.cc',
140        'audio/mac/aggregate_device_manager.h',
141        'audio/mac/audio_auhal_mac.cc',
142        'audio/mac/audio_auhal_mac.h',
143        'audio/mac/audio_device_listener_mac.cc',
144        'audio/mac/audio_device_listener_mac.h',
145        'audio/mac/audio_input_mac.cc',
146        'audio/mac/audio_input_mac.h',
147        'audio/mac/audio_low_latency_input_mac.cc',
148        'audio/mac/audio_low_latency_input_mac.h',
149        'audio/mac/audio_low_latency_output_mac.cc',
150        'audio/mac/audio_low_latency_output_mac.h',
151        'audio/mac/audio_manager_mac.cc',
152        'audio/mac/audio_manager_mac.h',
153        'audio/mac/audio_synchronized_mac.cc',
154        'audio/mac/audio_synchronized_mac.h',
155        'audio/mac/audio_unified_mac.cc',
156        'audio/mac/audio_unified_mac.h',
157        'audio/null_audio_sink.cc',
158        'audio/null_audio_sink.h',
159        'audio/openbsd/audio_manager_openbsd.cc',
160        'audio/openbsd/audio_manager_openbsd.h',
161        'audio/pulse/audio_manager_pulse.cc',
162        'audio/pulse/audio_manager_pulse.h',
163        'audio/pulse/pulse_output.cc',
164        'audio/pulse/pulse_output.h',
165        'audio/pulse/pulse_input.cc',
166        'audio/pulse/pulse_input.h',
167        'audio/pulse/pulse_unified.cc',
168        'audio/pulse/pulse_unified.h',
169        'audio/pulse/pulse_util.cc',
170        'audio/pulse/pulse_util.h',
171        'audio/sample_rates.cc',
172        'audio/sample_rates.h',
173        'audio/scoped_loop_observer.cc',
174        'audio/scoped_loop_observer.h',
175        'audio/simple_sources.cc',
176        'audio/simple_sources.h',
177        'audio/virtual_audio_input_stream.cc',
178        'audio/virtual_audio_input_stream.h',
179        'audio/virtual_audio_output_stream.cc',
180        'audio/virtual_audio_output_stream.h',
181        'audio/win/audio_device_listener_win.cc',
182        'audio/win/audio_device_listener_win.h',
183        'audio/win/audio_low_latency_input_win.cc',
184        'audio/win/audio_low_latency_input_win.h',
185        'audio/win/audio_low_latency_output_win.cc',
186        'audio/win/audio_low_latency_output_win.h',
187        'audio/win/audio_manager_win.cc',
188        'audio/win/audio_manager_win.h',
189        'audio/win/audio_unified_win.cc',
190        'audio/win/audio_unified_win.h',
191        'audio/win/avrt_wrapper_win.cc',
192        'audio/win/avrt_wrapper_win.h',
193        'audio/win/device_enumeration_win.cc',
194        'audio/win/device_enumeration_win.h',
195        'audio/win/core_audio_util_win.cc',
196        'audio/win/core_audio_util_win.h',
197        'audio/win/wavein_input_win.cc',
198        'audio/win/wavein_input_win.h',
199        'audio/win/waveout_output_win.cc',
200        'audio/win/waveout_output_win.h',
201        'base/android/media_player_manager.cc',
202        'base/android/media_player_manager.h',
203        'base/android/media_resource_getter.cc',
204        'base/android/media_resource_getter.h',
205        'base/audio_capturer_source.h',
206        'base/audio_converter.cc',
207        'base/audio_converter.h',
208        'base/audio_decoder.cc',
209        'base/audio_decoder.h',
210        'base/audio_decoder_config.cc',
211        'base/audio_decoder_config.h',
212        'base/audio_fifo.cc',
213        'base/audio_fifo.h',
214        'base/audio_hardware_config.cc',
215        'base/audio_hardware_config.h',
216        'base/audio_hash.cc',
217        'base/audio_hash.h',
218        'base/audio_pull_fifo.cc',
219        'base/audio_pull_fifo.h',
220        'base/audio_renderer.cc',
221        'base/audio_renderer.h',
222        'base/audio_renderer_sink.h',
223        'base/audio_renderer_mixer.cc',
224        'base/audio_renderer_mixer.h',
225        'base/audio_renderer_mixer_input.cc',
226        'base/audio_renderer_mixer_input.h',
227        'base/audio_splicer.cc',
228        'base/audio_splicer.h',
229        'base/audio_timestamp_helper.cc',
230        'base/audio_timestamp_helper.h',
231        'base/bind_to_loop.h',
232        'base/bitstream_buffer.h',
233        'base/bit_reader.cc',
234        'base/bit_reader.h',
235        'base/buffers.h',
236        'base/byte_queue.cc',
237        'base/byte_queue.h',
238        'base/channel_mixer.cc',
239        'base/channel_mixer.h',
240        'base/clock.cc',
241        'base/clock.h',
242        'base/data_buffer.cc',
243        'base/data_buffer.h',
244        'base/data_source.cc',
245        'base/data_source.h',
246        'base/decoder_buffer.cc',
247        'base/decoder_buffer.h',
248        'base/decoder_buffer_queue.cc',
249        'base/decoder_buffer_queue.h',
250        'base/decryptor.cc',
251        'base/decryptor.h',
252        'base/decrypt_config.cc',
253        'base/decrypt_config.h',
254        'base/demuxer.cc',
255        'base/demuxer.h',
256        'base/demuxer_stream.cc',
257        'base/demuxer_stream.h',
258        'base/djb2.cc',
259        'base/djb2.h',
260        'base/filter_collection.cc',
261        'base/filter_collection.h',
262        'base/media.cc',
263        'base/media.h',
264        'base/media_log.cc',
265        'base/media_log.h',
266        'base/media_log_event.h',
267        'base/media_posix.cc',
268        'base/media_switches.cc',
269        'base/media_switches.h',
270        'base/media_win.cc',
271        'base/multi_channel_resampler.cc',
272        'base/multi_channel_resampler.h',
273        'base/pipeline.cc',
274        'base/pipeline.h',
275        'base/pipeline_status.cc',
276        'base/pipeline_status.h',
277        'base/ranges.cc',
278        'base/ranges.h',
279        'base/seekable_buffer.cc',
280        'base/seekable_buffer.h',
281        'base/serial_runner.cc',
282        'base/serial_runner.h',
283        'base/sinc_resampler.cc',
284        'base/sinc_resampler.h',
285        'base/stream_parser.cc',
286        'base/stream_parser.h',
287        'base/stream_parser_buffer.cc',
288        'base/stream_parser_buffer.h',
289        'base/video_decoder.cc',
290        'base/video_decoder.h',
291        'base/video_decoder_config.cc',
292        'base/video_decoder_config.h',
293        'base/video_frame.cc',
294        'base/video_frame.h',
295        'base/video_renderer.cc',
296        'base/video_renderer.h',
297        'base/video_util.cc',
298        'base/video_util.h',
299        'crypto/aes_decryptor.cc',
300        'crypto/aes_decryptor.h',
301        'ffmpeg/ffmpeg_common.cc',
302        'ffmpeg/ffmpeg_common.h',
303        'filters/audio_decoder_selector.cc',
304        'filters/audio_decoder_selector.h',
305        'filters/audio_file_reader.cc',
306        'filters/audio_file_reader.h',
307        'filters/audio_renderer_algorithm.cc',
308        'filters/audio_renderer_algorithm.h',
309        'filters/audio_renderer_impl.cc',
310        'filters/audio_renderer_impl.h',
311        'filters/blocking_url_protocol.cc',
312        'filters/blocking_url_protocol.h',
313        'filters/chunk_demuxer.cc',
314        'filters/chunk_demuxer.h',
315        'filters/decrypting_audio_decoder.cc',
316        'filters/decrypting_audio_decoder.h',
317        'filters/decrypting_demuxer_stream.cc',
318        'filters/decrypting_demuxer_stream.h',
319        'filters/decrypting_video_decoder.cc',
320        'filters/decrypting_video_decoder.h',
321        'filters/fake_demuxer_stream.cc',
322        'filters/fake_demuxer_stream.h',
323        'filters/ffmpeg_audio_decoder.cc',
324        'filters/ffmpeg_audio_decoder.h',
325        'filters/ffmpeg_demuxer.cc',
326        'filters/ffmpeg_demuxer.h',
327        'filters/ffmpeg_glue.cc',
328        'filters/ffmpeg_glue.h',
329        'filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc',
330        'filters/ffmpeg_h264_to_annex_b_bitstream_converter.h',
331        'filters/ffmpeg_video_decoder.cc',
332        'filters/ffmpeg_video_decoder.h',
333        'filters/file_data_source.cc',
334        'filters/file_data_source.h',
335        'filters/gpu_video_decoder.cc',
336        'filters/gpu_video_decoder.h',
337        'filters/h264_to_annex_b_bitstream_converter.cc',
338        'filters/h264_to_annex_b_bitstream_converter.h',
339        'filters/in_memory_url_protocol.cc',
340        'filters/in_memory_url_protocol.h',
341        'filters/opus_audio_decoder.cc',
342        'filters/opus_audio_decoder.h',
343        'filters/skcanvas_video_renderer.cc',
344        'filters/skcanvas_video_renderer.h',
345        'filters/source_buffer_stream.cc',
346        'filters/source_buffer_stream.h',
347        'filters/stream_parser_factory.cc',
348        'filters/stream_parser_factory.h',
349        'filters/video_decoder_selector.cc',
350        'filters/video_decoder_selector.h',
351        'filters/video_frame_stream.cc',
352        'filters/video_frame_stream.h',
353        'filters/video_renderer_base.cc',
354        'filters/video_renderer_base.h',
355        'filters/vpx_video_decoder.cc',
356        'filters/vpx_video_decoder.h',
357        'video/capture/android/video_capture_device_android.cc',
358        'video/capture/android/video_capture_device_android.h',
359        'video/capture/fake_video_capture_device.cc',
360        'video/capture/fake_video_capture_device.h',
361        'video/capture/linux/video_capture_device_linux.cc',
362        'video/capture/linux/video_capture_device_linux.h',
363        'video/capture/mac/video_capture_device_mac.h',
364        'video/capture/mac/video_capture_device_mac.mm',
365        'video/capture/mac/video_capture_device_qtkit_mac.h',
366        'video/capture/mac/video_capture_device_qtkit_mac.mm',
367        'video/capture/screen/differ.cc',
368        'video/capture/screen/differ.h',
369        'video/capture/screen/differ_block.cc',
370        'video/capture/screen/differ_block.h',
371        'video/capture/screen/x11/x_server_pixel_buffer.cc',
372        'video/capture/screen/x11/x_server_pixel_buffer.h',
373        'video/capture/screen/mac/desktop_configuration.mm',
374        'video/capture/screen/mac/desktop_configuration.h',
375        'video/capture/screen/mac/scoped_pixel_buffer_object.cc',
376        'video/capture/screen/mac/scoped_pixel_buffer_object.h',
377        'video/capture/screen/mouse_cursor_shape.cc',
378        'video/capture/screen/mouse_cursor_shape.h',
379        'video/capture/screen/screen_capture_data.cc',
380        'video/capture/screen/screen_capture_data.h',
381        'video/capture/screen/screen_capture_device.cc',
382        'video/capture/screen/screen_capture_device.h',
383        'video/capture/screen/screen_capture_frame.cc',
384        'video/capture/screen/screen_capture_frame.h',
385        'video/capture/screen/screen_capture_frame_queue.cc',
386        'video/capture/screen/screen_capture_frame_queue.h',
387        'video/capture/screen/screen_capturer.h',
388        'video/capture/screen/screen_capturer_fake.cc',
389        'video/capture/screen/screen_capturer_fake.h',
390        'video/capture/screen/screen_capturer_helper.cc',
391        'video/capture/screen/screen_capturer_helper.h',
392        'video/capture/screen/screen_capturer_x11.cc',
393        'video/capture/screen/screen_capturer_mac.mm',
394        'video/capture/screen/screen_capturer_null.cc',
395        'video/capture/screen/screen_capturer_win.cc',
396        'video/capture/screen/shared_buffer.cc',
397        'video/capture/screen/shared_buffer.h',
398        'video/capture/screen/win/desktop.cc',
399        'video/capture/screen/win/desktop.h',
400        'video/capture/screen/win/scoped_thread_desktop.cc',
401        'video/capture/screen/win/scoped_thread_desktop.h',
402        'video/capture/video_capture.h',
403        'video/capture/video_capture_device.h',
404        'video/capture/video_capture_device_dummy.cc',
405        'video/capture/video_capture_device_dummy.h',
406        'video/capture/video_capture_proxy.cc',
407        'video/capture/video_capture_proxy.h',
408        'video/capture/video_capture_types.h',
409        'video/capture/win/capability_list_win.cc',
410        'video/capture/win/capability_list_win.h',
411        'video/capture/win/filter_base_win.cc',
412        'video/capture/win/filter_base_win.h',
413        'video/capture/win/pin_base_win.cc',
414        'video/capture/win/pin_base_win.h',
415        'video/capture/win/sink_filter_observer_win.h',
416        'video/capture/win/sink_filter_win.cc',
417        'video/capture/win/sink_filter_win.h',
418        'video/capture/win/sink_input_pin_win.cc',
419        'video/capture/win/sink_input_pin_win.h',
420        'video/capture/win/video_capture_device_mf_win.cc',
421        'video/capture/win/video_capture_device_mf_win.h',
422        'video/capture/win/video_capture_device_win.cc',
423        'video/capture/win/video_capture_device_win.h',
424        'video/picture.cc',
425        'video/picture.h',
426        'video/video_decode_accelerator.cc',
427        'video/video_decode_accelerator.h',
428        'webm/webm_audio_client.cc',
429        'webm/webm_audio_client.h',
430        'webm/webm_cluster_parser.cc',
431        'webm/webm_cluster_parser.h',
432        'webm/webm_constants.h',
433        'webm/webm_content_encodings.cc',
434        'webm/webm_content_encodings.h',
435        'webm/webm_content_encodings_client.cc',
436        'webm/webm_content_encodings_client.h',
437        'webm/webm_crypto_helpers.cc',
438        'webm/webm_crypto_helpers.h',
439        'webm/webm_info_parser.cc',
440        'webm/webm_info_parser.h',
441        'webm/webm_parser.cc',
442        'webm/webm_parser.h',
443        'webm/webm_stream_parser.cc',
444        'webm/webm_stream_parser.h',
445        'webm/webm_tracks_parser.cc',
446        'webm/webm_tracks_parser.h',
447        'webm/webm_video_client.cc',
448        'webm/webm_video_client.h',
449      ],
450      'direct_dependent_settings': {
451        'include_dirs': [
452          '..',
453        ],
454      },
455      'conditions': [
456        ['arm_neon == 1', {
457          'defines': [
458            'USE_NEON'
459          ],
460        }],
461        ['OS != "linux" or use_x11 == 1', {
462          'sources!': [
463            'video/capture/screen/screen_capturer_null.cc',
464          ]
465        }],
466        ['OS != "ios"', {
467          'dependencies': [
468            '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
469            'shared_memory_support',
470            'yuv_convert',
471          ],
472        }],
473        ['media_use_ffmpeg == 1', {
474          'dependencies': [
475            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
476          ],
477        }, {  # media_use_ffmpeg == 0
478          # Exclude the sources that depend on ffmpeg.
479          'sources!': [
480            'base/media_posix.cc',
481            'ffmpeg/ffmpeg_common.cc',
482            'ffmpeg/ffmpeg_common.h',
483            'filters/audio_file_reader.cc',
484            'filters/audio_file_reader.h',
485            'filters/blocking_url_protocol.cc',
486            'filters/blocking_url_protocol.h',
487            'filters/ffmpeg_audio_decoder.cc',
488            'filters/ffmpeg_audio_decoder.h',
489            'filters/ffmpeg_demuxer.cc',
490            'filters/ffmpeg_demuxer.h',
491            'filters/ffmpeg_glue.cc',
492            'filters/ffmpeg_glue.h',
493            'filters/ffmpeg_h264_to_annex_b_bitstream_converter.cc',
494            'filters/ffmpeg_h264_to_annex_b_bitstream_converter.h',
495            'filters/ffmpeg_video_decoder.cc',
496            'filters/ffmpeg_video_decoder.h',
497          ],
498        }],
499        ['media_use_libvpx == 1', {
500          'dependencies': [
501            '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
502          ],
503        }, {  # media_use_libvpx == 0
504          'direct_dependent_settings': {
505            'defines': [
506              'MEDIA_DISABLE_LIBVPX',
507            ],
508          },
509          # Exclude the sources that depend on libvpx.
510          'sources!': [
511            'filters/vpx_video_decoder.cc',
512            'filters/vpx_video_decoder.h',
513          ],
514        }],
515        ['OS == "ios"', {
516          'includes': [
517            # For shared_memory_support_sources variable.
518            'shared_memory_support.gypi',
519          ],
520          'sources': [
521            'base/media_stub.cc',
522            # These sources are normally built via a dependency on the
523            # shared_memory_support target, but that target is not built on iOS.
524            # Instead, directly build only the files that are needed for iOS.
525            '<@(shared_memory_support_sources)',
526          ],
527          'sources/': [
528            # Exclude everything but iOS-specific files.
529            ['exclude', '\\.(cc|mm)$'],
530            ['include', '_ios\\.(cc|mm)$'],
531            ['include', '(^|/)ios/'],
532            # Re-include specific pieces.
533            # iOS support is limited to audio input only.
534            ['include', '^audio/audio_buffers_state\\.'],
535            ['include', '^audio/audio_input_controller\\.'],
536            ['include', '^audio/audio_manager\\.'],
537            ['include', '^audio/audio_manager_base\\.'],
538            ['include', '^audio/audio_parameters\\.'],
539            ['include', '^audio/fake_audio_consumer\\.'],
540            ['include', '^audio/fake_audio_input_stream\\.'],
541            ['include', '^audio/fake_audio_output_stream\\.'],
542            ['include', '^base/audio_bus\\.'],
543            ['include', '^base/channel_layout\\.'],
544            ['include', '^base/media\\.cc$'],
545            ['include', '^base/media_stub\\.cc$'],
546            ['include', '^base/media_switches\\.'],
547            ['include', '^base/vector_math\\.'],
548          ],
549          'link_settings': {
550            'libraries': [
551              '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework',
552              '$(SDKROOT)/System/Library/Frameworks/AVFoundation.framework',
553              '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework',
554            ],
555          },
556        }],
557        ['OS == "android"', {
558          'link_settings': {
559            'libraries': [
560              '-lOpenSLES',
561            ],
562          },
563          'include_dirs': [
564            '<(SHARED_INTERMEDIATE_DIR)/media',
565          ],
566          'dependencies': [
567            'media_android_jni_headers',
568            'player_android',
569            'video_capture_android_jni_headers',
570          ],
571          'sources': [
572            'base/media.cc',
573            'base/media.h',
574          ],
575          'conditions': [
576            ['android_webview_build == 0', {
577              'dependencies': [
578                'media_java',
579              ],
580            }],
581            ['use_openmax_dl_fft==1', {
582              # FFT library requires Neon support, so we enable
583              # WebAudio only if Neon is detected at runtime.
584              'sources': [
585                'base/media_android.cc',
586              ],
587              'includes': [
588                '../build/android/cpufeatures.gypi',
589              ],
590            }, {
591              'sources': [
592                'base/media_stub.cc',
593              ],
594            }],
595          ],
596        }],
597        # A simple WebM encoder for animated avatars on ChromeOS.
598        ['chromeos==1', {
599          'dependencies': [
600            '../third_party/libvpx/libvpx.gyp:libvpx',
601            '../third_party/libyuv/libyuv.gyp:libyuv',
602          ],
603          'sources': [
604            'webm/chromeos/ebml_writer.cc',
605            'webm/chromeos/ebml_writer.h',
606            'webm/chromeos/webm_encoder.cc',
607            'webm/chromeos/webm_encoder.h',
608          ],
609        }],
610        ['use_alsa==1', {
611          'link_settings': {
612            'libraries': [
613              '-lasound',
614            ],
615          },
616        }, { # use_alsa==0
617          'sources/': [ ['exclude', '/alsa_' ],
618                      ['exclude', '/audio_manager_linux' ] ],
619        }],
620        ['OS!="openbsd"', {
621          'sources!': [
622            'audio/openbsd/audio_manager_openbsd.cc',
623            'audio/openbsd/audio_manager_openbsd.h',
624          ],
625        }],
626        ['OS=="linux"', {
627          'variables': {
628            'conditions': [
629              ['sysroot!=""', {
630                'pkg-config': '../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"',
631              }, {
632                'pkg-config': 'pkg-config'
633              }],
634            ],
635          },
636          'conditions': [
637            ['use_x11 == 1', {
638              'link_settings': {
639                'libraries': [
640                  '-lX11',
641                  '-lXdamage',
642                  '-lXext',
643                  '-lXfixes',
644                ],
645              },
646            }],
647            ['use_cras == 1', {
648              'cflags': [
649                '<!@(<(pkg-config) --cflags libcras)',
650              ],
651              'link_settings': {
652                'libraries': [
653                  '<!@(<(pkg-config) --libs libcras)',
654                ],
655              },
656              'defines': [
657                'USE_CRAS',
658              ],
659            }, {  # else: use_cras == 0
660              'sources!': [
661                'audio/cras/audio_manager_cras.cc',
662                'audio/cras/audio_manager_cras.h',
663                'audio/cras/cras_input.cc',
664                'audio/cras/cras_input.h',
665                'audio/cras/cras_unified.cc',
666                'audio/cras/cras_unified.h',
667              ],
668            }],
669          ],
670        }],
671        ['OS!="linux"', {
672          'sources!': [
673            'audio/cras/audio_manager_cras.cc',
674            'audio/cras/audio_manager_cras.h',
675            'audio/cras/cras_input.cc',
676            'audio/cras/cras_input.h',
677            'audio/cras/cras_unified.cc',
678            'audio/cras/cras_unified.h',
679          ],
680        }],
681        ['use_pulseaudio==1', {
682          'cflags': [
683            '<!@(pkg-config --cflags libpulse)',
684          ],
685          'defines': [
686            'USE_PULSEAUDIO',
687          ],
688          'conditions': [
689            ['linux_link_pulseaudio==0', {
690              'defines': [
691                'DLOPEN_PULSEAUDIO',
692              ],
693              'variables': {
694                'generate_stubs_script': '../tools/generate_stubs/generate_stubs.py',
695                'extra_header': 'audio/pulse/pulse_stub_header.fragment',
696                'sig_files': ['audio/pulse/pulse.sigs'],
697                'outfile_type': 'posix_stubs',
698                'stubs_filename_root': 'pulse_stubs',
699                'project_path': 'media/audio/pulse',
700                'intermediate_dir': '<(INTERMEDIATE_DIR)',
701                'output_root': '<(SHARED_INTERMEDIATE_DIR)/pulse',
702              },
703              'include_dirs': [
704                '<(output_root)',
705              ],
706              'actions': [
707                {
708                  'action_name': 'generate_stubs',
709                  'inputs': [
710                    '<(generate_stubs_script)',
711                    '<(extra_header)',
712                    '<@(sig_files)',
713                  ],
714                  'outputs': [
715                    '<(intermediate_dir)/<(stubs_filename_root).cc',
716                    '<(output_root)/<(project_path)/<(stubs_filename_root).h',
717                  ],
718                  'action': ['python',
719                             '<(generate_stubs_script)',
720                             '-i', '<(intermediate_dir)',
721                             '-o', '<(output_root)/<(project_path)',
722                             '-t', '<(outfile_type)',
723                             '-e', '<(extra_header)',
724                             '-s', '<(stubs_filename_root)',
725                             '-p', '<(project_path)',
726                             '<@(_inputs)',
727                  ],
728                  'process_outputs_as_sources': 1,
729                  'message': 'Generating Pulse stubs for dynamic loading.',
730                },
731              ],
732              'conditions': [
733                # Linux/Solaris need libdl for dlopen() and friends.
734                ['OS == "linux" or OS == "solaris"', {
735                  'link_settings': {
736                    'libraries': [
737                      '-ldl',
738                    ],
739                  },
740                }],
741              ],
742            }, {  # else: linux_link_pulseaudio==0
743              'link_settings': {
744                'ldflags': [
745                  '<!@(pkg-config --libs-only-L --libs-only-other libpulse)',
746                ],
747                'libraries': [
748                  '<!@(pkg-config --libs-only-l libpulse)',
749                ],
750              },
751            }],
752          ],
753        }, {  # else: use_pulseaudio==0
754          'sources!': [
755            'audio/pulse/audio_manager_pulse.cc',
756            'audio/pulse/audio_manager_pulse.h',
757            'audio/pulse/pulse_input.cc',
758            'audio/pulse/pulse_input.h',
759            'audio/pulse/pulse_output.cc',
760            'audio/pulse/pulse_output.h',
761            'audio/pulse/pulse_unified.cc',
762            'audio/pulse/pulse_unified.h',
763            'audio/pulse/pulse_util.cc',
764            'audio/pulse/pulse_util.h',
765          ],
766        }],
767        ['os_posix == 1', {
768          'sources!': [
769            'video/capture/video_capture_device_dummy.cc',
770            'video/capture/video_capture_device_dummy.h',
771          ],
772        }],
773        ['OS=="mac"', {
774          'link_settings': {
775            'libraries': [
776              '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework',
777              '$(SDKROOT)/System/Library/Frameworks/AudioUnit.framework',
778              '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework',
779              '$(SDKROOT)/System/Library/Frameworks/CoreVideo.framework',
780              '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework',
781              '$(SDKROOT)/System/Library/Frameworks/QTKit.framework',
782            ],
783          },
784        }],
785        ['OS=="win"', {
786          'sources!': [
787            'video/capture/video_capture_device_dummy.cc',
788            'video/capture/video_capture_device_dummy.h',
789          ],
790          'link_settings':  {
791            'libraries': [
792              '-lmf.lib',
793              '-lmfplat.lib',
794              '-lmfreadwrite.lib',
795              '-lmfuuid.lib',
796            ],
797          },
798          # Specify delayload for media.dll.
799          'msvs_settings': {
800            'VCLinkerTool': {
801              'DelayLoadDLLs': [
802                'mf.dll',
803                'mfplat.dll',
804                'mfreadwrite.dll',
805              ],
806            },
807          },
808          # Specify delayload for components that link with media.lib.
809          'all_dependent_settings': {
810            'msvs_settings': {
811              'VCLinkerTool': {
812                'DelayLoadDLLs': [
813                  'mf.dll',
814                  'mfplat.dll',
815                  'mfreadwrite.dll',
816                ],
817              },
818            },
819          },
820          # TODO(wolenetz): Fix size_t to int truncations in win64. See
821          # http://crbug.com/171009
822          'conditions': [
823            ['target_arch == "x64"', {
824              'msvs_disabled_warnings': [ 4267, ],
825            }],
826          ],
827        }],
828        ['proprietary_codecs==1 or branding=="Chrome"', {
829          'sources': [
830            'mp4/aac.cc',
831            'mp4/aac.h',
832            'mp4/avc.cc',
833            'mp4/avc.h',
834            'mp4/box_definitions.cc',
835            'mp4/box_definitions.h',
836            'mp4/box_reader.cc',
837            'mp4/box_reader.h',
838            'mp4/cenc.cc',
839            'mp4/cenc.h',
840            'mp4/es_descriptor.cc',
841            'mp4/es_descriptor.h',
842            'mp4/mp4_stream_parser.cc',
843            'mp4/mp4_stream_parser.h',
844            'mp4/offset_byte_queue.cc',
845            'mp4/offset_byte_queue.h',
846            'mp4/track_run_iterator.cc',
847            'mp4/track_run_iterator.h',
848          ],
849        }],
850        [ 'screen_capture_supported==0', {
851          'sources/': [
852            ['exclude', '^video/capture/screen/'],
853          ],
854        }],
855        [ 'screen_capture_supported==1 and (target_arch=="ia32" or target_arch=="x64")', {
856          'dependencies': [
857            'differ_block_sse2',
858          ],
859        }],
860        ['toolkit_uses_gtk==1', {
861          'dependencies': [
862            '../build/linux/system.gyp:gtk',
863          ],
864        }],
865        # ios check is necessary due to http://crbug.com/172682.
866        ['OS != "ios" and (target_arch == "ia32" or target_arch == "x64")', {
867          'dependencies': [
868            'media_sse',
869          ],
870        }],
871        ['google_tv == 1', {
872          'defines': [
873            'ENABLE_EAC3_PLAYBACK',
874          ],
875        }],
876      ],
877      'target_conditions': [
878        ['OS == "ios"', {
879          'sources/': [
880            # Pull in specific Mac files for iOS (which have been filtered out
881            # by file name rules).
882            ['include', '^audio/mac/audio_input_mac\\.'],
883          ],
884        }],
885      ],
886    },
887    {
888      'target_name': 'media_unittests',
889      'type': '<(gtest_target_type)',
890      'dependencies': [
891        'media',
892        'media_test_support',
893        '../base/base.gyp:base',
894        '../base/base.gyp:base_i18n',
895        '../base/base.gyp:test_support_base',
896        '../skia/skia.gyp:skia',
897        '../testing/gmock.gyp:gmock',
898        '../testing/gtest.gyp:gtest',
899        '../ui/ui.gyp:ui',
900      ],
901      'sources': [
902        'audio/async_socket_io_handler_unittest.cc',
903        'audio/audio_input_controller_unittest.cc',
904        'audio/audio_input_device_unittest.cc',
905        'audio/audio_input_unittest.cc',
906        'audio/audio_input_volume_unittest.cc',
907        'audio/audio_low_latency_input_output_unittest.cc',
908        'audio/audio_output_controller_unittest.cc',
909        'audio/audio_output_device_unittest.cc',
910        'audio/audio_output_proxy_unittest.cc',
911        'audio/audio_parameters_unittest.cc',
912        'audio/audio_silence_detector_unittest.cc',
913        'audio/cross_process_notification_unittest.cc',
914        'audio/fake_audio_consumer_unittest.cc',
915        'audio/ios/audio_manager_ios_unittest.cc',
916        'audio/linux/alsa_output_unittest.cc',
917        'audio/mac/audio_auhal_mac_unittest.cc',
918        'audio/mac/audio_device_listener_mac_unittest.cc',
919        'audio/mac/audio_low_latency_input_mac_unittest.cc',
920        'audio/simple_sources_unittest.cc',
921        'audio/virtual_audio_input_stream_unittest.cc',
922        'audio/virtual_audio_output_stream_unittest.cc',
923        'audio/win/audio_device_listener_win_unittest.cc',
924        'audio/win/audio_low_latency_input_win_unittest.cc',
925        'audio/win/audio_low_latency_output_win_unittest.cc',
926        'audio/win/audio_output_win_unittest.cc',
927        'audio/win/audio_unified_win_unittest.cc',
928        'audio/win/core_audio_util_win_unittest.cc',
929        'base/android/media_codec_bridge_unittest.cc',
930        'base/audio_bus_unittest.cc',
931        'base/audio_converter_unittest.cc',
932        'base/audio_fifo_unittest.cc',
933        'base/audio_hardware_config_unittest.cc',
934        'base/audio_hash_unittest.cc',
935        'base/audio_pull_fifo_unittest.cc',
936        'base/audio_renderer_mixer_input_unittest.cc',
937        'base/audio_renderer_mixer_unittest.cc',
938        'base/audio_splicer_unittest.cc',
939        'base/audio_timestamp_helper_unittest.cc',
940        'base/bind_to_loop_unittest.cc',
941        'base/bit_reader_unittest.cc',
942        'base/channel_mixer_unittest.cc',
943        'base/clock_unittest.cc',
944        'base/data_buffer_unittest.cc',
945        'base/decoder_buffer_queue_unittest.cc',
946        'base/decoder_buffer_unittest.cc',
947        'base/djb2_unittest.cc',
948        'base/gmock_callback_support_unittest.cc',
949        'base/multi_channel_resampler_unittest.cc',
950        'base/pipeline_unittest.cc',
951        'base/ranges_unittest.cc',
952        'base/run_all_unittests.cc',
953        'base/seekable_buffer_unittest.cc',
954        'base/sinc_resampler_unittest.cc',
955        'base/test_data_util.cc',
956        'base/test_data_util.h',
957        'base/vector_math_testing.h',
958        'base/vector_math_unittest.cc',
959        'base/video_frame_unittest.cc',
960        'base/video_util_unittest.cc',
961        'base/yuv_convert_unittest.cc',
962        'crypto/aes_decryptor_unittest.cc',
963        'ffmpeg/ffmpeg_common_unittest.cc',
964        'filters/audio_decoder_selector_unittest.cc',
965        'filters/audio_file_reader_unittest.cc',
966        'filters/audio_renderer_algorithm_unittest.cc',
967        'filters/audio_renderer_impl_unittest.cc',
968        'filters/blocking_url_protocol_unittest.cc',
969        'filters/chunk_demuxer_unittest.cc',
970        'filters/decrypting_audio_decoder_unittest.cc',
971        'filters/decrypting_demuxer_stream_unittest.cc',
972        'filters/decrypting_video_decoder_unittest.cc',
973        'filters/fake_demuxer_stream_unittest.cc',
974        'filters/ffmpeg_audio_decoder_unittest.cc',
975        'filters/ffmpeg_demuxer_unittest.cc',
976        'filters/ffmpeg_glue_unittest.cc',
977        'filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc',
978        'filters/ffmpeg_video_decoder_unittest.cc',
979        'filters/file_data_source_unittest.cc',
980        'filters/h264_to_annex_b_bitstream_converter_unittest.cc',
981        'filters/pipeline_integration_test.cc',
982        'filters/pipeline_integration_test_base.cc',
983        'filters/skcanvas_video_renderer_unittest.cc',
984        'filters/source_buffer_stream_unittest.cc',
985        'filters/video_decoder_selector_unittest.cc',
986        'filters/video_frame_stream_unittest.cc',
987        'filters/video_renderer_base_unittest.cc',
988        'video/capture/screen/differ_block_unittest.cc',
989        'video/capture/screen/differ_unittest.cc',
990        'video/capture/screen/shared_buffer_unittest.cc',
991        'video/capture/screen/screen_capture_device_unittest.cc',
992        'video/capture/screen/screen_capturer_helper_unittest.cc',
993        'video/capture/screen/screen_capturer_mac_unittest.cc',
994        'video/capture/screen/screen_capturer_unittest.cc',
995        'video/capture/video_capture_device_unittest.cc',
996        'webm/cluster_builder.cc',
997        'webm/cluster_builder.h',
998        'webm/webm_cluster_parser_unittest.cc',
999        'webm/webm_content_encodings_client_unittest.cc',
1000        'webm/webm_parser_unittest.cc',
1001      ],
1002      'conditions': [
1003        ['arm_neon == 1', {
1004          'defines': [
1005            'USE_NEON'
1006          ],
1007        }],
1008        ['OS != "ios"', {
1009          'dependencies': [
1010            'shared_memory_support',
1011            'yuv_convert',
1012          ],
1013        }],
1014        ['media_use_ffmpeg == 1', {
1015          'dependencies': [
1016            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
1017          ],
1018        }],
1019        ['os_posix==1 and OS!="mac" and OS!="ios"', {
1020          'conditions': [
1021            ['linux_use_tcmalloc==1', {
1022              'dependencies': [
1023                '../base/allocator/allocator.gyp:allocator',
1024              ],
1025            }],
1026          ],
1027        }],
1028        ['OS == "ios"', {
1029          'sources/': [
1030            ['exclude', '.*'],
1031            ['include', '^audio/audio_input_controller_unittest\\.cc$'],
1032            ['include', '^audio/audio_input_unittest\\.cc$'],
1033            ['include', '^audio/audio_parameters_unittest\\.cc$'],
1034            ['include', '^audio/ios/audio_manager_ios_unittest\\.cc$'],
1035            ['include', '^base/mock_reader\\.h$'],
1036            ['include', '^base/run_all_unittests\\.cc$'],
1037          ],
1038        }],
1039        ['OS=="android"', {
1040          'sources!': [
1041            'audio/audio_input_volume_unittest.cc',
1042            'base/test_data_util.cc',
1043            'base/test_data_util.h',
1044            'ffmpeg/ffmpeg_common_unittest.cc',
1045            'filters/audio_file_reader_unittest.cc',
1046            'filters/blocking_url_protocol_unittest.cc',
1047            'filters/chunk_demuxer_unittest.cc',
1048            'filters/ffmpeg_audio_decoder_unittest.cc',
1049            'filters/ffmpeg_demuxer_unittest.cc',
1050            'filters/ffmpeg_glue_unittest.cc',
1051            'filters/ffmpeg_h264_to_annex_b_bitstream_converter_unittest.cc',
1052            'filters/ffmpeg_video_decoder_unittest.cc',
1053            'filters/pipeline_integration_test.cc',
1054            'filters/pipeline_integration_test_base.cc',
1055            'mp4/mp4_stream_parser_unittest.cc',
1056            'webm/webm_cluster_parser_unittest.cc',
1057          ],
1058          'conditions': [
1059            ['gtest_target_type == "shared_library"', {
1060              'dependencies': [
1061                '../testing/android/native_test.gyp:native_test_native_code',
1062                'player_android',
1063              ],
1064            }],
1065          ],
1066        }],
1067        ['OS == "linux"', {
1068          'conditions': [
1069            ['use_cras == 1', {
1070              'sources': [
1071                'audio/cras/cras_input_unittest.cc',
1072                'audio/cras/cras_unified_unittest.cc',
1073              ],
1074              'defines': [
1075                'USE_CRAS',
1076              ],
1077            }],
1078          ],
1079        }],
1080        ['use_alsa==0', {
1081          'sources!': [
1082            'audio/linux/alsa_output_unittest.cc',
1083            'audio/audio_low_latency_input_output_unittest.cc',
1084          ],
1085        }],
1086        ['OS != "ios" and (target_arch=="ia32" or target_arch=="x64")', {
1087          'sources': [
1088            'base/simd/convert_rgb_to_yuv_unittest.cc',
1089          ],
1090          'dependencies': [
1091            'media_sse',
1092          ],
1093        }],
1094        ['screen_capture_supported == 0', {
1095          'sources/': [
1096            ['exclude', '^video/capture/screen/'],
1097          ],
1098        }],
1099        ['proprietary_codecs==1 or branding=="Chrome"', {
1100          'sources': [
1101            'mp4/aac_unittest.cc',
1102            'mp4/avc_unittest.cc',
1103            'mp4/box_reader_unittest.cc',
1104            'mp4/es_descriptor_unittest.cc',
1105            'mp4/mp4_stream_parser_unittest.cc',
1106            'mp4/offset_byte_queue_unittest.cc',
1107            'mp4/track_run_iterator_unittest.cc',
1108          ],
1109        }],
1110        # TODO(wolenetz): Fix size_t to int truncations in win64. See
1111        # http://crbug.com/171009
1112        ['OS=="win" and target_arch=="x64"', {
1113          'msvs_disabled_warnings': [ 4267, ],
1114        }],
1115      ],
1116    },
1117    {
1118      'target_name': 'media_test_support',
1119      'type': 'static_library',
1120      'dependencies': [
1121        'media',
1122        '../base/base.gyp:base',
1123        '../skia/skia.gyp:skia',
1124        '../testing/gmock.gyp:gmock',
1125        '../testing/gtest.gyp:gtest',
1126      ],
1127      'sources': [
1128        'audio/mock_audio_manager.cc',
1129        'audio/mock_audio_manager.h',
1130        'audio/test_audio_input_controller_factory.cc',
1131        'audio/test_audio_input_controller_factory.h',
1132        'base/fake_audio_render_callback.cc',
1133        'base/fake_audio_render_callback.h',
1134        'base/gmock_callback_support.h',
1135        'base/mock_audio_renderer_sink.cc',
1136        'base/mock_audio_renderer_sink.h',
1137        'base/mock_data_source_host.cc',
1138        'base/mock_data_source_host.h',
1139        'base/mock_demuxer_host.cc',
1140        'base/mock_demuxer_host.h',
1141        'base/mock_filters.cc',
1142        'base/mock_filters.h',
1143        'base/test_helpers.cc',
1144        'base/test_helpers.h',
1145        'video/capture/screen/screen_capturer_mock_objects.cc',
1146        'video/capture/screen/screen_capturer_mock_objects.h',
1147      ],
1148      'conditions': [
1149        [ 'screen_capture_supported == 0', {
1150          'sources/': [
1151            ['exclude', '^video/capture/screen/'],
1152          ],
1153        }],
1154      ],
1155    },
1156  ],
1157  'conditions': [
1158    ['OS != "ios" and target_arch != "arm"', {
1159      'targets': [
1160        {
1161          'target_name': 'yuv_convert_simd_x86',
1162          'type': 'static_library',
1163          'include_dirs': [
1164            '..',
1165          ],
1166          'sources': [
1167            'base/simd/convert_rgb_to_yuv_c.cc',
1168            'base/simd/convert_rgb_to_yuv_sse2.cc',
1169            'base/simd/convert_rgb_to_yuv_ssse3.asm',
1170            'base/simd/convert_rgb_to_yuv_ssse3.cc',
1171            'base/simd/convert_rgb_to_yuv_ssse3.inc',
1172            'base/simd/convert_yuv_to_rgb_c.cc',
1173            'base/simd/convert_yuv_to_rgb_mmx.asm',
1174            'base/simd/convert_yuv_to_rgb_mmx.inc',
1175            'base/simd/convert_yuv_to_rgb_sse.asm',
1176            'base/simd/convert_yuv_to_rgb_x86.cc',
1177            'base/simd/convert_yuva_to_argb_mmx.asm',
1178            'base/simd/convert_yuva_to_argb_mmx.inc',
1179            'base/simd/empty_register_state_mmx.asm',
1180            'base/simd/filter_yuv.h',
1181            'base/simd/filter_yuv_c.cc',
1182            'base/simd/filter_yuv_sse2.cc',
1183            'base/simd/linear_scale_yuv_to_rgb_mmx.asm',
1184            'base/simd/linear_scale_yuv_to_rgb_mmx.inc',
1185            'base/simd/linear_scale_yuv_to_rgb_sse.asm',
1186            'base/simd/scale_yuv_to_rgb_mmx.asm',
1187            'base/simd/scale_yuv_to_rgb_mmx.inc',
1188            'base/simd/scale_yuv_to_rgb_sse.asm',
1189            'base/simd/yuv_to_rgb_table.cc',
1190            'base/simd/yuv_to_rgb_table.h',
1191          ],
1192          'conditions': [
1193            # TODO(jschuh): Get MMX enabled on Win64. crbug.com/179657
1194            [ 'OS!="win" or target_arch=="ia32"', {
1195              'sources': [
1196                'base/simd/filter_yuv_mmx.cc',
1197              ],
1198            }],
1199            [ 'target_arch == "x64"', {
1200              # Source files optimized for X64 systems.
1201              'sources': [
1202                'base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm',
1203                'base/simd/scale_yuv_to_rgb_sse2_x64.asm',
1204              ],
1205              'variables': {
1206                'yasm_flags': [
1207                  '-DARCH_X86_64',
1208                ],
1209              },
1210            }],
1211            [ 'os_posix == 1 and OS != "mac" and OS != "android"', {
1212              'cflags': [
1213                '-msse2',
1214              ],
1215            }],
1216            [ 'OS == "mac"', {
1217              'configurations': {
1218                'Debug': {
1219                  'xcode_settings': {
1220                    # gcc on the mac builds horribly unoptimized sse code in
1221                    # debug mode. Since this is rarely going to be debugged,
1222                    # run with full optimizations in Debug as well as Release.
1223                    'GCC_OPTIMIZATION_LEVEL': '3',  # -O3
1224                   },
1225                 },
1226              },
1227              'variables': {
1228                'yasm_flags': [
1229                  '-DPREFIX',
1230                  '-DMACHO',
1231                ],
1232              },
1233            }],
1234            [ 'os_posix==1 and OS!="mac"', {
1235              'variables': {
1236                'conditions': [
1237                  [ 'target_arch=="ia32"', {
1238                    'yasm_flags': [
1239                      '-DX86_32',
1240                      '-DELF',
1241                    ],
1242                  }, {
1243                    'yasm_flags': [
1244                      '-DELF',
1245                      '-DPIC',
1246                    ],
1247                  }],
1248                ],
1249              },
1250            }],
1251          ],
1252          'variables': {
1253            'yasm_output_path': '<(SHARED_INTERMEDIATE_DIR)/media',
1254            'yasm_flags': [
1255              '-DCHROMIUM',
1256              # In addition to the same path as source asm, let yasm %include
1257              # search path be relative to src/ per Chromium policy.
1258              '-I..',
1259            ],
1260          },
1261          'msvs_2010_disable_uldi_when_referenced': 1,
1262          'includes': [
1263            '../third_party/yasm/yasm_compile.gypi',
1264          ],
1265        },
1266      ], # targets
1267    }],
1268    ['OS != "ios"', {
1269      'targets': [
1270        {
1271          # Minimal target for NaCl and other renderer side media clients which
1272          # only need to send audio data across the shared memory to the browser
1273          # process.
1274          'target_name': 'shared_memory_support',
1275          'type': '<(component)',
1276          'dependencies': [
1277            '../base/base.gyp:base',
1278          ],
1279          'defines': [
1280            'MEDIA_IMPLEMENTATION',
1281          ],
1282          'include_dirs': [
1283            '..',
1284          ],
1285          'includes': [
1286            'shared_memory_support.gypi',
1287          ],
1288          'sources': [
1289            '<@(shared_memory_support_sources)',
1290          ],
1291          'conditions': [
1292            [ 'target_arch == "ia32" or target_arch == "x64"', {
1293              'dependencies': [
1294                'media_sse',
1295              ],
1296            }],
1297            ['arm_neon == 1', {
1298              'defines': [
1299                'USE_NEON'
1300              ],
1301            }],
1302          ],
1303        },
1304        {
1305          'target_name': 'yuv_convert',
1306          'type': 'static_library',
1307          'include_dirs': [
1308            '..',
1309          ],
1310          'conditions': [
1311            [ 'target_arch == "ia32" or target_arch == "x64"', {
1312              'dependencies': [
1313                'yuv_convert_simd_x86',
1314              ],
1315            }],
1316            [ 'target_arch == "arm" or target_arch == "mipsel"', {
1317              'dependencies': [
1318                'yuv_convert_simd_c',
1319              ],
1320            }],
1321          ],
1322          'sources': [
1323            'base/yuv_convert.cc',
1324            'base/yuv_convert.h',
1325          ],
1326        },
1327        {
1328          'target_name': 'yuv_convert_simd_c',
1329          'type': 'static_library',
1330          'include_dirs': [
1331            '..',
1332          ],
1333          'sources': [
1334            'base/simd/convert_rgb_to_yuv.h',
1335            'base/simd/convert_rgb_to_yuv_c.cc',
1336            'base/simd/convert_yuv_to_rgb.h',
1337            'base/simd/convert_yuv_to_rgb_c.cc',
1338            'base/simd/filter_yuv.h',
1339            'base/simd/filter_yuv_c.cc',
1340            'base/simd/yuv_to_rgb_table.cc',
1341            'base/simd/yuv_to_rgb_table.h',
1342          ],
1343        },
1344        {
1345          'target_name': 'seek_tester',
1346          'type': 'executable',
1347          'dependencies': [
1348            'media',
1349            '../base/base.gyp:base',
1350          ],
1351          'sources': [
1352            'tools/seek_tester/seek_tester.cc',
1353          ],
1354        },
1355        {
1356          'target_name': 'demuxer_bench',
1357          'type': 'executable',
1358          'dependencies': [
1359            'media',
1360            '../base/base.gyp:base',
1361          ],
1362          'sources': [
1363            'tools/demuxer_bench/demuxer_bench.cc',
1364          ],
1365          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
1366          'msvs_disabled_warnings': [ 4267, ],
1367        },
1368      ],
1369    }],
1370    ['(OS == "win" or toolkit_uses_gtk == 1) and use_aura != 1', {
1371      'targets': [
1372        {
1373          'target_name': 'shader_bench',
1374          'type': 'executable',
1375          'dependencies': [
1376            'media',
1377            'yuv_convert',
1378            '../base/base.gyp:base',
1379            '../ui/gl/gl.gyp:gl',
1380            '../ui/ui.gyp:ui',
1381          ],
1382          'sources': [
1383            'tools/shader_bench/cpu_color_painter.cc',
1384            'tools/shader_bench/cpu_color_painter.h',
1385            'tools/shader_bench/gpu_color_painter.cc',
1386            'tools/shader_bench/gpu_color_painter.h',
1387            'tools/shader_bench/gpu_painter.cc',
1388            'tools/shader_bench/gpu_painter.h',
1389            'tools/shader_bench/painter.cc',
1390            'tools/shader_bench/painter.h',
1391            'tools/shader_bench/shader_bench.cc',
1392            'tools/shader_bench/window.cc',
1393            'tools/shader_bench/window.h',
1394          ],
1395          'conditions': [
1396            ['toolkit_uses_gtk == 1', {
1397              'dependencies': [
1398                '../build/linux/system.gyp:gtk',
1399              ],
1400              'sources': [
1401                'tools/shader_bench/window_linux.cc',
1402              ],
1403            }],
1404            ['OS=="win"', {
1405              'dependencies': [
1406                '../third_party/angle/src/build_angle.gyp:libEGL',
1407                '../third_party/angle/src/build_angle.gyp:libGLESv2',
1408              ],
1409              'sources': [
1410                'tools/shader_bench/window_win.cc',
1411              ],
1412            }],
1413          ],
1414          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
1415          'msvs_disabled_warnings': [ 4267, ],
1416        },
1417      ],
1418    }],
1419    ['use_x11 == 1', {
1420      'targets': [
1421        {
1422          'target_name': 'player_x11',
1423          'type': 'executable',
1424          'dependencies': [
1425            'media',
1426            'yuv_convert',
1427            '../base/base.gyp:base',
1428            '../ui/gl/gl.gyp:gl',
1429            '../ui/ui.gyp:ui',
1430          ],
1431          'link_settings': {
1432            'libraries': [
1433              '-ldl',
1434              '-lX11',
1435              '-lXrender',
1436              '-lXext',
1437            ],
1438          },
1439          'sources': [
1440            'tools/player_x11/data_source_logger.cc',
1441            'tools/player_x11/data_source_logger.h',
1442            'tools/player_x11/gl_video_renderer.cc',
1443            'tools/player_x11/gl_video_renderer.h',
1444            'tools/player_x11/player_x11.cc',
1445            'tools/player_x11/x11_video_renderer.cc',
1446            'tools/player_x11/x11_video_renderer.h',
1447          ],
1448        },
1449      ],
1450    }],
1451    # Special target to wrap a gtest_target_type==shared_library
1452    # media_unittests into an android apk for execution.
1453    ['OS == "android" and gtest_target_type == "shared_library"', {
1454      'targets': [
1455        {
1456          'target_name': 'media_unittests_apk',
1457          'type': 'none',
1458          'dependencies': [
1459            'media_java',
1460            'media_unittests',
1461          ],
1462          'variables': {
1463            'test_suite_name': 'media_unittests',
1464            'input_shlib_path': '<(SHARED_LIB_DIR)/<(SHARED_LIB_PREFIX)media_unittests<(SHARED_LIB_SUFFIX)',
1465          },
1466          'includes': [ '../build/apk_test.gypi' ],
1467        },
1468      ],
1469    }],
1470    ['OS == "android"', {
1471      'targets': [
1472        {
1473          'target_name': 'media_player_jni_headers',
1474          'type': 'none',
1475          'variables': {
1476            'jni_gen_package': 'media',
1477            'input_java_class': 'android/media/MediaPlayer.class',
1478          },
1479          'includes': [ '../build/jar_file_jni_generator.gypi' ],
1480        },
1481        {
1482          'target_name': 'media_android_jni_headers',
1483          'type': 'none',
1484          'dependencies': [
1485            'media_player_jni_headers',
1486          ],
1487          'sources': [
1488            'base/android/java/src/org/chromium/media/AudioManagerAndroid.java',
1489            'base/android/java/src/org/chromium/media/MediaPlayerBridge.java',
1490            'base/android/java/src/org/chromium/media/MediaPlayerListener.java',
1491            'base/android/java/src/org/chromium/media/WebAudioMediaCodecBridge.java',
1492          ],
1493          'variables': {
1494            'jni_gen_package': 'media',
1495          },
1496          'includes': [ '../build/jni_generator.gypi' ],
1497        },
1498        {
1499          'target_name': 'video_capture_android_jni_headers',
1500          'type': 'none',
1501          'sources': [
1502            'base/android/java/src/org/chromium/media/VideoCapture.java',
1503          ],
1504          'variables': {
1505            'jni_gen_package': 'media',
1506          },
1507          'includes': [ '../build/jni_generator.gypi' ],
1508        },
1509        {
1510          'target_name': 'media_codec_jni_headers',
1511          'type': 'none',
1512          'variables': {
1513            'jni_gen_package': 'media',
1514            'input_java_class': 'android/media/MediaCodec.class',
1515          },
1516          'includes': [ '../build/jar_file_jni_generator.gypi' ],
1517        },
1518        {
1519          'target_name': 'media_format_jni_headers',
1520          'type': 'none',
1521          'variables': {
1522            'jni_gen_package': 'media',
1523            'input_java_class': 'android/media/MediaFormat.class',
1524          },
1525          'includes': [ '../build/jar_file_jni_generator.gypi' ],
1526        },
1527        {
1528          'target_name': 'player_android',
1529          'type': 'static_library',
1530          'sources': [
1531            'base/android/media_codec_bridge.cc',
1532            'base/android/media_codec_bridge.h',
1533            'base/android/media_jni_registrar.cc',
1534            'base/android/media_jni_registrar.h',
1535            'base/android/media_player_android.cc',
1536            'base/android/media_player_android.h',
1537            'base/android/media_player_bridge.cc',
1538            'base/android/media_player_bridge.h',
1539            'base/android/media_player_listener.cc',
1540            'base/android/media_player_listener.h',
1541            'base/android/webaudio_media_codec_bridge.cc',
1542            'base/android/webaudio_media_codec_bridge.h',
1543            'base/android/webaudio_media_codec_info.h',
1544          ],
1545          'conditions': [
1546            ['google_tv == 1', {
1547              'sources': [
1548                'base/android/demuxer_stream_player_params.cc',
1549                'base/android/demuxer_stream_player_params.h',
1550              ],
1551            }],
1552          ],
1553          'dependencies': [
1554            '../base/base.gyp:base',
1555            'media_android_jni_headers',
1556            'media_codec_jni_headers',
1557            'media_format_jni_headers',
1558          ],
1559          'include_dirs': [
1560            '<(SHARED_INTERMEDIATE_DIR)/media',
1561          ],
1562        },
1563        {
1564          'target_name': 'media_java',
1565          'type': 'none',
1566          'dependencies': [
1567            '../base/base.gyp:base',
1568          ],
1569          'export_dependent_settings': [
1570            '../base/base.gyp:base',
1571          ],
1572          'variables': {
1573            'java_in_dir': 'base/android/java',
1574          },
1575          'includes': [ '../build/java.gypi' ],
1576        },
1577
1578      ],
1579    }],
1580    ['media_use_ffmpeg == 1', {
1581      'targets': [
1582        {
1583          'target_name': 'ffmpeg_unittests',
1584          'type': 'executable',
1585          'dependencies': [
1586            '../base/base.gyp:base',
1587            '../base/base.gyp:base_i18n',
1588            '../base/base.gyp:test_support_base',
1589            '../base/base.gyp:test_support_perf',
1590            '../testing/gtest.gyp:gtest',
1591            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
1592            'media',
1593            'media_test_support',
1594          ],
1595          'sources': [
1596            'ffmpeg/ffmpeg_unittest.cc',
1597          ],
1598          'conditions': [
1599            ['toolkit_uses_gtk == 1', {
1600              'dependencies': [
1601                # Needed for the following #include chain:
1602                #   base/run_all_unittests.cc
1603                #   ../base/test_suite.h
1604                #   gtk/gtk.h
1605                '../build/linux/system.gyp:gtk',
1606              ],
1607              'conditions': [
1608                ['linux_use_tcmalloc==1', {
1609                  'dependencies': [
1610                    '../base/allocator/allocator.gyp:allocator',
1611                  ],
1612                }],
1613              ],
1614            }],
1615          ],
1616        },
1617        {
1618          'target_name': 'ffmpeg_regression_tests',
1619          'type': 'executable',
1620          'dependencies': [
1621            '../base/base.gyp:test_support_base',
1622            '../testing/gmock.gyp:gmock',
1623            '../testing/gtest.gyp:gtest',
1624            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
1625            'media',
1626            'media_test_support',
1627          ],
1628          'sources': [
1629            'base/run_all_unittests.cc',
1630            'base/test_data_util.cc',
1631            'ffmpeg/ffmpeg_regression_tests.cc',
1632            'filters/pipeline_integration_test_base.cc',
1633          ],
1634          'conditions': [
1635            ['os_posix==1 and OS!="mac"', {
1636              'conditions': [
1637                ['linux_use_tcmalloc==1', {
1638                  'dependencies': [
1639                    '../base/allocator/allocator.gyp:allocator',
1640                  ],
1641                }],
1642              ],
1643            }],
1644          ],
1645        },
1646        {
1647          'target_name': 'ffmpeg_tests',
1648          'type': 'executable',
1649          'dependencies': [
1650            '../base/base.gyp:base',
1651            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
1652            'media',
1653          ],
1654          'sources': [
1655            'test/ffmpeg_tests/ffmpeg_tests.cc',
1656          ],
1657          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
1658          'msvs_disabled_warnings': [ 4267, ],
1659        },
1660        {
1661          'target_name': 'media_bench',
1662          'type': 'executable',
1663          'dependencies': [
1664            '../base/base.gyp:base',
1665            '../third_party/ffmpeg/ffmpeg.gyp:ffmpeg',
1666            'media',
1667          ],
1668          'sources': [
1669            'tools/media_bench/media_bench.cc',
1670          ],
1671          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
1672          'msvs_disabled_warnings': [ 4267, ],
1673        },
1674      ],
1675    }],
1676    [ 'screen_capture_supported==1 and (target_arch=="ia32" or target_arch=="x64")', {
1677      'targets': [
1678        {
1679          'target_name': 'differ_block_sse2',
1680          'type': 'static_library',
1681          'conditions': [
1682            [ 'os_posix == 1 and OS != "mac"', {
1683              'cflags': [
1684                '-msse2',
1685              ],
1686            }],
1687          ],
1688          'include_dirs': [
1689            '..',
1690          ],
1691          'sources': [
1692            'video/capture/screen/differ_block_sse2.cc',
1693            'video/capture/screen/differ_block_sse2.h',
1694          ],
1695        }, # end of target differ_block_sse2
1696      ],
1697    }],
1698    # ios check is necessary due to http://crbug.com/172682.
1699    ['OS != "ios" and (target_arch=="ia32" or target_arch=="x64")', {
1700      'targets': [
1701        {
1702          'target_name': 'media_sse',
1703          'type': 'static_library',
1704          'cflags': [
1705            '-msse',
1706          ],
1707          'include_dirs': [
1708            '..',
1709          ],
1710          'defines': [
1711            'MEDIA_IMPLEMENTATION',
1712          ],
1713          'sources': [
1714            'base/simd/sinc_resampler_sse.cc',
1715            'base/simd/vector_math_sse.cc',
1716          ],
1717        }, # end of target media_sse
1718      ],
1719    }],
1720  ],
1721}
1722