Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / media / base / BUILD.gn
1 # Copyright 2014 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 import("//build/config/android/config.gni")
6 import("//build/config/arm.gni")
7 import("//build/config/ui.gni")
8 import("//build/config/linux/pkg_config.gni")
9 import("//media/media_options.gni")
10
11 source_set("base") {
12   visibility = [ "//media/*" ]
13   sources = [
14     "audio_block_fifo.cc",
15     "audio_block_fifo.h",
16     "audio_buffer.cc",
17     "audio_buffer.h",
18     "audio_buffer_queue.cc",
19     "audio_buffer_queue.h",
20     "audio_capturer_source.h",
21     "audio_buffer_converter.cc",
22     "audio_buffer_converter.h",
23     "audio_converter.cc",
24     "audio_converter.h",
25     "audio_decoder.cc",
26     "audio_decoder.h",
27     "audio_decoder_config.cc",
28     "audio_decoder_config.h",
29     "audio_discard_helper.cc",
30     "audio_discard_helper.h",
31     "audio_fifo.cc",
32     "audio_fifo.h",
33     "audio_hardware_config.cc",
34     "audio_hardware_config.h",
35     "audio_hash.cc",
36     "audio_hash.h",
37     "audio_pull_fifo.cc",
38     "audio_pull_fifo.h",
39     "audio_renderer.cc",
40     "audio_renderer.h",
41     "audio_renderer_mixer.cc",
42     "audio_renderer_mixer.h",
43     "audio_renderer_mixer_input.cc",
44     "audio_renderer_mixer_input.h",
45     "audio_renderer_sink.h",
46     "audio_splicer.cc",
47     "audio_splicer.h",
48     "audio_timestamp_helper.cc",
49     "audio_timestamp_helper.h",
50     "bind_to_current_loop.h",
51     "bit_reader.cc",
52     "bit_reader.h",
53     "bit_reader_core.cc",
54     "bit_reader_core.h",
55     "bitstream_buffer.h",
56     "buffering_state.h",
57     "buffers.h",
58     "byte_queue.cc",
59     "byte_queue.h",
60     "cdm_callback_promise.cc",
61     "cdm_callback_promise.h",
62     "cdm_factory.cc",
63     "cdm_factory.h",
64     "cdm_promise.cc",
65     "cdm_promise.h",
66     "channel_mixer.cc",
67     "channel_mixer.h",
68     "channel_mixing_matrix.cc",
69     "channel_mixing_matrix.h",
70     "clock.h",
71     "data_buffer.cc",
72     "data_buffer.h",
73     "data_source.cc",
74     "data_source.h",
75     "decoder_buffer.cc",
76     "decoder_buffer.h",
77     "decoder_buffer_queue.cc",
78     "decoder_buffer_queue.h",
79     "decrypt_config.cc",
80     "decrypt_config.h",
81     "decryptor.cc",
82     "decryptor.h",
83     "demuxer.cc",
84     "demuxer.h",
85     "demuxer_stream.cc",
86     "demuxer_stream.h",
87     "demuxer_stream_provider.cc",
88     "demuxer_stream_provider.h",
89     "djb2.cc",
90     "djb2.h",
91     "eme_constants.h",
92     "key_system_info.cc",
93     "key_system_info.h",
94     "media.cc",
95     "media.h",
96     "media_keys.cc",
97     "media_keys.h",
98     "media_log.cc",
99     "media_log.h",
100     "media_log_event.h",
101     "media_switches.cc",
102     "media_switches.h",
103     "multi_channel_resampler.cc",
104     "multi_channel_resampler.h",
105     "pipeline.cc",
106     "pipeline.h",
107     "pipeline_status.h",
108     "player_tracker.cc",
109     "player_tracker.h",
110     "ranges.cc",
111     "ranges.h",
112     "renderer.cc",
113     "renderer.h",
114     "sample_format.cc",
115     "sample_format.h",
116     "scoped_histogram_timer.h",
117     "seekable_buffer.cc",
118     "seekable_buffer.h",
119     "serial_runner.cc",
120     "serial_runner.h",
121     "simd/convert_rgb_to_yuv.h",
122     "simd/convert_rgb_to_yuv_c.cc",
123     "simd/convert_yuv_to_rgb.h",
124     "simd/convert_yuv_to_rgb_c.cc",
125     "simd/filter_yuv.h",
126     "simd/filter_yuv_c.cc",
127     "simd/yuv_to_rgb_table.cc",
128     "simd/yuv_to_rgb_table.h",
129     "sinc_resampler.cc",
130     "sinc_resampler.h",
131     "stream_parser.cc",
132     "stream_parser.h",
133     "stream_parser_buffer.cc",
134     "stream_parser_buffer.h",
135     "text_cue.cc",
136     "text_cue.h",
137     "text_ranges.cc",
138     "text_ranges.h",
139     "text_renderer.cc",
140     "text_renderer.h",
141     "text_track.h",
142     "text_track_config.cc",
143     "text_track_config.h",
144     "time_delta_interpolator.cc",
145     "time_delta_interpolator.h",
146     "time_source.h",
147     "user_input_monitor.cc",
148     "user_input_monitor.h",
149     "video_decoder.cc",
150     "video_decoder.h",
151     "video_decoder_config.cc",
152     "video_decoder_config.h",
153     "video_frame.cc",
154     "video_frame.h",
155     "video_frame_pool.cc",
156     "video_frame_pool.h",
157     "video_renderer.cc",
158     "video_renderer.h",
159     "video_rotation.h",
160     "video_util.cc",
161     "video_util.h",
162     "wall_clock_time_source.cc",
163     "wall_clock_time_source.h",
164     "yuv_convert.cc",
165     "yuv_convert.h",
166   ]
167   defines = []
168   deps = [ "//skia" ]
169   libs = []
170   configs += [ "//media:media_config" ]
171
172   if (media_use_ffmpeg) {
173     sources += [
174       "audio_video_metadata_extractor.cc",
175       "audio_video_metadata_extractor.h",
176       "container_names.cc",
177       "container_names.h",
178       "media_file_checker.cc",
179       "media_file_checker.h",
180     ]
181     deps += [ "//third_party/ffmpeg" ]
182   }
183
184   if (enable_browser_cdms) {
185     sources += [
186       "browser_cdm.cc",
187       "browser_cdm.h",
188       "browser_cdm_factory.h",
189     ]
190   }
191
192   if (is_android) {
193     sources += [ "media_stub.cc" ]
194   } else if (is_win) {
195     sources += [ "media_win.cc" ]
196   } else if (is_posix) {
197     sources += [ "media_posix.cc" ]
198   }
199
200   if (is_linux && use_x11) {
201     configs += [
202       "//build/config/linux:x11",
203       "//build/config/linux:xext",
204   # TODO(ajwong): Why does xent get a separate thing in //build/config/linux:BUILD.gn
205   #         "//build/config/linux:xdamage",
206   #         "//build/config/linux:xfixes",
207   #         "//build/config/linux:xtst",
208     ]
209     sources += [ "user_input_monitor_linux.cc" ]
210     deps += [
211       "//ui/events:events_base",
212       "//ui/gfx/x",
213     ]
214   } else if (is_mac) {
215     sources += [ "user_input_monitor_mac.cc" ]
216   } else if (is_win) {
217     sources += [ "user_input_monitor_win.cc" ]
218   } else {
219     defines += [ "DISABLE_USER_INPUT_MONITOR" ]
220   }
221
222   if (cpu_arch == "x86" || cpu_arch == "x64") {
223     sources += [ "simd/convert_yuv_to_rgb_x86.cc" ]
224     deps += [
225       ":media_yasm",
226       ":media_sse2",
227     ]
228   }
229
230   if (is_linux || is_win) {
231     sources += [
232       "keyboard_event_counter.cc",
233       "keyboard_event_counter.h",
234     ]
235   }
236 }
237
238 # Minimal media component for media/cast on iOS.
239 config("base_for_cast_ios_dependent_config") {
240   defines = [ "MEDIA_FOR_CAST_IOS" ]
241 }
242
243 source_set("base_for_cast_ios") {
244   sources = [
245     "video_frame.cc",
246     "video_frame.h",
247   ]
248   configs += [ "//media:media_config" ]
249   all_dependent_configs = [ ":base_for_cast_ios_dependent_config" ]
250 }
251
252 source_set("test_support") {
253   testonly = true
254   sources = [
255     "fake_audio_render_callback.cc",
256     "fake_audio_render_callback.h",
257     "fake_audio_renderer_sink.cc",
258     "fake_audio_renderer_sink.h",
259     "fake_text_track_stream.cc",
260     "fake_text_track_stream.h",
261     "gmock_callback_support.h",
262     "mock_audio_renderer_sink.cc",
263     "mock_audio_renderer_sink.h",
264     "mock_demuxer_host.cc",
265     "mock_demuxer_host.h",
266     "mock_filters.cc",
267     "mock_filters.h",
268     "test_data_util.cc",
269     "test_data_util.h",
270     "test_helpers.cc",
271     "test_helpers.h",
272   ]
273   configs += [ "//media:media_config" ]
274   deps = [ "//testing/gmock" ]
275 }
276
277 source_set("unittests") {
278   testonly = true
279   sources = [
280     "audio_block_fifo_unittest.cc",
281     "audio_buffer_converter_unittest.cc",
282     "audio_buffer_unittest.cc",
283     "audio_buffer_queue_unittest.cc",
284     "audio_bus_unittest.cc",
285     "audio_converter_unittest.cc",
286     "audio_discard_helper_unittest.cc",
287     "audio_fifo_unittest.cc",
288     "audio_hardware_config_unittest.cc",
289     "audio_hash_unittest.cc",
290     "audio_pull_fifo_unittest.cc",
291     "audio_renderer_mixer_input_unittest.cc",
292     "audio_renderer_mixer_unittest.cc",
293     "audio_splicer_unittest.cc",
294     "audio_timestamp_helper_unittest.cc",
295     "bind_to_current_loop_unittest.cc",
296     "bit_reader_unittest.cc",
297     "callback_holder.h",
298     "callback_holder_unittest.cc",
299     "channel_mixer_unittest.cc",
300     "channel_mixing_matrix_unittest.cc",
301     "data_buffer_unittest.cc",
302     "decoder_buffer_queue_unittest.cc",
303     "decoder_buffer_unittest.cc",
304     "djb2_unittest.cc",
305     "gmock_callback_support_unittest.cc",
306     "multi_channel_resampler_unittest.cc",
307     "pipeline_unittest.cc",
308     "ranges_unittest.cc",
309     "run_all_unittests.cc",
310     "scoped_histogram_timer_unittest.cc",
311     "serial_runner_unittest.cc",
312     "seekable_buffer_unittest.cc",
313     "sinc_resampler_unittest.cc",
314     "stream_parser_unittest.cc",
315     "text_ranges_unittest.cc",
316     "text_renderer_unittest.cc",
317     "user_input_monitor_unittest.cc",
318     "vector_math_testing.h",
319     "vector_math_unittest.cc",
320     "video_frame_unittest.cc",
321     "video_frame_pool_unittest.cc",
322     "video_util_unittest.cc",
323     "wall_clock_time_source_unittest.cc",
324     "yuv_convert_unittest.cc",
325   ]
326   configs += [ "//media:media_config" ]
327   deps = [
328     ":base",
329     ":test_support",
330     "//skia",
331     "//testing/gmock",
332     "//testing/gtest",
333   ]
334
335   if (media_use_ffmpeg) {
336     sources += [
337       "audio_video_metadata_extractor_unittest.cc",
338       "media_file_checker_unittest.cc",
339     ]
340   }
341
342   if (!is_android) {
343     sources += [
344       "container_names_unittest.cc",
345     ]
346   } else {
347     deps += [ "//ui/gl" ]
348   }
349
350   if (cpu_arch == "x86" || cpu_arch == "x64") {
351     sources += [ "simd/convert_rgb_to_yuv_unittest.cc" ]
352   }
353 }
354
355 source_set("perftests") {
356   testonly = true
357   sources = [
358     "audio_bus_perftest.cc",
359     "audio_converter_perftest.cc",
360     "run_all_perftests.cc",
361     "sinc_resampler_perftest.cc",
362     "vector_math_perftest.cc",
363     "yuv_convert_perftest.cc",
364   ]
365   configs += [ "//media:media_config" ]
366   deps = [
367     ":base",
368     ":test_support",
369     "//testing/gmock",
370     "//testing/gtest",
371   ]
372
373   if (media_use_ffmpeg) {
374     sources += [
375       "demuxer_perftest.cc",
376     ]
377   }
378
379   if (is_android) {
380     deps += [ "//ui/gl"]
381   }
382 }
383
384 if (cpu_arch == "x86" || cpu_arch == "x64") {
385   source_set("media_sse2") {
386     sources = [
387       "simd/convert_rgb_to_yuv_sse2.cc",
388       "simd/convert_rgb_to_yuv_ssse3.cc",
389       "simd/filter_yuv_sse2.cc",
390     ]
391     configs += [ "//media:media_config" ]
392     if (!is_win) {
393       cflags = [ "-msse2" ]
394     }
395   }
396
397   import("//third_party/yasm/yasm_assemble.gni")
398   yasm_assemble("media_yasm") {
399     sources = [
400       "simd/convert_rgb_to_yuv_ssse3.asm",
401       "simd/convert_yuv_to_rgb_sse.asm",
402       "simd/convert_yuva_to_argb_mmx.asm",
403       "simd/empty_register_state_mmx.asm",
404       "simd/linear_scale_yuv_to_rgb_mmx.asm",
405       "simd/linear_scale_yuv_to_rgb_sse.asm",
406       "simd/scale_yuv_to_rgb_mmx.asm",
407       "simd/scale_yuv_to_rgb_sse.asm",
408     ]
409
410     # TODO(ajwong): Only export if shared_library build...
411     yasm_flags = [
412       "-DCHROMIUM",
413       "-DEXPORT_SYMBOLS",
414       # In addition to the same path as source asm, let yasm %include
415       # search path be relative to src/ per Chromium policy.
416       "-I", rebase_path("..", root_build_dir),
417     ]
418
419     inputs = [
420       "//third_party/x86inc/x86inc.asm",
421       "simd/convert_rgb_to_yuv_ssse3.inc",
422       "simd/convert_yuv_to_rgb_mmx.inc",
423       "simd/convert_yuva_to_argb_mmx.inc",
424       "simd/linear_scale_yuv_to_rgb_mmx.inc",
425       "simd/media_export.asm",
426       "simd/scale_yuv_to_rgb_mmx.inc",
427     ]
428
429     if (cpu_arch == "x86") {
430       yasm_flags += [ "-DARCH_X86_32" ]
431     } else if (cpu_arch == "x64") {
432       yasm_flags += [ "-DARCH_X86_64" ]
433       sources += [
434         "simd/linear_scale_yuv_to_rgb_mmx_x64.asm",
435         "simd/scale_yuv_to_rgb_sse2_x64.asm",
436       ]
437     }
438
439     if (is_mac || is_ios) {
440       yasm_flags += [
441         "-DPREFIX",
442         "-DMACHO",
443       ]
444     } else {
445       if (is_posix) {
446         yasm_flags += [ "-DELF" ]
447         if (cpu_arch == "x64") {
448         # TODO(ajwong): Why isn't this true in mac?
449           yasm_flags += [ "-DPIC" ]
450         }
451       }
452     }
453   }
454 }