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

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: Created 5 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 (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 21 matching lines...) Expand all
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 : task_runner_(task_runner), 34 : task_runner_(task_runner),
35 state_(kUninitialized), 35 state_(kUninitialized),
36 demuxer_stream_(NULL), 36 demuxer_stream_(NULL),
37 set_decryptor_ready_cb_(set_decryptor_ready_cb), 37 set_decryptor_ready_cb_(set_decryptor_ready_cb),
38 decryptor_(NULL), 38 decryptor_(NULL),
39 key_added_while_decrypt_pending_(false), 39 key_added_while_decrypt_pending_(false),
40 weak_factory_(this) {} 40 weak_factory_(this) {}
41 41
42 void DecryptingDemuxerStream::Initialize(DemuxerStream* stream, 42 void DecryptingDemuxerStream::Initialize(
43 const PipelineStatusCB& status_cb) { 43 DemuxerStream* stream,
44 const PipelineStatusCB& status_cb,
45 const base::Closure& waiting_for_encryption_key_cb) {
44 DVLOG(2) << __FUNCTION__; 46 DVLOG(2) << __FUNCTION__;
45 DCHECK(task_runner_->BelongsToCurrentThread()); 47 DCHECK(task_runner_->BelongsToCurrentThread());
46 DCHECK_EQ(state_, kUninitialized) << state_; 48 DCHECK_EQ(state_, kUninitialized) << state_;
47 49
48 DCHECK(!demuxer_stream_); 50 DCHECK(!demuxer_stream_);
49 weak_this_ = weak_factory_.GetWeakPtr(); 51 weak_this_ = weak_factory_.GetWeakPtr();
50 demuxer_stream_ = stream; 52 demuxer_stream_ = stream;
51 init_cb_ = BindToCurrentLoop(status_cb); 53 init_cb_ = BindToCurrentLoop(status_cb);
54 waiting_for_encryption_key_cb_ = waiting_for_encryption_key_cb;
52 55
53 InitializeDecoderConfig(); 56 InitializeDecoderConfig();
54 57
55 state_ = kDecryptorRequested; 58 state_ = kDecryptorRequested;
56 set_decryptor_ready_cb_.Run(BindToCurrentLoop( 59 set_decryptor_ready_cb_.Run(BindToCurrentLoop(
57 base::Bind(&DecryptingDemuxerStream::SetDecryptor, weak_this_))); 60 base::Bind(&DecryptingDemuxerStream::SetDecryptor, weak_this_)));
58 } 61 }
59 62
60 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) { 63 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) {
61 DVLOG(3) << __FUNCTION__; 64 DVLOG(3) << __FUNCTION__;
(...skipping 242 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_encryption_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