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

Side by Side Diff: media/filters/decrypting_demuxer_stream.cc

Issue 935243002: Decryptors can report kNoKey to WebMediaPlayer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Android changes Created 5 years, 9 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 (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 "media/filters/decrypting_demuxer_stream.h" 5 #include "media/filters/decrypting_demuxer_stream.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 12 matching lines...) Expand all
23 return ((stream->type() == DemuxerStream::AUDIO && 23 return ((stream->type() == DemuxerStream::AUDIO &&
24 stream->audio_decoder_config().IsValidConfig() && 24 stream->audio_decoder_config().IsValidConfig() &&
25 stream->audio_decoder_config().is_encrypted()) || 25 stream->audio_decoder_config().is_encrypted()) ||
26 (stream->type() == DemuxerStream::VIDEO && 26 (stream->type() == DemuxerStream::VIDEO &&
27 stream->video_decoder_config().IsValidConfig() && 27 stream->video_decoder_config().IsValidConfig() &&
28 stream->video_decoder_config().is_encrypted())); 28 stream->video_decoder_config().is_encrypted()));
29 } 29 }
30 30
31 DecryptingDemuxerStream::DecryptingDemuxerStream( 31 DecryptingDemuxerStream::DecryptingDemuxerStream(
32 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 32 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
33 const SetDecryptorReadyCB& set_decryptor_ready_cb) 33 const SetDecryptorReadyCB& set_decryptor_ready_cb,
34 const base::Closure& waiting_for_decryption_key_cb)
34 : task_runner_(task_runner), 35 : task_runner_(task_runner),
35 state_(kUninitialized), 36 state_(kUninitialized),
37 waiting_for_decryption_key_cb_(waiting_for_decryption_key_cb),
36 demuxer_stream_(NULL), 38 demuxer_stream_(NULL),
37 set_decryptor_ready_cb_(set_decryptor_ready_cb), 39 set_decryptor_ready_cb_(set_decryptor_ready_cb),
38 decryptor_(NULL), 40 decryptor_(NULL),
39 key_added_while_decrypt_pending_(false), 41 key_added_while_decrypt_pending_(false),
40 weak_factory_(this) {} 42 weak_factory_(this) {
43 }
41 44
42 void DecryptingDemuxerStream::Initialize(DemuxerStream* stream, 45 void DecryptingDemuxerStream::Initialize(DemuxerStream* stream,
43 const PipelineStatusCB& status_cb) { 46 const PipelineStatusCB& status_cb) {
44 DVLOG(2) << __FUNCTION__; 47 DVLOG(2) << __FUNCTION__;
45 DCHECK(task_runner_->BelongsToCurrentThread()); 48 DCHECK(task_runner_->BelongsToCurrentThread());
46 DCHECK_EQ(state_, kUninitialized) << state_; 49 DCHECK_EQ(state_, kUninitialized) << state_;
47 50
48 DCHECK(!demuxer_stream_); 51 DCHECK(!demuxer_stream_);
49 weak_this_ = weak_factory_.GetWeakPtr(); 52 weak_this_ = weak_factory_.GetWeakPtr();
50 demuxer_stream_ = stream; 53 demuxer_stream_ = stream;
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 307
305 if (status == Decryptor::kNoKey) { 308 if (status == Decryptor::kNoKey) {
306 DVLOG(2) << "DoDeliverBuffer() - kNoKey"; 309 DVLOG(2) << "DoDeliverBuffer() - kNoKey";
307 if (need_to_try_again_if_nokey) { 310 if (need_to_try_again_if_nokey) {
308 // The |state_| is still kPendingDecrypt. 311 // The |state_| is still kPendingDecrypt.
309 DecryptPendingBuffer(); 312 DecryptPendingBuffer();
310 return; 313 return;
311 } 314 }
312 315
313 state_ = kWaitingForKey; 316 state_ = kWaitingForKey;
317 waiting_for_decryption_key_cb_.Run();
314 return; 318 return;
315 } 319 }
316 320
317 DCHECK_EQ(status, Decryptor::kSuccess); 321 DCHECK_EQ(status, Decryptor::kSuccess);
318 322
319 // Copy the key frame flag from the encrypted to decrypted buffer, assuming 323 // Copy the key frame flag from the encrypted to decrypted buffer, assuming
320 // that the decryptor initialized the flag to false. 324 // that the decryptor initialized the flag to false.
321 if (pending_buffer_to_decrypt_->is_key_frame()) 325 if (pending_buffer_to_decrypt_->is_key_frame())
322 decrypted_buffer->set_is_key_frame(true); 326 decrypted_buffer->set_is_key_frame(true);
323 327
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 break; 403 break;
400 } 404 }
401 405
402 default: 406 default:
403 NOTREACHED(); 407 NOTREACHED();
404 return; 408 return;
405 } 409 }
406 } 410 }
407 411
408 } // namespace media 412 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698