Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2521)

Unified Diff: chromecast/browser/media/cast_mojo_media_client.cc

Issue 2281843003: Move ownership of audio/video sinks to MojoRendererService. (Closed)
Patch Set: rebase Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chromecast/browser/media/cast_mojo_media_client.h ('k') | media/mojo/clients/mojo_renderer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chromecast/browser/media/cast_mojo_media_client.cc
diff --git a/chromecast/browser/media/cast_mojo_media_client.cc b/chromecast/browser/media/cast_mojo_media_client.cc
index bb5a00b48ad6ef36eaa74d8b4bac347a9e2504d7..9dcbdea21982e60fe3c517443d3f6fb5ddb06b57 100644
--- a/chromecast/browser/media/cast_mojo_media_client.cc
+++ b/chromecast/browser/media/cast_mojo_media_client.cc
@@ -6,6 +6,7 @@
#include "base/memory/ptr_util.h"
#include "chromecast/browser/media/cast_renderer.h"
+#include "media/base/audio_renderer_sink.h"
#include "media/base/cdm_factory.h"
#include "media/base/media_log.h"
#include "media/base/renderer_factory.h"
@@ -13,6 +14,75 @@
namespace chromecast {
namespace media {
+namespace {
+// CastRenderer does not use a ::media::AudioRendererSink.
+// CastAudioRendererSink is only used to hold audio-device-id.
+class CastAudioRendererSink : public ::media::AudioRendererSink {
+ public:
+ CastAudioRendererSink(const std::string& device_id) : device_id_(device_id) {}
+
+ // ::media::AudioRendererSink implementation.
+ void Initialize(const ::media::AudioParameters& params,
+ RenderCallback* callback) final {
+ NOTREACHED();
+ }
+ void Start() final { NOTREACHED(); }
+ void Stop() final { NOTREACHED(); }
+ void Pause() final { NOTREACHED(); }
+ void Play() final { NOTREACHED(); }
+ bool SetVolume(double volume) final {
+ NOTREACHED();
+ return false;
+ }
+ ::media::OutputDeviceInfo GetOutputDeviceInfo() final {
+ return ::media::OutputDeviceInfo(device_id_,
+ ::media::OUTPUT_DEVICE_STATUS_OK,
+ ::media::AudioParameters());
+ }
+ bool CurrentThreadIsRenderingThread() final {
+ NOTREACHED();
+ return false;
+ }
+
+ private:
+ ~CastAudioRendererSink() final {}
+
+ std::string device_id_;
+ DISALLOW_COPY_AND_ASSIGN(CastAudioRendererSink);
+};
+
+class CastRendererFactory : public ::media::RendererFactory {
+ public:
+ CastRendererFactory(const CreateMediaPipelineBackendCB& create_backend_cb,
+ const scoped_refptr<::media::MediaLog>& media_log,
+ VideoResolutionPolicy* video_resolution_policy)
+ : create_backend_cb_(create_backend_cb),
+ media_log_(media_log),
+ video_resolution_policy_(video_resolution_policy) {}
+ ~CastRendererFactory() final {}
+
+ std::unique_ptr<::media::Renderer> CreateRenderer(
+ const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
+ const scoped_refptr<base::TaskRunner>& worker_task_runner,
+ ::media::AudioRendererSink* audio_renderer_sink,
+ ::media::VideoRendererSink* video_renderer_sink,
+ const ::media::RequestSurfaceCB& request_surface_cb) final {
+ DCHECK(audio_renderer_sink);
+ DCHECK(!video_renderer_sink);
+ return base::MakeUnique<CastRenderer>(
+ create_backend_cb_, media_task_runner,
+ audio_renderer_sink->GetOutputDeviceInfo().device_id(),
+ video_resolution_policy_);
+ }
+
+ private:
+ const CreateMediaPipelineBackendCB create_backend_cb_;
+ scoped_refptr<::media::MediaLog> media_log_;
+ VideoResolutionPolicy* video_resolution_policy_;
+ DISALLOW_COPY_AND_ASSIGN(CastRendererFactory);
+};
+} // namespace
+
CastMojoMediaClient::CastMojoMediaClient(
const CreateMediaPipelineBackendCB& create_backend_cb,
const CreateCdmFactoryCB& create_cdm_factory_cb,
@@ -23,13 +93,17 @@ CastMojoMediaClient::CastMojoMediaClient(
CastMojoMediaClient::~CastMojoMediaClient() {}
-std::unique_ptr<::media::Renderer> CastMojoMediaClient::CreateRenderer(
- scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
- scoped_refptr<::media::MediaLog> media_log,
+scoped_refptr<::media::AudioRendererSink>
+CastMojoMediaClient::CreateAudioRendererSink(
const std::string& audio_device_id) {
- return base::MakeUnique<chromecast::media::CastRenderer>(
- create_backend_cb_, std::move(media_task_runner), audio_device_id,
- video_resolution_policy_);
+ return new CastAudioRendererSink(audio_device_id);
+}
+
+std::unique_ptr<::media::RendererFactory>
+CastMojoMediaClient::CreateRendererFactory(
+ const scoped_refptr<::media::MediaLog>& media_log) {
+ return base::MakeUnique<CastRendererFactory>(create_backend_cb_, media_log,
+ video_resolution_policy_);
}
std::unique_ptr<::media::CdmFactory> CastMojoMediaClient::CreateCdmFactory(
« no previous file with comments | « chromecast/browser/media/cast_mojo_media_client.h ('k') | media/mojo/clients/mojo_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698