123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486 |
- # Copyright 2014 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import("//build/buildflag_header.gni")
- import("//build/config/android/config.gni")
- import("//build/config/arm.gni")
- import("//build/config/chromecast_build.gni")
- import("//build/config/features.gni")
- import("//build/config/linux/pkg_config.gni")
- import("//build/config/ui.gni")
- import("//media/media_options.gni")
- import("//testing/libfuzzer/fuzzer_test.gni")
- import("//testing/test.gni")
- import("//third_party/ffmpeg/ffmpeg_options.gni")
- if (enable_library_cdms) {
- import("//media/cdm/library_cdm/cdm_paths.gni")
- }
- buildflag_header("media_buildflags") {
- header = "media_buildflags.h"
- flags = [
- "ALTERNATE_CDM_STORAGE_ID_KEY=\"$alternate_cdm_storage_id_key\"",
- "CHROME_WIDE_ECHO_CANCELLATION=$chrome_wide_echo_cancellation_supported",
- "ENABLE_PLATFORM_AC3_EAC3_AUDIO=$enable_platform_ac3_eac3_audio",
- "ENABLE_CAST_AUDIO_RENDERER=$enable_cast_audio_renderer",
- "ENABLE_DAV1D_DECODER=$enable_dav1d_decoder",
- "ENABLE_AV1_DECODER=$enable_av1_decoder",
- "ENABLE_PLATFORM_DOLBY_VISION=$enable_platform_dolby_vision",
- "ENABLE_PLATFORM_ENCRYPTED_DOLBY_VISION=$enable_platform_encrypted_dolby_vision",
- "ENABLE_FFMPEG=$media_use_ffmpeg",
- "ENABLE_FFMPEG_VIDEO_DECODERS=$enable_ffmpeg_video_decoders",
- "ENABLE_PLATFORM_HEVC=$enable_platform_hevc",
- "ENABLE_HEVC_PARSER_AND_HW_DECODER=$enable_hevc_parser_and_hw_decoder",
- "ENABLE_HLS_SAMPLE_AES=$enable_hls_sample_aes",
- "ENABLE_HLS_DEMUXER=$enable_hls_demuxer",
- "ENABLE_LIBGAV1_DECODER=$enable_libgav1_decoder",
- "ENABLE_LIBAOM=$enable_libaom",
- "ENABLE_LIBRARY_CDMS=$enable_library_cdms",
- "ENABLE_LIBVPX=$media_use_libvpx",
- "ENABLE_LOGGING_OVERRIDE=$enable_logging_override",
- "ENABLE_MEDIA_DRM_STORAGE=$enable_media_drm_storage",
- "ENABLE_MEDIA_REMOTING=$enable_media_remoting",
- "ENABLE_MEDIA_REMOTING_RPC=$enable_media_remoting_rpc",
- "ENABLE_OPENH264=$media_use_openh264",
- "ENABLE_PLATFORM_MPEG_H_AUDIO=$enable_platform_mpeg_h_audio",
- "ENABLE_MSE_MPEG2TS_STREAM_PARSER=$enable_mse_mpeg2ts_stream_parser",
- "USE_ARC_PROTECTED_MEDIA=$use_arc_protected_media",
- "USE_CHROMEOS_MEDIA_ACCELERATION=$use_vaapi||$use_v4l2_codec",
- "USE_CHROMEOS_PROTECTED_AV1=$use_chromeos_protected_av1",
- "USE_CHROMEOS_PROTECTED_MEDIA=$use_chromeos_protected_media",
- "USE_PROPRIETARY_CODECS=$proprietary_codecs",
- "ENABLE_PLATFORM_DTS_AUDIO=$enable_platform_dts_audio",
- ]
- if (enable_library_cdms) {
- flags += [
- "CDM_PLATFORM_SPECIFIC_PATH=\"$cdm_platform_specific_path\"",
- "ENABLE_CDM_HOST_VERIFICATION=$enable_cdm_host_verification",
- "ENABLE_CDM_STORAGE_ID=$enable_cdm_storage_id",
- ]
- }
- }
- if (proprietary_codecs && media_use_ffmpeg) {
- assert(
- ffmpeg_branding != "Chromium",
- "proprietary codecs and ffmpeg_branding set to Chromium are incompatible")
- }
- # Common configuration for targets in the media directory; these must not be
- # exported since things like USE_NEON and USE_CRAS have different meanings
- # elsewhere in the code base.
- config("media_config") {
- defines = []
- if (current_cpu == "arm64" || (current_cpu == "arm" && arm_use_neon)) {
- defines += [ "USE_NEON" ]
- }
- if (use_pulseaudio) {
- defines += [ "USE_PULSEAUDIO" ]
- if (!link_pulseaudio) {
- defines += [ "DLOPEN_PULSEAUDIO" ]
- }
- }
- if (use_cras) {
- defines += [ "USE_CRAS" ]
- }
- }
- # Internal grouping of the configs necessary to support sub-folders having their
- # own BUILD.gn files; only targets which roll up into the "media" target should
- # include this config. I.e., not "test_support" or "unit_tests" targets.
- #
- # Without these configs having individual sub-folders take a //media/base DEP
- # (or others) can yield incorrectly imported and exported symbols on Windows:
- #
- # fatal error LNK1169: one or more multiply defined symbols found.
- #
- config("subcomponent_config") {
- visibility = media_subcomponent_deps
- if (is_mac) {
- visibility += [ "//media/base/mac" ]
- }
- defines = [ "IS_MEDIA_IMPL" ]
- configs = [
- ":media_config",
- "//build/config/compiler:wexit_time_destructors",
- ]
- }
- component("media") {
- libs = []
- deps = [
- "//base",
- "//base:i18n",
- "//base/third_party/dynamic_annotations",
- "//cc/paint",
- "//gpu/command_buffer/client:gles2_interface",
- "//gpu/command_buffer/common",
- "//third_party/libyuv",
- "//ui/events:events_base",
- "//ui/gfx",
- "//ui/gfx/geometry",
- "//ui/gl:gl",
- "//url",
- ]
- public_configs = [ "//third_party/libwebm:libwebm_config" ]
- public_deps = media_subcomponent_deps
- public_deps += [
- ":media_buildflags",
- ":shared_memory_support",
- "//ui/gfx:color_space",
- ]
- # This must be included here since it actually depends on //media/base.
- if (is_apple) {
- public_deps += [ "//media/base/mac" ]
- }
- if (use_ozone) {
- deps += [ "//ui/ozone" ]
- }
- }
- # Note: This can't be a static_library since it does not have any sources.
- source_set("test_support") {
- testonly = true
- public_deps = [
- ":media",
- "//media/audio:test_support",
- "//media/base:test_support",
- "//media/base/android:test_support",
- "//media/filters:test_support",
- "//media/formats:test_support",
- "//media/renderers:test_support",
- "//media/video:test_support",
- ]
- }
- # Contains tests for all targets in the "media" folder.
- # TODO(xhwang): Move mojo/capture/remoting tests here where applicable.
- test("media_unittests") {
- use_xvfb = use_xvfb_in_this_config
- deps = [
- "//media/audio:unit_tests",
- "//media/base:unit_tests",
- "//media/capabilities:unit_tests",
- "//media/cdm:unit_tests",
- "//media/device_monitors:unit_tests",
- "//media/filters:unit_tests",
- "//media/formats:unit_tests",
- "//media/gpu:unit_tests",
- "//media/learning:unit_tests",
- "//media/mojo:unit_tests",
- "//media/muxers:unit_tests",
- "//media/parsers:unit_tests",
- "//media/renderers:unit_tests",
- "//media/test:pipeline_integration_tests",
- "//media/test:run_all_unittests",
- "//media/video:unit_tests",
- "//media/webrtc:unit_tests",
- ]
- data = [
- "test/data/",
- "formats/mp4/h264_annex_b_fuzz_corpus/",
- ]
- data_deps = [ "//testing/buildbot/filters:media_unittests_filters" ]
- if (is_android && enable_chrome_android_internal) {
- data_deps += [ "//clank/build/bot/filters:media_unittests_filters" ]
- }
- if (media_use_ffmpeg) {
- deps += [ "//media/ffmpeg:unit_tests" ]
- }
- if (is_android) {
- deps += [
- # The test needs the java dependencies to add the java classes for their
- # native counterparts to the test apk.
- "//gpu/command_buffer/service:android_texture_owner_unittests",
- "//media/base/android:media_java",
- "//media/base/android:unit_tests",
- "//media/gpu:android_video_decode_accelerator_unittests",
- "//ui/android:ui_java",
- ]
- }
- if (is_fuchsia) {
- deps += [
- "//media/fuchsia/cdm/service:unittests",
- "//media/fuchsia/video:unittests",
- ]
- use_cfv1 = false
- # PaintCanvasVideoRendererWithGLTest.* uses SwiftShader, which generates
- # machine code.
- test_runner_shard = "//build/config/fuchsia/test/elf_test_ambient_exec_runner.shard.test-cml"
- additional_manifest_fragments = [
- "//build/config/fuchsia/test/audio_output.shard.test-cml",
- "//build/config/fuchsia/test/platform_video_codecs.shard.test-cml",
- "//third_party/fuchsia-sdk/sdk/pkg/vulkan/client.shard.cml",
- ]
- }
- if (enable_media_remoting) {
- deps += [ "//media/remoting:media_remoting_tests" ]
- }
- # The test needs OPUS_FIXED_POINT conditional define.
- configs += [ "//third_party/opus:opus_config" ]
- }
- test("media_perftests") {
- configs += [ ":media_config" ]
- deps = [
- ":test_support",
- "//base/test:test_support",
- "//media/base:perftests",
- "//media/filters:perftests",
- "//media/test:pipeline_integration_perftests",
- "//testing/gmock",
- "//testing/gtest",
- "//testing/perf",
- "//third_party/widevine/cdm:headers",
- "//ui/gfx:test_support",
- ]
- if (media_use_ffmpeg) {
- # Direct dependency required to inherit config.
- deps += [ "//third_party/ffmpeg" ]
- }
- # This target should not require the Chrome executable to run.
- assert_no_deps = [ "//chrome" ]
- data = [ "test/data/" ]
- data_deps = [
- # Needed for isolate script to execute.
- "//testing:run_perf_test",
- ]
- }
- # The audio subset of media_unittests. This target exists for running only the
- # audio tests on the GPU bots (which have audio hardware).
- test("audio_unittests") {
- deps = [
- ":test_support",
- "//base/test:test_support",
- "//media/audio:unit_tests",
- "//media/test:run_all_unittests",
- ]
- if (is_android) {
- deps += [
- # The test needs the java dependencies to add the java classes for their
- # native counterparts to the test apk.
- "//media/base/android:media_java",
- "//ui/android:ui_java",
- ]
- }
- if (is_fuchsia) {
- use_cfv1 = false
- additional_manifest_fragments =
- [ "//build/config/fuchsia/test/audio_output.shard.test-cml" ]
- }
- }
- # Note: Most external components should just depend on //media unless they
- # specifically need this pared own target (NaCl, PPAPI, etc). Internal targets
- # should just depend on //media/base which will propagate this target to them.
- component("shared_memory_support") {
- sources = [
- "base/audio_bus.cc",
- "base/audio_bus.h",
- "base/audio_codecs.h",
- "base/audio_latency.cc",
- "base/audio_latency.h",
- "base/audio_parameters.cc",
- "base/audio_parameters.h",
- "base/audio_point.cc",
- "base/audio_point.h",
- "base/audio_sample_types.h",
- "base/channel_layout.cc",
- "base/channel_layout.h",
- "base/limits.h",
- "base/media_export.h",
- "base/media_shmem_export.h",
- "base/sample_format.cc",
- "base/sample_format.h",
- "base/vector_math.cc",
- "base/vector_math.h",
- "base/vector_math_testing.h",
- "base/video_types.cc",
- "base/video_types.h",
- ]
- if (is_mac) {
- # These need to be included here because audio_latency.cc depends on them.
- sources += [
- "base/mac/audio_latency_mac.cc",
- "base/mac/audio_latency_mac.h",
- ]
- }
- # Do not use "subcomponent_config" here since these files are in their own
- # component target and thus can't share the standard export macros.
- configs += [ ":media_config" ]
- defines = [ "MEDIA_SHMEM_IMPLEMENTATION" ]
- if (!is_debug) {
- configs -= [ "//build/config/compiler:default_optimization" ]
- configs += [ "//build/config/compiler:optimize_max" ]
- }
- deps = [
- "//base",
- "//build:chromeos_buildflags",
- "//ui/gfx/geometry",
- ]
- }
- # TODO(watk): Refactor tests that could be made to run on Android. See
- # http://crbug.com/570762
- if (media_use_ffmpeg && !is_android) {
- test("ffmpeg_regression_tests") {
- configs += [ "//media:media_config" ]
- deps = [
- ":test_support",
- "//base/test:test_support",
- "//media/ffmpeg:ffmpeg_regression_tests",
- "//media/test:pipeline_integration_tests",
- "//media/test:run_all_unittests",
- "//testing/gmock",
- "//testing/gtest",
- "//ui/gfx:test_support",
- "//ui/gfx/geometry",
- ]
- }
- }
- if (proprietary_codecs) {
- fuzzer_test("media_cenc_utils_fuzzer") {
- sources = [ "cdm/cenc_utils_fuzzertest.cc" ]
- deps = [ ":media" ]
- }
- }
- fuzzer_test("media_vp9_parser_fuzzer") {
- sources = [ "filters/vp9_parser_fuzzertest.cc" ]
- deps = [
- ":test_support",
- "//base",
- ]
- libfuzzer_options = [ "max_len = 400000" ]
- }
- fuzzer_test("media_vp9_parser_encrypted_fuzzer") {
- sources = [ "filters/vp9_parser_encrypted_fuzzertest.cc" ]
- deps = [
- ":test_support",
- "//base",
- "//base/test:test_support",
- ]
- seed_corpus = "//media/test/data"
- }
- fuzzer_test("media_vpx_video_decoder_fuzzer") {
- sources = [ "filters/vpx_video_decoder_fuzzertest.cc" ]
- deps = [
- ":media",
- "//base",
- "//base/test:test_support",
- ]
- libfuzzer_options = [ "max_len = 400000" ]
- seed_corpus = "//media/test/data"
- }
- fuzzer_test("media_webm_muxer_fuzzer") {
- sources = [ "muxers/webm_muxer_fuzzertest.cc" ]
- deps = [
- ":media",
- "//base",
- "//third_party/libwebm",
- ]
- }
- fuzzer_test("cbcs_decryptor_fuzzer") {
- sources = [ "cdm/cbcs_decryptor_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- "//crypto",
- ]
- }
- fuzzer_test("cenc_decryptor_fuzzer") {
- sources = [ "cdm/cenc_decryptor_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- "//crypto",
- ]
- }
- fuzzer_test("json_web_key_fuzzer") {
- sources = [ "cdm/json_web_key_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- }
- if (proprietary_codecs) {
- fuzzer_test("media_mp4_avcc_parser_fuzzer") {
- sources = [ "formats/mp4/mp4_avcc_parser_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- }
- fuzzer_test("media_mp4_box_reader_fuzzer") {
- sources = [ "formats/mp4/mp4_box_reader_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- libfuzzer_options = [ "max_len=500" ]
- dict = "test/mp4.dict"
- }
- }
- if (enable_mse_mpeg2ts_stream_parser) {
- fuzzer_test("media_es_parser_adts_fuzzer") {
- sources = [ "formats/mp2t/es_parser_adts_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- }
- fuzzer_test("media_es_parser_h264_fuzzer") {
- sources = [ "formats/mp2t/es_parser_h264_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- }
- fuzzer_test("media_es_parser_mpeg1audio_fuzzer") {
- sources = [ "formats/mp2t/es_parser_mpeg1audio_fuzzer.cc" ]
- deps = [
- ":media",
- "//base",
- ]
- }
- }
|