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 } 444