| 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..8960387fe55f960d66d627894ea92883ed285bfc 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 a StrongBinding,
|
| + // which is safely accessible via the returned StrongBindingPtr.
|
| + 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,13 @@ 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);
|
| +
|
| // RendererClient implementation.
|
| void OnError(PipelineStatus status) final;
|
| void OnEnded() final;
|
| @@ -127,6 +145,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_;
|
|
|
|
|