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

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

Issue 66953005: Remove media::BindToLoop() in favour of media::BindToCurrentLoop(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix cros Created 6 years, 11 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 "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"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "media/base/audio_decoder_config.h" 12 #include "media/base/audio_decoder_config.h"
13 #include "media/base/video_decoder_config.h" 13 #include "media/base/video_decoder_config.h"
14 #include "media/base/bind_to_loop.h" 14 #include "media/base/bind_to_loop.h"
15 #include "media/base/decoder_buffer.h" 15 #include "media/base/decoder_buffer.h"
16 #include "media/base/decryptor.h" 16 #include "media/base/decryptor.h"
17 #include "media/base/demuxer_stream.h" 17 #include "media/base/demuxer_stream.h"
18 #include "media/base/pipeline.h" 18 #include "media/base/pipeline.h"
19 19
20 namespace media { 20 namespace media {
21 21
22 #define BIND_TO_LOOP(function) \
23 media::BindToLoop(task_runner_, base::Bind(function, weak_this_))
24
25 static bool IsStreamValidAndEncrypted(DemuxerStream* stream) { 22 static bool IsStreamValidAndEncrypted(DemuxerStream* stream) {
26 return ((stream->type() == DemuxerStream::AUDIO && 23 return ((stream->type() == DemuxerStream::AUDIO &&
27 stream->audio_decoder_config().IsValidConfig() && 24 stream->audio_decoder_config().IsValidConfig() &&
28 stream->audio_decoder_config().is_encrypted()) || 25 stream->audio_decoder_config().is_encrypted()) ||
29 (stream->type() == DemuxerStream::VIDEO && 26 (stream->type() == DemuxerStream::VIDEO &&
30 stream->video_decoder_config().IsValidConfig() && 27 stream->video_decoder_config().IsValidConfig() &&
31 stream->video_decoder_config().is_encrypted())); 28 stream->video_decoder_config().is_encrypted()));
32 } 29 }
33 30
34 DecryptingDemuxerStream::DecryptingDemuxerStream( 31 DecryptingDemuxerStream::DecryptingDemuxerStream(
(...skipping 15 matching lines...) Expand all
50 DCHECK_EQ(state_, kUninitialized) << state_; 47 DCHECK_EQ(state_, kUninitialized) << state_;
51 48
52 DCHECK(!demuxer_stream_); 49 DCHECK(!demuxer_stream_);
53 weak_this_ = weak_factory_.GetWeakPtr(); 50 weak_this_ = weak_factory_.GetWeakPtr();
54 demuxer_stream_ = stream; 51 demuxer_stream_ = stream;
55 init_cb_ = BindToCurrentLoop(status_cb); 52 init_cb_ = BindToCurrentLoop(status_cb);
56 53
57 InitializeDecoderConfig(); 54 InitializeDecoderConfig();
58 55
59 state_ = kDecryptorRequested; 56 state_ = kDecryptorRequested;
60 set_decryptor_ready_cb_.Run( 57 set_decryptor_ready_cb_.Run(BindToCurrentLoop(
61 BIND_TO_LOOP(&DecryptingDemuxerStream::SetDecryptor)); 58 base::Bind(&DecryptingDemuxerStream::SetDecryptor, weak_this_)));
62 } 59 }
63 60
64 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) { 61 void DecryptingDemuxerStream::Read(const ReadCB& read_cb) {
65 DVLOG(3) << __FUNCTION__; 62 DVLOG(3) << __FUNCTION__;
66 DCHECK(task_runner_->BelongsToCurrentThread()); 63 DCHECK(task_runner_->BelongsToCurrentThread());
67 DCHECK_EQ(state_, kIdle) << state_; 64 DCHECK_EQ(state_, kIdle) << state_;
68 DCHECK(!read_cb.is_null()); 65 DCHECK(!read_cb.is_null());
69 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported."; 66 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported.";
70 67
71 read_cb_ = BindToCurrentLoop(read_cb); 68 read_cb_ = BindToCurrentLoop(read_cb);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (!decryptor) { 145 if (!decryptor) {
149 state_ = kUninitialized; 146 state_ = kUninitialized;
150 base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED); 147 base::ResetAndReturn(&init_cb_).Run(DECODER_ERROR_NOT_SUPPORTED);
151 return; 148 return;
152 } 149 }
153 150
154 decryptor_ = decryptor; 151 decryptor_ = decryptor;
155 152
156 decryptor_->RegisterNewKeyCB( 153 decryptor_->RegisterNewKeyCB(
157 GetDecryptorStreamType(), 154 GetDecryptorStreamType(),
158 BIND_TO_LOOP(&DecryptingDemuxerStream::OnKeyAdded)); 155 BindToCurrentLoop(
156 base::Bind(&DecryptingDemuxerStream::OnKeyAdded, weak_this_)));
159 157
160 state_ = kIdle; 158 state_ = kIdle;
161 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); 159 base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
162 } 160 }
163 161
164 void DecryptingDemuxerStream::DecryptBuffer( 162 void DecryptingDemuxerStream::DecryptBuffer(
165 DemuxerStream::Status status, 163 DemuxerStream::Status status,
166 const scoped_refptr<DecoderBuffer>& buffer) { 164 const scoped_refptr<DecoderBuffer>& buffer) {
167 DVLOG(3) << __FUNCTION__; 165 DVLOG(3) << __FUNCTION__;
168 DCHECK(task_runner_->BelongsToCurrentThread()); 166 DCHECK(task_runner_->BelongsToCurrentThread());
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 state_ = kPendingDecrypt; 223 state_ = kPendingDecrypt;
226 DecryptPendingBuffer(); 224 DecryptPendingBuffer();
227 } 225 }
228 226
229 void DecryptingDemuxerStream::DecryptPendingBuffer() { 227 void DecryptingDemuxerStream::DecryptPendingBuffer() {
230 DCHECK(task_runner_->BelongsToCurrentThread()); 228 DCHECK(task_runner_->BelongsToCurrentThread());
231 DCHECK_EQ(state_, kPendingDecrypt) << state_; 229 DCHECK_EQ(state_, kPendingDecrypt) << state_;
232 decryptor_->Decrypt( 230 decryptor_->Decrypt(
233 GetDecryptorStreamType(), 231 GetDecryptorStreamType(),
234 pending_buffer_to_decrypt_, 232 pending_buffer_to_decrypt_,
235 BIND_TO_LOOP(&DecryptingDemuxerStream::DeliverBuffer)); 233 BindToCurrentLoop(
234 base::Bind(&DecryptingDemuxerStream::DeliverBuffer, weak_this_)));
236 } 235 }
237 236
238 void DecryptingDemuxerStream::DeliverBuffer( 237 void DecryptingDemuxerStream::DeliverBuffer(
239 Decryptor::Status status, 238 Decryptor::Status status,
240 const scoped_refptr<DecoderBuffer>& decrypted_buffer) { 239 const scoped_refptr<DecoderBuffer>& decrypted_buffer) {
241 DVLOG(3) << __FUNCTION__ << " - status: " << status; 240 DVLOG(3) << __FUNCTION__ << " - status: " << status;
242 DCHECK(task_runner_->BelongsToCurrentThread()); 241 DCHECK(task_runner_->BelongsToCurrentThread());
243 DCHECK_EQ(state_, kPendingDecrypt) << state_; 242 DCHECK_EQ(state_, kPendingDecrypt) << state_;
244 DCHECK_NE(status, Decryptor::kNeedMoreData); 243 DCHECK_NE(status, Decryptor::kNeedMoreData);
245 DCHECK(!read_cb_.is_null()); 244 DCHECK(!read_cb_.is_null());
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 break; 355 break;
357 } 356 }
358 357
359 default: 358 default:
360 NOTREACHED(); 359 NOTREACHED();
361 return; 360 return;
362 } 361 }
363 } 362 }
364 363
365 } // namespace media 364 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698