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_; |