Chromium Code Reviews| Index: media/mojo/services/mojo_renderer_service.h |
| diff --git a/media/mojo/services/mojo_renderer_service.h b/media/mojo/services/mojo_renderer_service.h |
| index 1b54967916282e470dab5987956f17045104ef03..25d67168532e167151948d5b33670db9ced6d0f2 100644 |
| --- a/media/mojo/services/mojo_renderer_service.h |
| +++ b/media/mojo/services/mojo_renderer_service.h |
| @@ -14,12 +14,14 @@ |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/timer/timer.h" |
| +#include "base/unguessable_token.h" |
| #include "media/base/buffering_state.h" |
| #include "media/base/demuxer_stream_provider.h" |
| #include "media/base/pipeline_status.h" |
| #include "media/base/renderer_client.h" |
| #include "media/mojo/interfaces/renderer.mojom.h" |
| #include "media/mojo/services/media_mojo_export.h" |
| +#include "mojo/public/cpp/bindings/strong_binding.h" |
| namespace media { |
| @@ -36,13 +38,20 @@ class MEDIA_MOJO_EXPORT MojoRendererService |
| : NON_EXPORTED_BASE(public mojom::Renderer), |
| public RendererClient { |
| public: |
| + using InitiateSurfaceRequestCB = base::Callback<base::UnguessableToken()>; |
| + |
| // |mojo_cdm_service_context| can be used to find the CDM to support |
| // encrypted media. If null, encrypted media is not supported. |
| - MojoRendererService( |
| + // NOTE: The MojoRendererService will be uniquely owned by the returned |
|
dcheng
2016/10/05 22:37:12
StrongBindingPtr is actually a WeakPtr. The create
tguilbert
2016/10/05 23:46:21
Clarified the comment.
|
| + // StrongBinding. |
| + static mojo::StrongBindingPtr<mojom::Renderer> Create( |
| base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
| scoped_refptr<AudioRendererSink> audio_sink, |
| std::unique_ptr<VideoRendererSink> video_sink, |
| - std::unique_ptr<media::Renderer> renderer); |
| + std::unique_ptr<media::Renderer> renderer, |
| + InitiateSurfaceRequestCB initiate_surface_request_cb, |
| + mojo::InterfaceRequest<mojom::Renderer> request); |
| + |
| ~MojoRendererService() final; |
| // mojom::Renderer implementation. |
| @@ -56,6 +65,8 @@ class MEDIA_MOJO_EXPORT MojoRendererService |
| void SetPlaybackRate(double playback_rate) final; |
| void SetVolume(float volume) final; |
| void SetCdm(int32_t cdm_id, const SetCdmCallback& callback) final; |
| + void InitiateScopedSurfaceRequest( |
| + const InitiateScopedSurfaceRequestCallback& callback) final; |
| private: |
| enum State { |
| @@ -66,6 +77,16 @@ class MEDIA_MOJO_EXPORT MojoRendererService |
| STATE_ERROR |
| }; |
| + MojoRendererService( |
| + base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
| + scoped_refptr<AudioRendererSink> audio_sink, |
| + std::unique_ptr<VideoRendererSink> video_sink, |
| + std::unique_ptr<media::Renderer> renderer, |
| + InitiateSurfaceRequestCB initiate_surface_request_cb); |
| + |
| + // |binding| is be the binding that uniquely owns |this|. |
| + void SetBinding(mojo::StrongBindingPtr<mojom::Renderer> binding); |
| + |
| // RendererClient implementation. |
| void OnError(PipelineStatus status) final; |
| void OnEnded() final; |
| @@ -127,6 +148,14 @@ class MEDIA_MOJO_EXPORT MojoRendererService |
| // Must use "media::" because "Renderer" is ambiguous. |
| std::unique_ptr<media::Renderer> renderer_; |
| + // Registers a new request in the ScopedSurfaceRequestManager. |
| + // Returns the token to be used to fulfill the request. |
| + InitiateSurfaceRequestCB initiate_surface_request_cb_; |
| + |
| + // WeakPtr to the binding that owns |this|. |
| + // Used to forcefully close the connection (which also safely destroy |this|). |
| + mojo::StrongBindingPtr<mojom::Renderer> binding_; |
| + |
| base::WeakPtr<MojoRendererService> weak_this_; |
| base::WeakPtrFactory<MojoRendererService> weak_factory_; |