Index: chrome/browser/chrome_content_browser_client.cc |
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc |
index fba5aa2b40f57787e45b8ece9b2b59b3f6c0de4a..5cd1d61b0115d5bb0253ee2d0955ca27d45a6231 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -381,8 +381,40 @@ using extensions::Manifest; |
using plugins::ChromeContentBrowserClientPluginsPart; |
#endif |
+#include "media/filters/ffmpeg_video_decoder.h" |
+#include "media/mojo/interfaces/video_decoder.mojom.h" |
+#include "media/mojo/services/mojo_media_client.h" |
+#include "media/mojo/services/mojo_video_decoder_service.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
+ |
namespace { |
+/////////////// DEBUG ////////////////////////////////////////////////////////// |
+// This MojoMediaClient is only good for one thing: creating FFmpegVideoDecoders |
+class FFmpegMojoMediaClient : public media::MojoMediaClient { |
+ public: |
+ FFmpegMojoMediaClient() {} |
+ ~FFmpegMojoMediaClient() override {} |
+ |
+ // media::MojoMediaClient implementation: |
+ std::unique_ptr<media::VideoDecoder> CreateVideoDecoder( |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner) override { |
+ return base::MakeUnique<media::FFmpegVideoDecoder>(); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(FFmpegMojoMediaClient); |
+}; |
+ |
+static void CreateVideoDecoder(media::mojom::VideoDecoderRequest request) { |
+ // Note(slan): Just leak the client for now. |
+ mojo::MakeStrongBinding<::media::mojom::VideoDecoder>( |
+ base::MakeUnique<::media::MojoVideoDecoderService>( |
+ new FFmpegMojoMediaClient()), |
+ std::move(request)); |
+} |
+/////////////// DEBUG ////////////////////////////////////////////////////////// |
+ |
// Cached version of the locale so we can return the locale on the I/O |
// thread. |
base::LazyInstance<std::string> g_io_thread_application_locale; |
@@ -2938,6 +2970,7 @@ void ChromeContentBrowserClient::ExposeInterfacesToRenderer( |
registry->AddInterface( |
base::Bind(&BudgetServiceImpl::Create, render_process_host->GetID()), |
ui_task_runner); |
+ registry->AddInterface(base::Bind(&CreateVideoDecoder)); |
#if defined(OS_CHROMEOS) |
registry->AddInterface<metrics::mojom::LeakDetector>( |