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