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

Side by Side Diff: media/mojo/clients/mojo_renderer.h

Issue 2640003002: Implement MojoAudioRendererSink and use it in UtilityMojoMediaClient (Closed)
Patch Set: Make sure to stop the audio sink. Also unbind from the audio device thread Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_ 5 #ifndef MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_
6 #define MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_ 6 #define MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/time/default_tick_clock.h" 11 #include "base/time/default_tick_clock.h"
12 #include "base/unguessable_token.h" 12 #include "base/unguessable_token.h"
13 #include "media/base/demuxer_stream.h" 13 #include "media/base/demuxer_stream.h"
14 #include "media/base/renderer.h" 14 #include "media/base/renderer.h"
15 #include "media/base/time_delta_interpolator.h" 15 #include "media/base/time_delta_interpolator.h"
16 #include "media/mojo/interfaces/renderer.mojom.h" 16 #include "media/mojo/interfaces/renderer.mojom.h"
17 #include "mojo/public/cpp/bindings/associated_binding.h" 17 #include "mojo/public/cpp/bindings/associated_binding.h"
18 18
19 namespace base { 19 namespace base {
20 class SingleThreadTaskRunner; 20 class SingleThreadTaskRunner;
21 } 21 }
22 22
23 namespace media { 23 namespace media {
24 24
25 class AudioRendererSink;
25 class DemuxerStreamProvider; 26 class DemuxerStreamProvider;
27 class MojoAudioRendererSinkImpl;
26 class MojoDemuxerStreamImpl; 28 class MojoDemuxerStreamImpl;
27 class MojoVideoRendererSinkImpl; 29 class MojoVideoRendererSinkImpl;
28 class VideoOverlayFactory; 30 class VideoOverlayFactory;
29 class VideoRendererSink; 31 class VideoRendererSink;
30 32
31 // A media::Renderer that proxies to a mojom::Renderer. That 33 // A media::Renderer that proxies to a mojom::Renderer. That
32 // mojom::Renderer proxies back to the MojoRenderer via the 34 // mojom::Renderer proxies back to the MojoRenderer via the
33 // mojom::RendererClient interface. 35 // mojom::RendererClient interface.
34 // 36 //
35 // This class can be created on any thread, where the |remote_renderer| is 37 // This class can be created on any thread, where the |remote_renderer| is
36 // connected and passed in the constructor. Then Initialize() will be called on 38 // connected and passed in the constructor. Then Initialize() will be called on
37 // the |task_runner| and starting from that point this class is bound to the 39 // the |task_runner| and starting from that point this class is bound to the
38 // |task_runner|*. That means all Renderer and RendererClient methods will be 40 // |task_runner|*. That means all Renderer and RendererClient methods will be
39 // called/dispached on the |task_runner|. The only exception is GetMediaTime(), 41 // called/dispached on the |task_runner|. The only exception is GetMediaTime(),
40 // which can be called on any thread. 42 // which can be called on any thread.
41 class MojoRenderer : public Renderer, public mojom::RendererClient { 43 class MojoRenderer : public Renderer, public mojom::RendererClient {
42 public: 44 public:
43 MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 45 MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
44 std::unique_ptr<VideoOverlayFactory> video_overlay_factory, 46 std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
47 AudioRendererSink* audio_renderer_sink,
45 VideoRendererSink* video_renderer_sink, 48 VideoRendererSink* video_renderer_sink,
46 mojom::RendererPtr remote_renderer); 49 mojom::RendererPtr remote_renderer);
47 ~MojoRenderer() override; 50 ~MojoRenderer() override;
48 51
49 // Renderer implementation. 52 // Renderer implementation.
50 void Initialize(DemuxerStreamProvider* demuxer_stream_provider, 53 void Initialize(DemuxerStreamProvider* demuxer_stream_provider,
51 media::RendererClient* client, 54 media::RendererClient* client,
52 const PipelineStatusCB& init_cb) override; 55 const PipelineStatusCB& init_cb) override;
53 void SetCdm(CdmContext* cdm_context, 56 void SetCdm(CdmContext* cdm_context,
54 const CdmAttachedCB& cdm_attached_cb) override; 57 const CdmAttachedCB& cdm_attached_cb) override;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 // Initialize the remote renderer when |demuxer_stream_provider| is of type 96 // Initialize the remote renderer when |demuxer_stream_provider| is of type
94 // DemuxerSteamProvider::Type::URL. 97 // DemuxerSteamProvider::Type::URL.
95 void InitializeRendererFromUrl(media::RendererClient* client); 98 void InitializeRendererFromUrl(media::RendererClient* client);
96 99
97 // Callback for connection error on |remote_renderer_|. 100 // Callback for connection error on |remote_renderer_|.
98 void OnConnectionError(); 101 void OnConnectionError();
99 102
100 // Callback for connection error on |audio_stream_| and |video_stream_|. 103 // Callback for connection error on |audio_stream_| and |video_stream_|.
101 void OnDemuxerStreamConnectionError(DemuxerStream::Type type); 104 void OnDemuxerStreamConnectionError(DemuxerStream::Type type);
102 105
106 // Callback for connection error on |mojo_audio_renderer_sink_|.
107 void OnAudioRendererSinkConnectionError();
108
103 // Callback for connection error on |mojo_video_renderer_sink_|. 109 // Callback for connection error on |mojo_video_renderer_sink_|.
104 void OnVideoRendererSinkConnectionError(); 110 void OnVideoRendererSinkConnectionError();
105 111
106 // Callbacks for |remote_renderer_| methods. 112 // Callbacks for |remote_renderer_| methods.
107 void OnInitialized(media::RendererClient* client, bool success); 113 void OnInitialized(media::RendererClient* client, bool success);
108 void OnFlushed(); 114 void OnFlushed();
109 void OnCdmAttached(bool success); 115 void OnCdmAttached(bool success);
110 116
111 void CancelPendingCallbacks(); 117 void CancelPendingCallbacks();
112 118
113 // |task_runner| on which all methods are invoked, except for GetMediaTime(), 119 // |task_runner| on which all methods are invoked, except for GetMediaTime(),
114 // which can be called on any thread. 120 // which can be called on any thread.
115 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 121 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
116 122
117 // Overlay factory used to create overlays for video frames rendered 123 // Overlay factory used to create overlays for video frames rendered
118 // by the remote renderer. 124 // by the remote renderer.
119 std::unique_ptr<VideoOverlayFactory> video_overlay_factory_; 125 std::unique_ptr<VideoOverlayFactory> video_overlay_factory_;
120 126
127 AudioRendererSink* audio_renderer_sink_ = nullptr;
128
121 // Video frame overlays are rendered onto this sink. 129 // Video frame overlays are rendered onto this sink.
122 // Rendering of a new overlay is only needed when video natural size changes. 130 // Rendering of a new overlay is only needed when video natural size changes.
123 VideoRendererSink* video_renderer_sink_ = nullptr; 131 VideoRendererSink* video_renderer_sink_ = nullptr;
124 132
125 // Provider of audio/video DemuxerStreams. Must be valid throughout the 133 // Provider of audio/video DemuxerStreams. Must be valid throughout the
126 // lifetime of |this|. 134 // lifetime of |this|.
127 DemuxerStreamProvider* demuxer_stream_provider_ = nullptr; 135 DemuxerStreamProvider* demuxer_stream_provider_ = nullptr;
128 136
129 // Client of |this| renderer passed in Initialize. 137 // Client of |this| renderer passed in Initialize.
130 media::RendererClient* client_ = nullptr; 138 media::RendererClient* client_ = nullptr;
(...skipping 22 matching lines...) Expand all
153 161
154 PipelineStatusCB init_cb_; 162 PipelineStatusCB init_cb_;
155 base::Closure flush_cb_; 163 base::Closure flush_cb_;
156 CdmAttachedCB cdm_attached_cb_; 164 CdmAttachedCB cdm_attached_cb_;
157 165
158 // Lock used to serialize access for |time_interpolator_|. 166 // Lock used to serialize access for |time_interpolator_|.
159 mutable base::Lock lock_; 167 mutable base::Lock lock_;
160 base::DefaultTickClock media_clock_; 168 base::DefaultTickClock media_clock_;
161 media::TimeDeltaInterpolator media_time_interpolator_; 169 media::TimeDeltaInterpolator media_time_interpolator_;
162 170
171 std::unique_ptr<MojoAudioRendererSinkImpl> mojo_audio_renderer_sink_;
163 std::unique_ptr<MojoVideoRendererSinkImpl> mojo_video_renderer_sink_; 172 std::unique_ptr<MojoVideoRendererSinkImpl> mojo_video_renderer_sink_;
164 173
165 DISALLOW_COPY_AND_ASSIGN(MojoRenderer); 174 DISALLOW_COPY_AND_ASSIGN(MojoRenderer);
166 }; 175 };
167 176
168 } // namespace media 177 } // namespace media
169 178
170 #endif // MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_ 179 #endif // MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698