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    "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.
229config("base_for_cast_ios_dependent_config") {
230  defines = [ "MEDIA_FOR_CAST_IOS" ]
231}
232
233source_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
242source_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
267source_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
344source_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
373if (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}
444