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

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

Issue 2640003002: Implement MojoAudioRendererSink and use it in UtilityMojoMediaClient (Closed)
Patch Set: Rebase Created 3 years, 10 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 <memory> 10 #include <memory>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/time/default_tick_clock.h" 14 #include "base/time/default_tick_clock.h"
15 #include "base/unguessable_token.h" 15 #include "base/unguessable_token.h"
16 #include "media/base/demuxer_stream.h" 16 #include "media/base/demuxer_stream.h"
17 #include "media/base/renderer.h" 17 #include "media/base/renderer.h"
18 #include "media/base/time_delta_interpolator.h" 18 #include "media/base/time_delta_interpolator.h"
19 #include "media/mojo/interfaces/renderer.mojom.h" 19 #include "media/mojo/interfaces/renderer.mojom.h"
20 #include "mojo/public/cpp/bindings/associated_binding.h" 20 #include "mojo/public/cpp/bindings/associated_binding.h"
21 21
22 namespace base { 22 namespace base {
23 class SingleThreadTaskRunner; 23 class SingleThreadTaskRunner;
24 } 24 }
25 25
26 namespace media { 26 namespace media {
27 27
28 class AudioRendererSink;
28 class MediaResource; 29 class MediaResource;
30 class MojoAudioRendererSinkImpl;
29 class MojoDemuxerStreamImpl; 31 class MojoDemuxerStreamImpl;
30 class MojoVideoRendererSinkImpl; 32 class MojoVideoRendererSinkImpl;
31 class VideoOverlayFactory; 33 class VideoOverlayFactory;
32 class VideoRendererSink; 34 class VideoRendererSink;
33 35
34 // A media::Renderer that proxies to a mojom::Renderer. That 36 // A media::Renderer that proxies to a mojom::Renderer. That
35 // mojom::Renderer proxies back to the MojoRenderer via the 37 // mojom::Renderer proxies back to the MojoRenderer via the
36 // mojom::RendererClient interface. 38 // mojom::RendererClient interface.
37 // 39 //
38 // This class can be created on any thread, where the |remote_renderer| is 40 // This class can be created on any thread, where the |remote_renderer| is
39 // connected and passed in the constructor. Then Initialize() will be called on 41 // connected and passed in the constructor. Then Initialize() will be called on
40 // the |task_runner| and starting from that point this class is bound to the 42 // the |task_runner| and starting from that point this class is bound to the
41 // |task_runner|*. That means all Renderer and RendererClient methods will be 43 // |task_runner|*. That means all Renderer and RendererClient methods will be
42 // called/dispached on the |task_runner|. The only exception is GetMediaTime(), 44 // called/dispached on the |task_runner|. The only exception is GetMediaTime(),
43 // which can be called on any thread. 45 // which can be called on any thread.
44 class MojoRenderer : public Renderer, public mojom::RendererClient { 46 class MojoRenderer : public Renderer, public mojom::RendererClient {
45 public: 47 public:
46 MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 48 MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
47 std::unique_ptr<VideoOverlayFactory> video_overlay_factory, 49 std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
50 AudioRendererSink* audio_renderer_sink,
48 VideoRendererSink* video_renderer_sink, 51 VideoRendererSink* video_renderer_sink,
49 mojom::RendererPtr remote_renderer); 52 mojom::RendererPtr remote_renderer);
50 ~MojoRenderer() override; 53 ~MojoRenderer() override;
51 54
52 // Renderer implementation. 55 // Renderer implementation.
53 void Initialize(MediaResource* media_resource, 56 void Initialize(MediaResource* media_resource,
54 media::RendererClient* client, 57 media::RendererClient* client,
55 const PipelineStatusCB& init_cb) override; 58 const PipelineStatusCB& init_cb) override;
56 void SetCdm(CdmContext* cdm_context, 59 void SetCdm(CdmContext* cdm_context,
57 const CdmAttachedCB& cdm_attached_cb) override; 60 const CdmAttachedCB& cdm_attached_cb) override;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 // MediaResource::Type::URL. 100 // MediaResource::Type::URL.
98 void InitializeRendererFromUrl(media::RendererClient* client); 101 void InitializeRendererFromUrl(media::RendererClient* client);
99 102
100 // Callback for connection error on |remote_renderer_|. 103 // Callback for connection error on |remote_renderer_|.
101 void OnConnectionError(); 104 void OnConnectionError();
102 105
103 // Callback for connection error on any of |streams_|. The |stream| parameter 106 // Callback for connection error on any of |streams_|. The |stream| parameter
104 // indicates which stream the error happened on. 107 // indicates which stream the error happened on.
105 void OnDemuxerStreamConnectionError(MojoDemuxerStreamImpl* stream); 108 void OnDemuxerStreamConnectionError(MojoDemuxerStreamImpl* stream);
106 109
110 // Callback for connection error on |mojo_audio_renderer_sink_|.
111 void OnAudioRendererSinkConnectionError();
112
107 // Callback for connection error on |mojo_video_renderer_sink_|. 113 // Callback for connection error on |mojo_video_renderer_sink_|.
108 void OnVideoRendererSinkConnectionError(); 114 void OnVideoRendererSinkConnectionError();
109 115
110 // Callbacks for |remote_renderer_| methods. 116 // Callbacks for |remote_renderer_| methods.
111 void OnInitialized(media::RendererClient* client, bool success); 117 void OnInitialized(media::RendererClient* client, bool success);
112 void OnFlushed(); 118 void OnFlushed();
113 void OnCdmAttached(bool success); 119 void OnCdmAttached(bool success);
114 120
115 void CancelPendingCallbacks(); 121 void CancelPendingCallbacks();
116 122
117 // |task_runner| on which all methods are invoked, except for GetMediaTime(), 123 // |task_runner| on which all methods are invoked, except for GetMediaTime(),
118 // which can be called on any thread. 124 // which can be called on any thread.
119 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 125 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
120 126
121 // Overlay factory used to create overlays for video frames rendered 127 // Overlay factory used to create overlays for video frames rendered
122 // by the remote renderer. 128 // by the remote renderer.
123 std::unique_ptr<VideoOverlayFactory> video_overlay_factory_; 129 std::unique_ptr<VideoOverlayFactory> video_overlay_factory_;
124 130
131 AudioRendererSink* audio_renderer_sink_ = nullptr;
132
125 // Video frame overlays are rendered onto this sink. 133 // Video frame overlays are rendered onto this sink.
126 // Rendering of a new overlay is only needed when video natural size changes. 134 // Rendering of a new overlay is only needed when video natural size changes.
127 VideoRendererSink* video_renderer_sink_ = nullptr; 135 VideoRendererSink* video_renderer_sink_ = nullptr;
128 136
129 // Provider of audio/video DemuxerStreams. Must be valid throughout the 137 // Provider of audio/video DemuxerStreams. Must be valid throughout the
130 // lifetime of |this|. 138 // lifetime of |this|.
131 MediaResource* media_resource_ = nullptr; 139 MediaResource* media_resource_ = nullptr;
132 140
133 // Client of |this| renderer passed in Initialize. 141 // Client of |this| renderer passed in Initialize.
134 media::RendererClient* client_ = nullptr; 142 media::RendererClient* client_ = nullptr;
(...skipping 21 matching lines...) Expand all
156 164
157 PipelineStatusCB init_cb_; 165 PipelineStatusCB init_cb_;
158 base::Closure flush_cb_; 166 base::Closure flush_cb_;
159 CdmAttachedCB cdm_attached_cb_; 167 CdmAttachedCB cdm_attached_cb_;
160 168
161 // Lock used to serialize access for |time_interpolator_|. 169 // Lock used to serialize access for |time_interpolator_|.
162 mutable base::Lock lock_; 170 mutable base::Lock lock_;
163 base::DefaultTickClock media_clock_; 171 base::DefaultTickClock media_clock_;
164 media::TimeDeltaInterpolator media_time_interpolator_; 172 media::TimeDeltaInterpolator media_time_interpolator_;
165 173
174 std::unique_ptr<MojoAudioRendererSinkImpl> mojo_audio_renderer_sink_;
166 std::unique_ptr<MojoVideoRendererSinkImpl> mojo_video_renderer_sink_; 175 std::unique_ptr<MojoVideoRendererSinkImpl> mojo_video_renderer_sink_;
167 176
168 DISALLOW_COPY_AND_ASSIGN(MojoRenderer); 177 DISALLOW_COPY_AND_ASSIGN(MojoRenderer);
169 }; 178 };
170 179
171 } // namespace media 180 } // namespace media
172 181
173 #endif // MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_ 182 #endif // MEDIA_MOJO_CLIENTS_MOJO_RENDERER_H_
OLDNEW
« no previous file with comments | « media/mojo/clients/mojo_audio_renderer_sink_impl.cc ('k') | media/mojo/clients/mojo_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698