| 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(
|
|
|