BUILD.gn revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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
5import("//build/config/android/config.gni")
6import("//build/config/arm.gni")
7import("//build/config/ui.gni")
8import("//build/config/linux/pkg_config.gni")
9import("//media/media_options.gni")
10
11source_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    "djb2.cc",
81    "djb2.h",
82    "filter_collection.cc",
83    "filter_collection.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    "sample_format.cc",
103    "sample_format.h",
104    "scoped_histogram_timer.h",
105    "seekable_buffer.cc",
106    "seekable_buffer.h",
107    "serial_runner.cc",
108    "serial_runner.h",
109    "simd/convert_rgb_to_yuv.h",
110    "simd/convert_rgb_to_yuv_c.cc",
111    "simd/convert_yuv_to_rgb.h",
112    "simd/convert_yuv_to_rgb_c.cc",
113    "simd/filter_yuv.h",
114    "simd/filter_yuv_c.cc",
115    "simd/yuv_to_rgb_table.cc",
116    "simd/yuv_to_rgb_table.h",
117    "sinc_resampler.cc",
118    "sinc_resampler.h",
119    "stream_parser.cc",
120    "stream_parser.h",
121    "stream_parser_buffer.cc",
122    "stream_parser_buffer.h",
123    "text_cue.cc",
124    "text_cue.h",
125    "text_ranges.cc",
126    "text_ranges.h",
127    "text_renderer.cc",
128    "text_renderer.h",
129    "text_track.h",
130    "text_track_config.cc",
131    "text_track_config.h",
132    "time_delta_interpolator.cc",
133    "time_delta_interpolator.h",
134    "time_source.h",
135    "user_input_monitor.cc",
136    "user_input_monitor.h",
137    "video_decoder.cc",
138    "video_decoder.h",
139    "video_decoder_config.cc",
140    "video_decoder_config.h",
141    "video_frame.cc",
142    "video_frame.h",
143    "video_frame_pool.cc",
144    "video_frame_pool.h",
145    "video_renderer.cc",
146    "video_renderer.h",
147    "video_rotation.h",
148    "video_util.cc",
149    "video_util.h",
150    "wall_clock_time_source.cc",
151    "wall_clock_time_source.h",
152    "yuv_convert.cc",
153    "yuv_convert.h",
154  ]
155  defines = []
156  deps = [ "//skia" ]
157  libs = []
158  configs += [ "//media:media_config" ]
159
160  if (media_use_ffmpeg) {
161    sources += [
162      "audio_video_metadata_extractor.cc",
163      "audio_video_metadata_extractor.h",
164      "container_names.cc",
165      "container_names.h",
166      "media_file_checker.cc",
167      "media_file_checker.h",
168    ]
169    deps += [ "//third_party/ffmpeg" ]
170  }
171
172  if (enable_browser_cdms) {
173    sources += [
174      "browser_cdm.cc",
175      "browser_cdm.h",
176      "browser_cdm_factory.h",
177    ]
178  }
179
180  if (is_android) {
181    sources += [ "media_stub.cc" ]
182  } else if (is_win) {
183    sources += [ "media_win.cc" ]
184  } else if (is_posix) {
185    sources += [ "media_posix.cc" ]
186  }
187
188  if (is_linux && use_x11) {
189    configs += [
190      "//build/config/linux:x11",
191      "//build/config/linux:xext",
192  # TODO(ajwong): Why does xent get a separate thing in //build/config/linux:BUILD.gn
193  #         "//build/config/linux:xdamage",
194  #         "//build/config/linux:xfixes",
195  #         "//build/config/linux:xtst",
196    ]
197    sources += [ "user_input_monitor_linux.cc" ]
198  } else if (is_mac) {
199    sources += [ "user_input_monitor_mac.cc" ]
200  } else if (is_win) {
201    sources += [ "user_input_monitor_win.cc" ]
202  } else {
203    defines += [ "DISABLE_USER_INPUT_MONITOR" ]
204  }
205
206  if (cpu_arch == "x86" || cpu_arch == "x64") {
207    sources += [ "simd/convert_yuv_to_rgb_x86.cc" ]
208    deps += [
209      ":media_yasm",
210      ":media_mmx",
211      ":media_sse2",
212    ]
213  }
214
215  if (is_linux || is_win) {
216    sources += [
217      "keyboard_event_counter.cc",
218      "keyboard_event_counter.h",
219    ]
220  }
221}
222
223source_set("test_support") {
224  sources = [
225    "fake_audio_render_callback.cc",
226    "fake_audio_render_callback.h",
227    "fake_audio_renderer_sink.cc",
228    "fake_audio_renderer_sink.h",
229    "fake_text_track_stream.cc",
230    "fake_text_track_stream.h",
231    "gmock_callback_support.h",
232    "mock_audio_renderer_sink.cc",
233    "mock_audio_renderer_sink.h",
234    "mock_demuxer_host.cc",
235    "mock_demuxer_host.h",
236    "mock_filters.cc",
237    "mock_filters.h",
238    "test_data_util.cc",
239    "test_data_util.h",
240    "test_helpers.cc",
241    "test_helpers.h",
242  ]
243  configs += [ "//media:media_config" ]
244  deps = [ "//testing/gmock" ]
245}
246
247source_set("unittests") {
248  sources = [
249    "audio_block_fifo_unittest.cc",
250    "audio_buffer_converter_unittest.cc",
251    "audio_buffer_unittest.cc",
252    "audio_buffer_queue_unittest.cc",
253    "audio_bus_unittest.cc",
254    "audio_converter_unittest.cc",
255    "audio_discard_helper_unittest.cc",
256    "audio_fifo_unittest.cc",
257    "audio_hardware_config_unittest.cc",
258    "audio_hash_unittest.cc",
259    "audio_pull_fifo_unittest.cc",
260    "audio_renderer_mixer_input_unittest.cc",
261    "audio_renderer_mixer_unittest.cc",
262    "audio_splicer_unittest.cc",
263    "audio_timestamp_helper_unittest.cc",
264    "bind_to_current_loop_unittest.cc",
265    "bit_reader_unittest.cc",
266    "callback_holder.h",
267    "callback_holder_unittest.cc",
268    "channel_mixer_unittest.cc",
269    "data_buffer_unittest.cc",
270    "decoder_buffer_queue_unittest.cc",
271    "decoder_buffer_unittest.cc",
272    "djb2_unittest.cc",
273    "gmock_callback_support_unittest.cc",
274    "multi_channel_resampler_unittest.cc",
275    "pipeline_unittest.cc",
276    "ranges_unittest.cc",
277    "run_all_unittests.cc",
278    "scoped_histogram_timer_unittest.cc",
279    "serial_runner_unittest.cc",
280    "seekable_buffer_unittest.cc",
281    "sinc_resampler_unittest.cc",
282    "stream_parser_unittest.cc",
283    "text_ranges_unittest.cc",
284    "text_renderer_unittest.cc",
285    "user_input_monitor_unittest.cc",
286    "vector_math_testing.h",
287    "vector_math_unittest.cc",
288    "video_frame_unittest.cc",
289    "video_frame_pool_unittest.cc",
290    "video_util_unittest.cc",
291    "wall_clock_time_source_unittest.cc",
292    "yuv_convert_unittest.cc",
293  ]
294  configs += [ "//media:media_config" ]
295  deps = [
296    ":base",
297    ":test_support",
298    "//skia",
299    "//testing/gmock",
300    "//testing/gtest",
301  ]
302
303  if (media_use_ffmpeg) {
304    sources += [
305      "audio_video_metadata_extractor_unittest.cc",
306      "media_file_checker_unittest.cc",
307    ]
308  }
309
310  if (!is_android) {
311    sources += [
312      "container_names_unittest.cc",
313    ]
314  } else {
315    deps += [ "//ui/gl" ]
316  }
317
318  if (cpu_arch == "x86" || cpu_arch == "x64") {
319    sources += [ "simd/convert_rgb_to_yuv_unittest.cc" ]
320  }
321}
322
323source_set("perftests") {
324  sources = [
325    "audio_bus_perftest.cc",
326    "audio_converter_perftest.cc",
327    "run_all_perftests.cc",
328    "sinc_resampler_perftest.cc",
329    "vector_math_perftest.cc",
330    "yuv_convert_perftest.cc",
331  ]
332  configs += [ "//media:media_config" ]
333  deps = [
334    ":base",
335    ":test_support",
336    "//testing/gmock",
337    "//testing/gtest",
338  ]
339
340  if (media_use_ffmpeg) {
341    sources += [
342      "demuxer_perftest.cc",
343    ]
344  }
345
346  if (is_android) {
347    deps += [ "//ui/gl"]
348  }
349}
350
351if (cpu_arch == "x86" || cpu_arch == "x64") {
352  source_set("media_mmx") {
353    sources = [ "simd/filter_yuv_mmx.cc" ]
354    configs += [ "//media:media_config" ]
355    if (!is_win) {
356      cflags = [ "-mmmx" ]
357    }
358  }
359
360  source_set("media_sse2") {
361    sources = [
362      "simd/convert_rgb_to_yuv_sse2.cc",
363      "simd/convert_rgb_to_yuv_ssse3.cc",
364      "simd/filter_yuv_sse2.cc",
365    ]
366    configs += [ "//media:media_config" ]
367    if (!is_win) {
368      cflags = [ "-msse2" ]
369    }
370  }
371
372  import("//third_party/yasm/yasm_assemble.gni")
373  yasm_assemble("media_yasm") {
374    sources = [
375      "simd/convert_rgb_to_yuv_ssse3.asm",
376      "simd/convert_yuv_to_rgb_mmx.asm",
377      "simd/convert_yuv_to_rgb_sse.asm",
378      "simd/convert_yuva_to_argb_mmx.asm",
379      "simd/empty_register_state_mmx.asm",
380      "simd/linear_scale_yuv_to_rgb_mmx.asm",
381      "simd/linear_scale_yuv_to_rgb_sse.asm",
382      "simd/scale_yuv_to_rgb_mmx.asm",
383      "simd/scale_yuv_to_rgb_sse.asm",
384    ]
385
386    # TODO(ajwong): Only export if shared_library build...
387    yasm_flags = [
388      "-DCHROMIUM",
389      "-DEXPORT_SYMBOLS",
390      # In addition to the same path as source asm, let yasm %include
391      # search path be relative to src/ per Chromium policy.
392      "-I", rebase_path("..", root_build_dir),
393    ]
394
395    inputs = [
396      "//third_party/x86inc/x86inc.asm",
397      "simd/convert_rgb_to_yuv_ssse3.inc",
398      "simd/convert_yuv_to_rgb_mmx.inc",
399      "simd/convert_yuva_to_argb_mmx.inc",
400      "simd/linear_scale_yuv_to_rgb_mmx.inc",
401      "simd/media_export.asm",
402      "simd/scale_yuv_to_rgb_mmx.inc",
403    ]
404
405    if (cpu_arch == "x86") {
406      yasm_flags += [ "-DARCH_X86_32" ]
407    } else if (cpu_arch == "x64") {
408      yasm_flags += [ "-DARCH_X86_64" ]
409      sources += [
410        "simd/linear_scale_yuv_to_rgb_mmx_x64.asm",
411        "simd/scale_yuv_to_rgb_sse2_x64.asm",
412      ]
413    }
414
415    if (is_mac || is_ios) {
416      yasm_flags += [
417        "-DPREFIX",
418        "-DMACHO",
419      ]
420    } else {
421      if (is_posix) {
422        yasm_flags += [ "-DELF" ]
423        if (cpu_arch == "x64") {
424        # TODO(ajwong): Why isn't this true in mac?
425          yasm_flags += [ "-DPIC" ]
426        }
427      }
428    }
429  }
430}
431