diff --git a/BUILD.gn b/BUILD.gn index 866b0405007bca..7903e89d45f530 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -791,7 +791,7 @@ group("gn_mojo_targets") { deps = [ "//ipc/mojo:ipc_mojo_perftests", "//media/mojo:tests", - "//media/mojo/services:cdm_service", + "//media/mojo/services", "//mojo:tests", ] } diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 7c513a000cdb73..d8f94969f9e72c 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn @@ -940,7 +940,7 @@ source_set("browser") { ] deps += [ "//media/mojo/interfaces" ] if (mojo_media_host == "browser") { - deps += [ "//media/mojo/services:application_factory" ] + deps += [ "//media/mojo/services" ] } } diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 49e88a6af36059..b107415b66d30d 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -310,7 +310,7 @@ #endif #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) -#include "media/mojo/services/mojo_media_application_factory.h" +#include "media/mojo/services/mojo_media_application_factory.h" // nogncheck #endif using base::FileDescriptor; diff --git a/chromecast/browser/media/BUILD.gn b/chromecast/browser/media/BUILD.gn index 401e9a2d618df1..73c812f436149f 100644 --- a/chromecast/browser/media/BUILD.gn +++ b/chromecast/browser/media/BUILD.gn @@ -32,7 +32,7 @@ source_set("media") { if (mojo_media_host == "browser") { public_deps = [ "//media/mojo/interfaces", - "//media/mojo/services:application", + "//media/mojo/services", "//services/shell/public/cpp", ] } diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn index 1b3aa771f486dc..593136eebcc7ff 100644 --- a/content/gpu/BUILD.gn +++ b/content/gpu/BUILD.gn @@ -57,7 +57,6 @@ source_set("gpu_sources") { "//ipc", "//media/gpu", "//media/gpu/ipc/service", - "//media/mojo/services:application_factory", "//services/shell/public/interfaces", "//skia", "//ui/events/ipc", @@ -67,7 +66,7 @@ source_set("gpu_sources") { ] if (mojo_media_host == "gpu") { - deps += [ "//media/mojo/services:application_factory" ] + deps += [ "//media/mojo/services" ] if (is_android) { deps += [ "//media/base/android" ] } diff --git a/content/gpu/gpu_process_control_impl.cc b/content/gpu/gpu_process_control_impl.cc index 0ecc58b6c5817a..832ae7d6367066 100644 --- a/content/gpu/gpu_process_control_impl.cc +++ b/content/gpu/gpu_process_control_impl.cc @@ -8,7 +8,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "content/public/common/content_client.h" -#include "media/mojo/services/mojo_media_application_factory.h" +#include "media/mojo/services/mojo_media_application_factory.h" // nogncheck #if defined(OS_ANDROID) #include "media/base/android/media_client_android.h" #endif diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn index dc04ca39ab0211..bf7ee55c3cc90e 100644 --- a/content/shell/BUILD.gn +++ b/content/shell/BUILD.gn @@ -233,7 +233,6 @@ static_library("content_shell_lib") { "//gpu", "//ipc", "//media", - "//media/mojo/services:application_factory", "//net", "//net:net_resources", "//skia", @@ -266,7 +265,7 @@ static_library("content_shell_lib") { ] } if (mojo_media_host == "browser") { - deps += [ "//media/mojo/services:application_factory" ] + deps += [ "//media/mojo/services" ] } if (is_win) { diff --git a/content/shell/browser/shell_content_browser_client.cc b/content/shell/browser/shell_content_browser_client.cc index 2057cdc842c136..9d83b1896d3c8d 100644 --- a/content/shell/browser/shell_content_browser_client.cc +++ b/content/shell/browser/shell_content_browser_client.cc @@ -60,7 +60,7 @@ #endif #if defined(ENABLE_MOJO_MEDIA_IN_BROWSER_PROCESS) -#include "media/mojo/services/mojo_media_application_factory.h" +#include "media/mojo/services/mojo_media_application_factory.h" // nogncheck #endif namespace content { diff --git a/content/utility/BUILD.gn b/content/utility/BUILD.gn index 1c3334bfcf140a..957fb43f01a8a5 100644 --- a/content/utility/BUILD.gn +++ b/content/utility/BUILD.gn @@ -25,7 +25,6 @@ source_set("utility") { "//content/public/child:child_sources", "//content/public/common:common_sources", "//courgette:courgette_lib", - "//media/mojo/services:application_factory", "//mojo/common", "//mojo/public/cpp/bindings", "//services/shell", @@ -37,7 +36,7 @@ source_set("utility") { ] if (mojo_media_host == "utility") { - deps += [ "//media/mojo/services:application_factory" ] + deps += [ "//media/mojo/services" ] } } diff --git a/content/utility/utility_process_control_impl.cc b/content/utility/utility_process_control_impl.cc index ea89450a40d31b..76e4f5a9ca8774 100644 --- a/content/utility/utility_process_control_impl.cc +++ b/content/utility/utility_process_control_impl.cc @@ -11,7 +11,7 @@ #include "content/utility/utility_thread_impl.h" #if defined(ENABLE_MOJO_MEDIA_IN_UTILITY_PROCESS) -#include "media/mojo/services/mojo_media_application_factory.h" +#include "media/mojo/services/mojo_media_application_factory.h" // nogncheck #endif namespace content { diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn index 00386d99099b01..856f9f56764671 100644 --- a/media/gpu/BUILD.gn +++ b/media/gpu/BUILD.gn @@ -221,8 +221,11 @@ component("gpu") { ] } + # TODO(xhwang): This is needed for AVDA to access the CDM directly. + # Remove this dependency after VDAs are also running as part of the mojo + # media application. See http://crbug.com/522298 if (mojo_media_host == "gpu") { - deps += [ "//media/mojo/services:cdm_service" ] + deps += [ "//media/mojo/services" ] } } diff --git a/media/mojo/BUILD.gn b/media/mojo/BUILD.gn index 02c6ffc1063f11..a7361d7b059546 100644 --- a/media/mojo/BUILD.gn +++ b/media/mojo/BUILD.gn @@ -25,7 +25,7 @@ test("media_mojo_unittests") { "//media/base:test_support", "//media/mojo/common", "//media/mojo/interfaces", - "//media/mojo/services:cdm_service", + "//media/mojo/services", "//mojo/edk/system", "//mojo/edk/test:run_all_unittests", "//testing/gmock", diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index ae82fadcd31af4..738b4d92d64562 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn @@ -84,19 +84,14 @@ source_set("proxy") { ] } -source_set("cdm_service") { - deps = [ - "//base", - "//media", - "//media/mojo/common", - "//media/mojo/interfaces", - "//mojo/common", - "//mojo/public/c/system:for_component", - "//services/shell/public/interfaces", - "//url", - ] +component("services") { + output_name = "media_mojo_services" sources = [ + "demuxer_stream_provider_shim.cc", + "demuxer_stream_provider_shim.h", + "mojo_audio_decoder_service.cc", + "mojo_audio_decoder_service.h", "mojo_cdm_allocator.cc", "mojo_cdm_allocator.h", "mojo_cdm_promise.cc", @@ -107,103 +102,50 @@ source_set("cdm_service") { "mojo_cdm_service_context.h", "mojo_decryptor_service.cc", "mojo_decryptor_service.h", - "mojo_type_trait.h", - ] - - if (is_android) { - sources += [ - "mojo_provision_fetcher.cc", - "mojo_provision_fetcher.h", - ] - } - - # TODO(xhwang): Needed because targets can depend on cdm_service directly, - # which is a bit hacky since we need to access CdmService directly - # from C++ code (AVDA). In the future we'll make those decoders part of - # MojoMediaApplication, then we won't need this. - public_configs = [ ":mojo_media_config" ] - - configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] -} - -source_set("audio_decoder_service") { - sources = [ - "mojo_audio_decoder_service.cc", - "mojo_audio_decoder_service.h", - ] - - deps = [ - ":cdm_service", - "//base", - "//media", - "//media:shared_memory_support", - "//media/mojo/common", - "//media/mojo/interfaces", - "//mojo/common", - ] -} - -source_set("renderer_service") { - sources = [ - "demuxer_stream_provider_shim.cc", - "demuxer_stream_provider_shim.h", "mojo_demuxer_stream_adapter.cc", "mojo_demuxer_stream_adapter.h", - "mojo_renderer_service.cc", - "mojo_renderer_service.h", - ] - - deps = [ - ":cdm_service", - "//base", - "//media", - "//media:shared_memory_support", - "//media/mojo/common", - "//media/mojo/interfaces", - "//mojo/common", - ] -} - -source_set("application") { - sources = [ "mojo_media_application.cc", "mojo_media_application.h", + "mojo_media_application_factory.cc", + "mojo_media_application_factory.h", "mojo_media_client.cc", "mojo_media_client.h", + "mojo_renderer_service.cc", + "mojo_renderer_service.h", + "mojo_type_trait.h", "service_factory_impl.cc", "service_factory_impl.h", ] + defines = [ "MEDIA_MOJO_IMPLEMENTATION" ] + + # TODO(jschuh): crbug.com/167187 fix size_t to int truncations. + configs += [ "//build/config/compiler:no_size_t_to_int_warning" ] public_configs = [ ":mojo_media_config" ] deps = [ - ":audio_decoder_service", - ":cdm_service", - ":renderer_service", "//base", "//media", + "//media:shared_memory_support", + "//media/mojo/common", "//media/mojo/interfaces", + "//mojo/common", + "//mojo/public/c/system:for_component", "//services/shell/public/cpp", - ] -} - -source_set("application_factory") { - sources = [ - "mojo_media_application_factory.cc", - "mojo_media_application_factory.h", - ] - - public_configs = [ ":mojo_media_config" ] - - deps = [ - ":application", - "//base", - "//media", "//services/shell/public/cpp:sources", + "//services/shell/public/interfaces", + "//url", ] + if (is_android) { + sources += [ + "mojo_provision_fetcher.cc", + "mojo_provision_fetcher.h", + ] + } + if (enable_test_mojo_media_client) { - defines = [ "ENABLE_TEST_MOJO_MEDIA_CLIENT" ] + defines += [ "ENABLE_TEST_MOJO_MEDIA_CLIENT" ] sources += [ "test_mojo_media_client.cc", "test_mojo_media_client.h", @@ -231,7 +173,7 @@ mojo_native_application("media") { ] deps = [ - ":application", + ":services", "//base", "//media", "//mojo/logging", diff --git a/media/mojo/services/media_mojo_export.h b/media/mojo/services/media_mojo_export.h new file mode 100644 index 00000000000000..01be7be8580dd0 --- /dev/null +++ b/media/mojo/services/media_mojo_export.h @@ -0,0 +1,32 @@ +// 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. + +#ifndef MEDIA_MOJO_MEDIA_MOJO_EXPORT_H_ +#define MEDIA_MOJO_MEDIA_MOJO_EXPORT_H_ + +// Define MEDIA_MOJO_EXPORT so that functionality implemented by the +// media/mojo module can be exported to consumers. + +#if defined(COMPONENT_BUILD) +#if defined(WIN32) + +#if defined(MEDIA_MOJO_IMPLEMENTATION) +#define MEDIA_MOJO_EXPORT __declspec(dllexport) +#else +#define MEDIA_MOJO_EXPORT __declspec(dllimport) +#endif // defined(MEDIA_IMPLEMENTATION) + +#else // defined(WIN32) +#if defined(MEDIA_MOJO_IMPLEMENTATION) +#define MEDIA_MOJO_EXPORT __attribute__((visibility("default"))) +#else +#define MEDIA_MOJO_EXPORT +#endif +#endif + +#else // defined(COMPONENT_BUILD) +#define MEDIA_MOJO_EXPORT +#endif + +#endif // MEDIA_MOJO_MEDIA_MOJO_EXPORT_H_ diff --git a/media/mojo/services/mojo_cdm_allocator.h b/media/mojo/services/mojo_cdm_allocator.h index c2e354989e5145..407fe5de3f2322 100644 --- a/media/mojo/services/mojo_cdm_allocator.h +++ b/media/mojo/services/mojo_cdm_allocator.h @@ -15,13 +15,14 @@ #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "media/cdm/cdm_allocator.h" +#include "media/mojo/services/media_mojo_export.h" #include "mojo/public/cpp/system/buffer.h" namespace media { // This is a CdmAllocator that creates buffers using mojo shared memory. // The internal logic is similar to ppapi_cdm_buffer.cc. -class MojoCdmAllocator : public CdmAllocator { +class MEDIA_MOJO_EXPORT MojoCdmAllocator : public CdmAllocator { public: MojoCdmAllocator(); ~MojoCdmAllocator() final; diff --git a/media/mojo/services/mojo_cdm_service.h b/media/mojo/services/mojo_cdm_service.h index e2c7c65868d78b..04a6f4d93a4cce 100644 --- a/media/mojo/services/mojo_cdm_service.h +++ b/media/mojo/services/mojo_cdm_service.h @@ -15,6 +15,7 @@ #include "base/memory/weak_ptr.h" #include "media/base/media_keys.h" #include "media/mojo/interfaces/content_decryption_module.mojom.h" +#include "media/mojo/services/media_mojo_export.h" #include "media/mojo/services/mojo_cdm_promise.h" #include "media/mojo/services/mojo_cdm_service_context.h" #include "media/mojo/services/mojo_decryptor_service.h" @@ -36,7 +37,7 @@ class MojoCdmService : public mojom::ContentDecryptionModule { // render frame the caller is associated with. In the future, we should move // all out-of-process media players into the MojoMediaApplicaiton so that we // can use MojoCdmServiceContext (per render frame) to get the CDM. - static scoped_refptr LegacyGetCdm(int cdm_id); + static scoped_refptr MEDIA_MOJO_EXPORT LegacyGetCdm(int cdm_id); // Constructs a MojoCdmService and strongly binds it to the |request|. MojoCdmService( diff --git a/media/mojo/services/mojo_media_application.h b/media/mojo/services/mojo_media_application.h index 3b9ae553a994fa..2b81824fcd2299 100644 --- a/media/mojo/services/mojo_media_application.h +++ b/media/mojo/services/mojo_media_application.h @@ -10,8 +10,10 @@ #include #include "base/callback.h" +#include "base/compiler_specific.h" #include "base/memory/ref_counted.h" #include "media/mojo/interfaces/service_factory.mojom.h" +#include "media/mojo/services/media_mojo_export.h" #include "services/shell/public/cpp/interface_factory.h" #include "services/shell/public/cpp/shell_client.h" #include "services/shell/public/cpp/shell_connection_ref.h" @@ -22,9 +24,9 @@ namespace media { class MediaLog; class MojoMediaClient; -class MojoMediaApplication - : public shell::ShellClient, - public shell::InterfaceFactory { +class MEDIA_MOJO_EXPORT MojoMediaApplication + : public NON_EXPORTED_BASE(shell::ShellClient), + public NON_EXPORTED_BASE(shell::InterfaceFactory) { public: MojoMediaApplication(std::unique_ptr mojo_media_client, const base::Closure& quit_closure); diff --git a/media/mojo/services/mojo_media_application_factory.h b/media/mojo/services/mojo_media_application_factory.h index e366f44c0c5b62..ead4f7ae9c0085 100644 --- a/media/mojo/services/mojo_media_application_factory.h +++ b/media/mojo/services/mojo_media_application_factory.h @@ -8,13 +8,14 @@ #include #include "base/callback_forward.h" +#include "media/mojo/services/media_mojo_export.h" #include "services/shell/public/cpp/shell_client.h" namespace media { // Creates a MojoMediaApplication instance using the default MojoMediaClient. -std::unique_ptr CreateMojoMediaApplication( - const base::Closure& quit_closure); +std::unique_ptr MEDIA_MOJO_EXPORT +CreateMojoMediaApplication(const base::Closure& quit_closure); } // namespace media diff --git a/media/mojo/services/mojo_media_client.h b/media/mojo/services/mojo_media_client.h index d64c06cdd9cc0a..010ce9a32e1134 100644 --- a/media/mojo/services/mojo_media_client.h +++ b/media/mojo/services/mojo_media_client.h @@ -13,6 +13,7 @@ #include "media/base/media_log.h" #include "media/base/renderer_factory.h" #include "media/base/video_renderer_sink.h" +#include "media/mojo/services/media_mojo_export.h" namespace base { class SingleThreadTaskRunner; @@ -26,7 +27,7 @@ class InterfaceProvider; namespace media { -class MojoMediaClient { +class MEDIA_MOJO_EXPORT MojoMediaClient { public: virtual ~MojoMediaClient(); diff --git a/media/test/BUILD.gn b/media/test/BUILD.gn index 7d6365d578143a..435f486037c695 100644 --- a/media/test/BUILD.gn +++ b/media/test/BUILD.gn @@ -103,8 +103,8 @@ source_set("mojo_pipeline_integration_tests") { "//media/audio:test_support", "//media/base:test_support", "//media/mojo/interfaces", + "//media/mojo/services", "//media/mojo/services:proxy", - "//media/mojo/services:renderer_service", "//services/shell/public/cpp:shell_test_support", "//testing/gtest", "//ui/gfx:test_support",