# Copyright 2016 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/features.gni") import("//build/config/ui.gni") import("//media/gpu/args.gni") import("//media/media_options.gni") import("//testing/test.gni") import("//tools/generate_stubs/rules.gni") buildflag_header("buildflags") { header = "buildflags.h" flags = [ "USE_VAAPI=$use_vaapi", "USE_V4L2_CODEC=$use_v4l2_codec", "USE_LIBV4L2=$use_v4lplugin", ] } component("gpu") { output_name = "media_gpu" # Only local test code, GPU-related IPC code in the media layer, and # media-related content code should access //media/gpu. visibility = [ "//chrome/gpu", "//components/arc/common:media", "//components/arc/video_accelerator", "//components/mirroring/service:mirroring_service", "//components/viz/service/main", "//content/gpu:*", "//content/renderer:*", "//media/gpu/ipc/*", "//media/gpu/vaapi/*", "//media/gpu/test/*", "//media/mojo/*", "//remoting/codec:encoder", ":*", ] if (is_mac) { # On Mac, content/common reaches into here to do some pre-sandbox # initialization. visibility += [ "//content/common" ] } defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "command_buffer_helper.cc", "command_buffer_helper.h", "fake_mjpeg_decode_accelerator.cc", "fake_mjpeg_decode_accelerator.h", "gles2_decoder_helper.cc", "gles2_decoder_helper.h", "gpu_jpeg_encode_accelerator_factory.cc", "gpu_jpeg_encode_accelerator_factory.h", "gpu_mjpeg_decode_accelerator_factory.cc", "gpu_mjpeg_decode_accelerator_factory.h", "gpu_video_accelerator_util.cc", "gpu_video_accelerator_util.h", "gpu_video_decode_accelerator_factory.cc", "gpu_video_decode_accelerator_factory.h", "gpu_video_encode_accelerator_factory.cc", "gpu_video_encode_accelerator_factory.h", ] public_deps = [ ":buildflags", ":common", ":image_processor", ":video_frame_mapper", "//base", "//gpu", "//media", "//third_party/mesa_headers", "//ui/gfx/geometry", ] deps = [ "//gpu/command_buffer/common:gles2_utils", "//gpu/command_buffer/service:gles2", "//gpu/ipc/service", "//third_party/libyuv", "//ui/base", "//ui/display/types", "//ui/gl", "//ui/platform_window", ] libs = [] ldflags = [] if (is_linux) { public_deps += [ "//media/gpu/linux" ] } if (is_mac) { public_deps += [ "//media/gpu/mac" ] } if (is_android) { sources += [ "android/android_video_decode_accelerator.cc", "android/android_video_decode_accelerator.h", "android/android_video_surface_chooser.cc", "android/android_video_surface_chooser.h", "android/android_video_surface_chooser_impl.cc", "android/android_video_surface_chooser_impl.h", "android/avda_codec_image.cc", "android/avda_codec_image.h", "android/avda_picture_buffer_manager.cc", "android/avda_picture_buffer_manager.h", "android/avda_shared_state.cc", "android/avda_shared_state.h", "android/avda_state_provider.h", "android/avda_surface_bundle.cc", "android/avda_surface_bundle.h", "android/codec_allocator.cc", "android/codec_allocator.h", "android/codec_image.cc", "android/codec_image.h", "android/codec_image_group.cc", "android/codec_image_group.h", "android/codec_wrapper.cc", "android/codec_wrapper.h", "android/device_info.cc", "android/device_info.h", "android/image_reader_gl_owner.cc", "android/image_reader_gl_owner.h", "android/media_codec_video_decoder.cc", "android/media_codec_video_decoder.h", "android/promotion_hint_aggregator.h", "android/promotion_hint_aggregator_impl.cc", "android/promotion_hint_aggregator_impl.h", "android/shared_image_video.cc", "android/shared_image_video.h", "android/surface_chooser_helper.cc", "android/surface_chooser_helper.h", "android/surface_texture_gl_owner.cc", "android/surface_texture_gl_owner.h", "android/texture_owner.cc", "android/texture_owner.h", "android/video_frame_factory.h", "android/video_frame_factory_impl.cc", "android/video_frame_factory_impl.h", ] libs += [ "android" ] deps += [ "//gpu/ipc/common:android_image_reader_utils", # TODO(crbug.com/789435): This can be removed once CdmManager is removed. "//gpu/ipc/common:ipc_common_sources", "//media/mojo:buildflags", "//services/service_manager/public/cpp:cpp", "//ui/gl:gl_jni_headers", ] if (enable_webrtc) { deps += [ "//third_party/libyuv" ] sources += [ "android/android_video_encode_accelerator.cc", "android/android_video_encode_accelerator.h", ] } # TODO(crbug.com/789435): This is needed for AVDA to access the CDM # directly. Remove this dependency after VDAs are also running as part of # the mojo media service. See http://crbug.com/522298 if (mojo_media_host == "gpu") { deps += [ "//media/cdm:cdm_manager" ] } } if (use_v4l2_codec) { public_deps += [ "//media/gpu/v4l2" ] } if (use_vaapi) { public_deps += [ "//media/gpu/vaapi" ] } if (is_win) { sources += [ "windows/d3d11_h264_accelerator.cc", "windows/d3d11_h264_accelerator.h", "windows/d3d11_picture_buffer.cc", "windows/d3d11_picture_buffer.h", "windows/d3d11_video_context_wrapper.cc", "windows/d3d11_video_context_wrapper.h", "windows/d3d11_video_decoder.cc", "windows/d3d11_video_decoder.h", "windows/d3d11_video_decoder_client.h", "windows/d3d11_video_decoder_impl.cc", "windows/d3d11_video_decoder_impl.h", "windows/d3d11_vp9_accelerator.cc", "windows/d3d11_vp9_accelerator.h", "windows/d3d11_vp9_picture.cc", "windows/d3d11_vp9_picture.h", "windows/dxva_picture_buffer_win.cc", "windows/dxva_picture_buffer_win.h", "windows/dxva_video_decode_accelerator_win.cc", "windows/dxva_video_decode_accelerator_win.h", "windows/init_guid.cc", "windows/media_foundation_video_encode_accelerator_win.cc", "windows/media_foundation_video_encode_accelerator_win.h", ] configs += [ # TODO(https://crbug.com/167187): Fix size_t to int truncations. "//build/config/compiler:no_size_t_to_int_warning", "//third_party/khronos:khronos_headers", ] public_deps += [ "//media/base/win:media_foundation_util" ] deps += [ "//third_party/angle:includes", "//ui/display", ] libs += [ "d3d9.lib", "d3d11.lib", "dxva2.lib", "strmiids.lib", "mf.lib", "mfplat.lib", "mfuuid.lib", ] ldflags += [ "/DELAYLOAD:d3d9.dll", "/DELAYLOAD:d3d11.dll", "/DELAYLOAD:dxva2.dll", "/DELAYLOAD:mf.dll", "/DELAYLOAD:mfplat.dll", ] if (enable_library_cdms) { sources += [ "windows/d3d11_cdm_proxy.cc", "windows/d3d11_cdm_proxy.h", "windows/d3d11_decryptor.cc", "windows/d3d11_decryptor.h", ] } } if (use_ozone) { deps += [ "//ui/ozone" ] } } source_set("common") { defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "accelerated_video_decoder.h", "codec_picture.cc", "codec_picture.h", "format_utils.cc", "format_utils.h", "gpu_video_decode_accelerator_helpers.h", "gpu_video_encode_accelerator_helpers.cc", "gpu_video_encode_accelerator_helpers.h", "h264_decoder.cc", "h264_decoder.h", "h264_dpb.cc", "h264_dpb.h", "macros.h", "vp9_decoder.cc", "vp9_decoder.h", "vp9_picture.cc", "vp9_picture.h", "vp9_reference_frame_vector.cc", "vp9_reference_frame_vector.h", ] if (use_v4l2_codec || use_vaapi) { sources += [ "decode_surface_handler.h", "vp8_decoder.cc", "vp8_decoder.h", "vp8_picture.cc", "vp8_picture.h", "vp8_reference_frame_vector.cc", "vp8_reference_frame_vector.h", ] } deps = [ ":buildflags", "//base", "//media", "//ui/gfx:buffer_types", "//ui/gfx:memory_buffer", "//ui/gfx/geometry", ] } source_set("image_processor") { defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "image_processor_factory.cc", "libyuv_image_processor.cc", "libyuv_image_processor.h", ] public_deps = [ ":image_processor_common", ] deps = [ "//third_party/libyuv", "//ui/gl", ] if (use_v4l2_codec) { deps += [ "//media/gpu/v4l2" ] } if (is_linux) { deps += [ ":video_frame_mapper" ] } } source_set("image_processor_common") { defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "image_processor.cc", "image_processor.h", "image_processor_factory.h", ] public_deps = [ ":buildflags", ":common", "//base", "//media", "//ui/gfx/geometry", ] } source_set("video_frame_mapper") { defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "video_frame_mapper_factory.cc", ] public_deps = [ ":video_frame_mapper_common", ] deps = [] # generic_dmabuf_video_frame_mapper if (is_linux) { deps += [ "//media/gpu/linux:video_frame_mapper" ] } # vaapi_dmabuf_video_frame_mapper if (use_vaapi) { deps += [ "//media/gpu/vaapi" ] } } source_set("video_frame_mapper_common") { defines = [ "MEDIA_GPU_IMPLEMENTATION" ] sources = [ "video_frame_mapper.h", "video_frame_mapper_factory.h", ] public_deps = [ ":buildflags", "//base", "//media", ] } # TODO(watk): Run this on bots. http://crbug.com/461437 if (is_win || is_android || use_v4l2_codec || use_vaapi) { test("video_decode_accelerator_unittest") { data = [ "//media/test/data/", ] deps = [ ":common", ":gpu", "//base", "//base/test:test_support", "//media:test_support", "//mojo/core/embedder", "//testing/gtest", "//ui/base", "//ui/display/manager", "//ui/gfx", "//ui/gfx:test_support", "//ui/gfx/geometry", "//ui/gl", "//ui/gl:test_support", "//ui/gl/init", ] configs += [ "//third_party/khronos:khronos_headers" ] if (is_win || is_chromeos || use_v4l2_codec) { sources = [ "test/fake_video_decode_accelerator.cc", "test/fake_video_decode_accelerator.h", "video_decode_accelerator_unittest.cc", ] deps += [ "test:decode_helpers", "test:frame_file_writer", "test:frame_validator", "//mojo/core/embedder", "//ui/display", "//ui/display/types", "//ui/platform_window", ] } if (is_android) { deps += [ ":android_video_decode_accelerator_unittests", "//media/base/android:media_java", "//media/test:run_all_unittests", "//ui/android:ui_java", ] } if (is_win) { # TODO(https://crbug.com/167187): Fix size_t to int truncations. configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] if (!use_qt) { deps += [ "//third_party/angle:libEGL", "//third_party/angle:libGLESv2", ] } } if (use_x11) { configs += [ "//build/config/linux:x11" ] deps += [ "//ui/gfx/x" ] } if (use_ozone) { deps += [ "//ui/ozone" ] } } } source_set("android_video_decode_accelerator_unittests") { if (is_android) { testonly = true sources = [ "android/android_video_decode_accelerator_unittest.cc", "android/android_video_surface_chooser_impl_unittest.cc", "android/codec_allocator_unittest.cc", "android/codec_image_group_unittest.cc", "android/codec_image_unittest.cc", "android/codec_wrapper_unittest.cc", "android/fake_codec_allocator.cc", "android/fake_codec_allocator.h", "android/image_reader_gl_owner_unittest.cc", "android/media_codec_video_decoder_unittest.cc", "android/mock_abstract_texture.cc", "android/mock_abstract_texture.h", "android/mock_android_video_surface_chooser.cc", "android/mock_android_video_surface_chooser.h", "android/mock_device_info.cc", "android/mock_device_info.h", "android/mock_promotion_hint_aggregator.cc", "android/mock_promotion_hint_aggregator.h", "android/mock_texture_owner.cc", "android/mock_texture_owner.h", "android/promotion_hint_aggregator_impl_unittest.cc", "android/surface_chooser_helper_unittest.cc", "android/surface_texture_gl_owner_unittest.cc", "android/video_frame_factory_impl_unittest.cc", ] deps = [ ":common", ":gpu", "//base/test:test_support", "//gpu:test_support", "//media", "//media:test_support", "//testing/gmock", "//testing/gtest", "//ui/gl", "//ui/gl/init", ] } } if (use_v4l2_codec || use_vaapi || is_mac || is_win) { test("video_encode_accelerator_unittest") { deps = [ "test:helpers", "//base", "//base/test:test_support", "//media:test_support", "//media/gpu", "//mojo/core/embedder", "//testing/gtest", "//ui/base", "//ui/gfx", "//ui/gfx:test_support", "//ui/gfx/geometry", "//ui/gl", "//ui/gl:test_support", ] configs += [ "//third_party/libyuv:libyuv_config" ] sources = [ "video_encode_accelerator_unittest.cc", ] if (use_x11) { deps += [ "//ui/gfx/x" ] } if (use_ozone) { deps += [ "//ui/ozone" ] } } } if (use_v4l2_codec || use_vaapi) { test("jpeg_encode_accelerator_unittest") { deps = [ "test:helpers", "//base", "//base/test:test_support", "//media:test_support", "//media/gpu", "//mojo/core/embedder", "//testing/gtest", "//third_party:jpeg", "//third_party/libyuv", "//ui/base", "//ui/gfx", "//ui/gfx:test_support", "//ui/gfx/geometry", "//ui/gl", "//ui/gl:test_support", ] configs += [ "//third_party/libyuv:libyuv_config" ] sources = [ "jpeg_encode_accelerator_unittest.cc", ] if (use_x11) { deps += [ "//ui/gfx/x" ] } if (use_ozone) { deps += [ "//ui/ozone" ] } } } if (is_chromeos || is_linux) { test("jpeg_decode_accelerator_unittest") { deps = [ "test:helpers", "//base", "//media:test_support", "//media/gpu", "//media/mojo/services", "//mojo/core/embedder", "//testing/gtest", "//third_party/libyuv", "//ui/base", "//ui/gfx", "//ui/gfx:test_support", "//ui/gfx/geometry", "//ui/gl", "//ui/gl:test_support", ] configs += [ "//third_party/libyuv:libyuv_config" ] sources = [ "jpeg_decode_accelerator_unittest.cc", ] data = [ "//media/test/data/peach_pi-1280x720.jpg", "//media/test/data/peach_pi-40x23.jpg", "//media/test/data/peach_pi-41x22.jpg", "//media/test/data/peach_pi-41x23.jpg", ] if (use_vaapi) { deps += [ "//media/gpu/vaapi:jpeg_decoder_unit_test" ] data += [ "//media/test/data/pixel-1280x720.jpg" ] } if (use_x11) { deps += [ "//ui/gfx/x" ] } if (use_ozone) { deps += [ "//ui/ozone" ] } } } static_library("test_support") { visibility = [ "//media:test_support" ] testonly = true sources = [ "test/fake_command_buffer_helper.cc", "test/fake_command_buffer_helper.h", ] configs += [ "//media:media_config" ] deps = [ ":gpu", ] public_deps = [ "//base", "//media", ] } source_set("unit_tests") { testonly = true deps = [ "//base", "//base/test:test_support", "//media:test_support", "//media/gpu", "//media/gpu/ipc/service:unit_tests", "//testing/gmock", "//testing/gtest", ] sources = [ "h264_decoder_unittest.cc", ] if (use_vaapi) { deps += [ "//media/gpu/vaapi:unit_test" ] } if (use_v4l2_codec) { deps += [ "//media/gpu/v4l2:unit_test" ] } if (use_v4l2_codec || use_vaapi) { sources += [ "vp8_decoder_unittest.cc" ] } if (is_win && enable_library_cdms) { sources += [ "windows/d3d11_cdm_proxy_unittest.cc", "windows/d3d11_decryptor_unittest.cc", "windows/d3d11_video_decoder_unittest.cc", ] libs = [ "dxguid.lib" ] } } test("video_decode_accelerator_tests") { sources = [ "video_decode_accelerator_tests.cc", ] data = [ "//media/test/data/", ] deps = [ ":buildflags", "test:frame_file_writer", "test:frame_validator", "test:helpers", "test:video_player", "test:video_player_test_environment", "test:video_player_thumbnail_renderer", "//media:test_support", "//testing/gtest", ] } test("video_decode_accelerator_perf_tests") { sources = [ "video_decode_accelerator_perf_tests.cc", ] data = [ "//media/test/data/", ] deps = [ ":buildflags", "test:video_player", "test:video_player_test_environment", "//media:test_support", "//testing/gtest", ] } test("image_processor_test") { sources = [ "image_processor_test.cc", ] deps = [ ":buildflags", ":gpu", "test:frame_validator", "test:helpers", "test:image_processor", "test:render_helpers", "//base/test:test_support", "//media:test_support", "//mojo/core/embedder", "//testing/gtest", ] }