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

Side by Side Diff: media/mojo/services/mojo_renderer_service.cc

Issue 840473002: media: Support creation and SetCdm() for mojo based CDM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase only; compiles but needs more polish... Created 5 years, 6 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
« no previous file with comments | « media/mojo/services/mojo_renderer_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "media/mojo/services/mojo_renderer_service.h" 5 #include "media/mojo/services/mojo_renderer_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/memory/scoped_vector.h" 9 #include "base/memory/scoped_vector.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "media/base/audio_decoder.h" 11 #include "media/base/audio_decoder.h"
12 #include "media/base/audio_renderer.h" 12 #include "media/base/audio_renderer.h"
13 #include "media/base/audio_renderer_sink.h" 13 #include "media/base/audio_renderer_sink.h"
14 #include "media/base/cdm_context.h"
14 #include "media/base/decryptor.h" 15 #include "media/base/decryptor.h"
15 #include "media/base/media_log.h" 16 #include "media/base/media_log.h"
16 #include "media/base/video_renderer.h" 17 #include "media/base/video_renderer.h"
17 #include "media/base/video_renderer_sink.h" 18 #include "media/base/video_renderer_sink.h"
18 #include "media/mojo/services/demuxer_stream_provider_shim.h" 19 #include "media/mojo/services/demuxer_stream_provider_shim.h"
19 #include "media/mojo/services/renderer_config.h" 20 #include "media/mojo/services/renderer_config.h"
20 #include "media/renderers/audio_renderer_impl.h" 21 #include "media/renderers/audio_renderer_impl.h"
21 #include "media/renderers/renderer_impl.h" 22 #include "media/renderers/renderer_impl.h"
22 #include "media/renderers/video_renderer_impl.h" 23 #include "media/renderers/video_renderer_impl.h"
23 24
24 namespace media { 25 namespace media {
25 26
26 // Time interval to update media time. 27 // Time interval to update media time.
27 const int kTimeUpdateIntervalMs = 50; 28 const int kTimeUpdateIntervalMs = 50;
28 29
29 MojoRendererService::MojoRendererService( 30 MojoRendererService::MojoRendererService(
31 CdmContextProvider* cdm_context_provider,
30 mojo::InterfaceRequest<mojo::MediaRenderer> request) 32 mojo::InterfaceRequest<mojo::MediaRenderer> request)
31 : binding_(this, request.Pass()), 33 : binding_(this, request.Pass()),
34 cdm_context_provider_(cdm_context_provider),
32 state_(STATE_UNINITIALIZED), 35 state_(STATE_UNINITIALIZED),
33 last_media_time_usec_(0), 36 last_media_time_usec_(0),
34 weak_factory_(this) { 37 weak_factory_(this) {
35 weak_this_ = weak_factory_.GetWeakPtr(); 38 weak_this_ = weak_factory_.GetWeakPtr();
36 DVLOG(1) << __FUNCTION__; 39 DVLOG(1) << __FUNCTION__;
37 40
38 scoped_refptr<base::SingleThreadTaskRunner> task_runner( 41 scoped_refptr<base::SingleThreadTaskRunner> task_runner(
39 base::MessageLoop::current()->task_runner()); 42 base::MessageLoop::current()->task_runner());
40 scoped_refptr<MediaLog> media_log(new MediaLog()); 43 scoped_refptr<MediaLog> media_log(new MediaLog());
41 RendererConfig* renderer_config = RendererConfig::Get(); 44 RendererConfig* renderer_config = RendererConfig::Get();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 void MojoRendererService::SetPlaybackRate(double playback_rate) { 101 void MojoRendererService::SetPlaybackRate(double playback_rate) {
99 DVLOG(2) << __FUNCTION__ << ": " << playback_rate; 102 DVLOG(2) << __FUNCTION__ << ": " << playback_rate;
100 DCHECK_EQ(state_, STATE_PLAYING); 103 DCHECK_EQ(state_, STATE_PLAYING);
101 renderer_->SetPlaybackRate(playback_rate); 104 renderer_->SetPlaybackRate(playback_rate);
102 } 105 }
103 106
104 void MojoRendererService::SetVolume(float volume) { 107 void MojoRendererService::SetVolume(float volume) {
105 renderer_->SetVolume(volume); 108 renderer_->SetVolume(volume);
106 } 109 }
107 110
111 void MojoRendererService::SetCdm(int32_t cdm_id,
112 const mojo::Callback<void(bool)>& callback) {
113 if (!cdm_context_provider_) {
114 LOG(ERROR) << "CDM context provider not available.";
115 callback.Run(false);
116 return;
117 }
118
119 CdmContext* cdm_context = cdm_context_provider_->GetCdmContext(cdm_id);
120 if (!cdm_context) {
121 LOG(ERROR) << "CDM context not found: " << cdm_id;
122 callback.Run(false);
123 return;
124 }
125
126 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached,
127 weak_this_, callback));
128 }
129
108 void MojoRendererService::OnStreamReady(const mojo::Closure& callback) { 130 void MojoRendererService::OnStreamReady(const mojo::Closure& callback) {
109 DCHECK_EQ(state_, STATE_INITIALIZING); 131 DCHECK_EQ(state_, STATE_INITIALIZING);
110 132
111 renderer_->Initialize( 133 renderer_->Initialize(
112 stream_provider_.get(), 134 stream_provider_.get(),
113 base::Bind( 135 base::Bind(
114 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback), 136 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback),
115 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_), 137 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_),
116 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_), 138 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_),
117 base::Bind(&MojoRendererService::OnRendererEnded, weak_this_), 139 base::Bind(&MojoRendererService::OnRendererEnded, weak_this_),
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { 178 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() {
157 UpdateMediaTime(true); 179 UpdateMediaTime(true);
158 time_update_timer_.Start( 180 time_update_timer_.Start(
159 FROM_HERE, 181 FROM_HERE,
160 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), 182 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs),
161 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); 183 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false));
162 } 184 }
163 185
164 void MojoRendererService::OnBufferingStateChanged( 186 void MojoRendererService::OnBufferingStateChanged(
165 BufferingState new_buffering_state) { 187 BufferingState new_buffering_state) {
166 DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ") "; 188 DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ")";
167 client_->OnBufferingStateChange( 189 client_->OnBufferingStateChange(
168 static_cast<mojo::BufferingState>(new_buffering_state)); 190 static_cast<mojo::BufferingState>(new_buffering_state));
169 } 191 }
170 192
171 void MojoRendererService::OnRendererEnded() { 193 void MojoRendererService::OnRendererEnded() {
172 DVLOG(1) << __FUNCTION__; 194 DVLOG(1) << __FUNCTION__;
173 CancelPeriodicMediaTimeUpdates(); 195 CancelPeriodicMediaTimeUpdates();
174 client_->OnEnded(); 196 client_->OnEnded();
175 } 197 }
176 198
177 void MojoRendererService::OnError(PipelineStatus error) { 199 void MojoRendererService::OnError(PipelineStatus error) {
178 DVLOG(1) << __FUNCTION__; 200 DVLOG(1) << __FUNCTION__ << "(" << error << ")";
179 state_ = STATE_ERROR; 201 state_ = STATE_ERROR;
180 client_->OnError(); 202 client_->OnError();
181 } 203 }
182 204
183 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { 205 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) {
184 DVLOG(1) << __FUNCTION__; 206 DVLOG(1) << __FUNCTION__;
185 DCHECK_EQ(state_, STATE_FLUSHING); 207 DCHECK_EQ(state_, STATE_FLUSHING);
186 state_ = STATE_PLAYING; 208 state_ = STATE_PLAYING;
187 callback.Run(); 209 callback.Run();
188 } 210 }
189 211
212 void MojoRendererService::OnCdmAttached(
213 const mojo::Callback<void(bool)>& callback,
214 bool success) {
215 DVLOG(1) << __FUNCTION__ << "(" << success << ")";
216 callback.Run(success);
217 }
218
190 } // namespace media 219 } // namespace media
OLDNEW
« no previous file with comments | « media/mojo/services/mojo_renderer_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698