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

Side by Side Diff: webkit/media/crypto/proxy_decryptor.cc

Issue 11144036: Update Decryptor interface to support audio decoding. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: simplify AudioBuffers Created 8 years, 2 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/media/crypto/proxy_decryptor.h" 5 #include "webkit/media/crypto/proxy_decryptor.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/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 145
146 void ProxyDecryptor::CancelKeyRequest(const std::string& key_system, 146 void ProxyDecryptor::CancelKeyRequest(const std::string& key_system,
147 const std::string& session_id) { 147 const std::string& session_id) {
148 DVLOG(1) << "CancelKeyRequest()"; 148 DVLOG(1) << "CancelKeyRequest()";
149 149
150 // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called. 150 // WebMediaPlayerImpl ensures GenerateKeyRequest() has been called.
151 decryptor_->CancelKeyRequest(key_system, session_id); 151 decryptor_->CancelKeyRequest(key_system, session_id);
152 } 152 }
153 153
154 void ProxyDecryptor::Decrypt( 154 void ProxyDecryptor::Decrypt(
155 StreamType stream_type,
155 const scoped_refptr<media::DecoderBuffer>& encrypted, 156 const scoped_refptr<media::DecoderBuffer>& encrypted,
156 const DecryptCB& decrypt_cb) { 157 const DecryptCB& decrypt_cb) {
157 DVLOG(2) << "Decrypt()"; 158 DVLOG(2) << "Decrypt()";
158 DCHECK(decryption_message_loop_->BelongsToCurrentThread()); 159 DCHECK(decryption_message_loop_->BelongsToCurrentThread());
160 DCHECK_EQ(stream_type, kVideo); // Only support video decrypt-only for now.
ddorwin 2012/10/17 02:52:33 Is there anything that doesn't work? Maybe there's
xhwang 2012/10/17 22:29:06 Audio decrypt-only is not implemented yet. Later w
159 161
160 DCHECK(!is_canceling_decrypt_); 162 DCHECK(!is_canceling_decrypt_);
161 DCHECK(!pending_buffer_to_decrypt_); 163 DCHECK(!pending_buffer_to_decrypt_);
162 DCHECK(pending_decrypt_cb_.is_null()); 164 DCHECK(pending_decrypt_cb_.is_null());
163 165
164 pending_buffer_to_decrypt_ = encrypted; 166 pending_buffer_to_decrypt_ = encrypted;
165 pending_decrypt_cb_ = decrypt_cb; 167 pending_decrypt_cb_ = decrypt_cb;
166 168
167 // This is safe as we do not replace/delete an existing decryptor at run-time. 169 // This is safe as we do not replace/delete an existing decryptor at run-time.
168 media::Decryptor* decryptor = NULL; 170 media::Decryptor* decryptor = NULL;
169 { 171 {
170 base::AutoLock auto_lock(lock_); 172 base::AutoLock auto_lock(lock_);
171 decryptor = decryptor_.get(); 173 decryptor = decryptor_.get();
172 } 174 }
173 if (!decryptor) { 175 if (!decryptor) {
174 DVLOG(1) << "Decrypt(): decryptor not initialized."; 176 DVLOG(1) << "Decrypt(): decryptor not initialized.";
175 177
176 // TODO(xhwang): The same NeedKey may be fired here and multiple times in 178 // TODO(xhwang): The same NeedKey may be fired here and multiple times in
177 // OnBufferDecrypted(). While the spec says only one NeedKey should be 179 // OnBufferDecrypted(). While the spec says only one NeedKey should be
178 // fired. Leave them as is since the spec about this may change. 180 // fired. Leave them as is since the spec about this may change.
179 FireNeedKey(client_, encrypted); 181 FireNeedKey(client_, encrypted);
180 return; 182 return;
181 } 183 }
182 184
183 DecryptPendingBuffer(); 185 DecryptPendingBuffer();
184 } 186 }
185 187
186 void ProxyDecryptor::CancelDecrypt() { 188 void ProxyDecryptor::CancelDecrypt(StreamType stream_type) {
187 DVLOG(1) << "CancelDecrypt()"; 189 DVLOG(1) << "CancelDecrypt()";
188 DCHECK(decryption_message_loop_->BelongsToCurrentThread()); 190 DCHECK(decryption_message_loop_->BelongsToCurrentThread());
191 DCHECK_EQ(stream_type, kVideo); // Only support video decrypt-only for now.
ddorwin 2012/10/17 02:52:33 same
xhwang 2012/10/17 22:29:06 ditto
189 192
190 if (!pending_buffer_to_decrypt_) { 193 if (!pending_buffer_to_decrypt_) {
191 DCHECK(pending_decrypt_cb_.is_null()); 194 DCHECK(pending_decrypt_cb_.is_null());
192 DCHECK(!is_waiting_for_decryptor_); 195 DCHECK(!is_waiting_for_decryptor_);
193 return; 196 return;
194 } 197 }
195 198
196 DecryptCB decrypt_cb; 199 DecryptCB decrypt_cb;
197 if (!is_waiting_for_decryptor_) { 200 if (!is_waiting_for_decryptor_) {
198 pending_buffer_to_decrypt_ = NULL; 201 pending_buffer_to_decrypt_ = NULL;
199 base::ResetAndReturn(&pending_decrypt_cb_).Run(kSuccess, NULL); 202 base::ResetAndReturn(&pending_decrypt_cb_).Run(kSuccess, NULL);
200 return; 203 return;
201 } 204 }
202 205
203 is_canceling_decrypt_ = true; 206 is_canceling_decrypt_ = true;
204 decryptor_->CancelDecrypt(); 207 decryptor_->CancelDecrypt(stream_type);
208 }
209
210 void ProxyDecryptor::InitializeAudioDecoder(
211 scoped_ptr<media::AudioDecoderConfig> config,
212 const DecoderInitCB& init_cb,
213 const KeyAddedCB& key_added_cb) {
214 NOTREACHED() << "ProxyDecryptor does not support audio decoding";
205 } 215 }
206 216
207 void ProxyDecryptor::InitializeVideoDecoder( 217 void ProxyDecryptor::InitializeVideoDecoder(
208 scoped_ptr<media::VideoDecoderConfig> config, 218 scoped_ptr<media::VideoDecoderConfig> config,
209 const DecoderInitCB& init_cb, 219 const DecoderInitCB& init_cb,
210 const KeyAddedCB& key_added_cb) { 220 const KeyAddedCB& key_added_cb) {
211 NOTREACHED() << "ProxyDecryptor does not support video decoding"; 221 NOTREACHED() << "ProxyDecryptor does not support video decoding";
212 } 222 }
213 223
224 void ProxyDecryptor::DecryptAndDecodeAudio(
225 const scoped_refptr<media::DecoderBuffer>& encrypted,
226 const AudioDecodeCB& audio_decode_cb) {
227 NOTREACHED() << "ProxyDecryptor does not support audio decoding";
228 }
229
214 void ProxyDecryptor::DecryptAndDecodeVideo( 230 void ProxyDecryptor::DecryptAndDecodeVideo(
215 const scoped_refptr<media::DecoderBuffer>& encrypted, 231 const scoped_refptr<media::DecoderBuffer>& encrypted,
216 const VideoDecodeCB& video_decode_cb) { 232 const VideoDecodeCB& video_decode_cb) {
217 NOTREACHED() << "ProxyDecryptor does not support video decoding"; 233 NOTREACHED() << "ProxyDecryptor does not support video decoding";
218 } 234 }
219 235
220 void ProxyDecryptor::CancelDecryptAndDecodeVideo() { 236 void ProxyDecryptor::ResetDecoder(StreamType stream_type) {
221 NOTREACHED() << "ProxyDecryptor does not support video decoding"; 237 NOTREACHED() << "ProxyDecryptor does not support audio/video decoding";
222 } 238 }
223 239
224 void ProxyDecryptor::StopVideoDecoder() { 240 void ProxyDecryptor::DeinitializeDecoder(StreamType stream_type) {
225 NOTREACHED() << "ProxyDecryptor does not support video decoding"; 241 NOTREACHED() << "ProxyDecryptor does not support audio/video decoding";
226 } 242 }
227 243
228 scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor( 244 scoped_ptr<media::Decryptor> ProxyDecryptor::CreatePpapiDecryptor(
229 const std::string& key_system) { 245 const std::string& key_system) {
230 DCHECK(client_); 246 DCHECK(client_);
231 DCHECK(web_media_player_client_); 247 DCHECK(web_media_player_client_);
232 DCHECK(web_frame_); 248 DCHECK(web_frame_);
233 249
234 std::string plugin_type = GetPluginType(key_system); 250 std::string plugin_type = GetPluginType(key_system);
235 DCHECK(!plugin_type.empty()); 251 DCHECK(!plugin_type.empty());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 } 299 }
284 300
285 void ProxyDecryptor::DecryptPendingBuffer() { 301 void ProxyDecryptor::DecryptPendingBuffer() {
286 DVLOG(3) << "DecryptPendingBuffer()"; 302 DVLOG(3) << "DecryptPendingBuffer()";
287 DCHECK(decryption_message_loop_->BelongsToCurrentThread()); 303 DCHECK(decryption_message_loop_->BelongsToCurrentThread());
288 DCHECK(pending_buffer_to_decrypt_); 304 DCHECK(pending_buffer_to_decrypt_);
289 DCHECK(!is_waiting_for_decryptor_); 305 DCHECK(!is_waiting_for_decryptor_);
290 306
291 is_waiting_for_decryptor_ = true; 307 is_waiting_for_decryptor_ = true;
292 decryptor_->Decrypt( 308 decryptor_->Decrypt(
309 kVideo, // Only support video decrypt-only for now.
ddorwin 2012/10/17 02:52:33 If we really need this parameter (see earlier comm
xhwang 2012/10/17 22:29:06 see above reply.
293 pending_buffer_to_decrypt_, 310 pending_buffer_to_decrypt_,
294 base::Bind(&ProxyDecryptor::OnBufferDecrypted, base::Unretained(this))); 311 base::Bind(&ProxyDecryptor::OnBufferDecrypted, base::Unretained(this)));
295 } 312 }
296 313
297 void ProxyDecryptor::OnBufferDecrypted( 314 void ProxyDecryptor::OnBufferDecrypted(
298 media::Decryptor::Status status, 315 media::Decryptor::Status status,
299 const scoped_refptr<media::DecoderBuffer>& decrypted) { 316 const scoped_refptr<media::DecoderBuffer>& decrypted) {
300 if (!decryption_message_loop_->BelongsToCurrentThread()) { 317 if (!decryption_message_loop_->BelongsToCurrentThread()) {
301 decryption_message_loop_->PostTask(FROM_HERE, base::Bind( 318 decryption_message_loop_->PostTask(FROM_HERE, base::Bind(
302 &ProxyDecryptor::OnBufferDecrypted, base::Unretained(this), 319 &ProxyDecryptor::OnBufferDecrypted, base::Unretained(this),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 return; 351 return;
335 } 352 }
336 353
337 // TODO(xhwang): The same NeedKey may be fired multiple times here and also 354 // TODO(xhwang): The same NeedKey may be fired multiple times here and also
338 // in Decrypt(). While the spec says only one NeedKey should be fired. Leave 355 // in Decrypt(). While the spec says only one NeedKey should be fired. Leave
339 // them as is since the spec about this may change. 356 // them as is since the spec about this may change.
340 FireNeedKey(client_, pending_buffer_to_decrypt_); 357 FireNeedKey(client_, pending_buffer_to_decrypt_);
341 } 358 }
342 359
343 } // namespace webkit_media 360 } // namespace webkit_media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698