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

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

Issue 2543623003: media: Allow config change between clear and encrypted streams (Closed)
Patch Set: comments addressed Created 3 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"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "media/base/bind_to_current_loop.h" 13 #include "media/base/bind_to_current_loop.h"
14 #include "media/base/decoder_buffer.h" 14 #include "media/base/decoder_buffer.h"
15 #include "media/base/media_log.h" 15 #include "media/base/media_log.h"
16 #include "media/base/media_util.h" 16 #include "media/base/media_util.h"
17 17
18 namespace media { 18 namespace media {
19 19
20 static bool IsStreamValidAndEncrypted(DemuxerStream* stream) { 20 static bool IsStreamValid(DemuxerStream* stream) {
21 return ((stream->type() == DemuxerStream::AUDIO && 21 return ((stream->type() == DemuxerStream::AUDIO &&
22 stream->audio_decoder_config().IsValidConfig() && 22 stream->audio_decoder_config().IsValidConfig()) ||
23 stream->audio_decoder_config().is_encrypted()) ||
24 (stream->type() == DemuxerStream::VIDEO && 23 (stream->type() == DemuxerStream::VIDEO &&
25 stream->video_decoder_config().IsValidConfig() && 24 stream->video_decoder_config().IsValidConfig()));
26 stream->video_decoder_config().is_encrypted()));
27 } 25 }
28 26
29 DecryptingDemuxerStream::DecryptingDemuxerStream( 27 DecryptingDemuxerStream::DecryptingDemuxerStream(
30 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 28 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
31 const scoped_refptr<MediaLog>& media_log, 29 const scoped_refptr<MediaLog>& media_log,
32 const base::Closure& waiting_for_decryption_key_cb) 30 const base::Closure& waiting_for_decryption_key_cb)
33 : task_runner_(task_runner), 31 : task_runner_(task_runner),
34 media_log_(media_log), 32 media_log_(media_log),
35 state_(kUninitialized), 33 state_(kUninitialized),
36 waiting_for_decryption_key_cb_(waiting_for_decryption_key_cb), 34 waiting_for_decryption_key_cb_(waiting_for_decryption_key_cb),
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 return; 218 return;
221 } 219 }
222 220
223 if (status == kAborted) { 221 if (status == kAborted) {
224 DVLOG(2) << "DoDecryptBuffer() - kAborted."; 222 DVLOG(2) << "DoDecryptBuffer() - kAborted.";
225 state_ = kIdle; 223 state_ = kIdle;
226 base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); 224 base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
227 return; 225 return;
228 } 226 }
229 227
228 DCHECK_EQ(kOk, status);
229
230 if (buffer->end_of_stream()) { 230 if (buffer->end_of_stream()) {
231 DVLOG(2) << "DoDecryptBuffer() - EOS buffer."; 231 DVLOG(2) << "DoDecryptBuffer() - EOS buffer.";
232 state_ = kIdle; 232 state_ = kIdle;
233 base::ResetAndReturn(&read_cb_).Run(status, buffer); 233 base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
234 return; 234 return;
235 } 235 }
236 236
237 DCHECK(buffer->decrypt_config()); 237 // TODO(xhwang): Unify clear buffer handling in clear and encrypted stream.
238 // See http://crbug.com/675003
239 if (!buffer->decrypt_config()) {
240 DVLOG(2) << "DoDecryptBuffer() - clear buffer in clear stream.";
241 state_ = kIdle;
242 base::ResetAndReturn(&read_cb_).Run(kOk, buffer);
243 return;
244 }
245
238 if (!buffer->decrypt_config()->is_encrypted()) { 246 if (!buffer->decrypt_config()->is_encrypted()) {
239 DVLOG(2) << "DoDecryptBuffer() - clear buffer."; 247 DVLOG(2) << "DoDecryptBuffer() - clear buffer in encrypted stream.";
240 scoped_refptr<DecoderBuffer> decrypted = DecoderBuffer::CopyFrom( 248 scoped_refptr<DecoderBuffer> decrypted = DecoderBuffer::CopyFrom(
241 buffer->data(), buffer->data_size()); 249 buffer->data(), buffer->data_size());
242 decrypted->set_timestamp(buffer->timestamp()); 250 decrypted->set_timestamp(buffer->timestamp());
243 decrypted->set_duration(buffer->duration()); 251 decrypted->set_duration(buffer->duration());
244 if (buffer->is_key_frame()) 252 if (buffer->is_key_frame())
245 decrypted->set_is_key_frame(true); 253 decrypted->set_is_key_frame(true);
246 254
247 state_ = kIdle; 255 state_ = kIdle;
248 base::ResetAndReturn(&read_cb_).Run(kOk, decrypted); 256 base::ResetAndReturn(&read_cb_).Run(kOk, decrypted);
249 return; 257 return;
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 363
356 Decryptor::StreamType DecryptingDemuxerStream::GetDecryptorStreamType() const { 364 Decryptor::StreamType DecryptingDemuxerStream::GetDecryptorStreamType() const {
357 if (demuxer_stream_->type() == AUDIO) 365 if (demuxer_stream_->type() == AUDIO)
358 return Decryptor::kAudio; 366 return Decryptor::kAudio;
359 367
360 DCHECK_EQ(demuxer_stream_->type(), VIDEO); 368 DCHECK_EQ(demuxer_stream_->type(), VIDEO);
361 return Decryptor::kVideo; 369 return Decryptor::kVideo;
362 } 370 }
363 371
364 void DecryptingDemuxerStream::InitializeDecoderConfig() { 372 void DecryptingDemuxerStream::InitializeDecoderConfig() {
365 // The decoder selector or upstream demuxer make sure the stream is valid and 373 // The decoder selector or upstream demuxer make sure the stream is valid.
366 // potentially encrypted. 374 DCHECK(IsStreamValid(demuxer_stream_));
367 DCHECK(IsStreamValidAndEncrypted(demuxer_stream_));
368 375
369 switch (demuxer_stream_->type()) { 376 switch (demuxer_stream_->type()) {
370 case AUDIO: { 377 case AUDIO: {
371 AudioDecoderConfig input_audio_config = 378 AudioDecoderConfig input_audio_config =
372 demuxer_stream_->audio_decoder_config(); 379 demuxer_stream_->audio_decoder_config();
373 audio_config_.Initialize( 380 audio_config_.Initialize(
374 input_audio_config.codec(), input_audio_config.sample_format(), 381 input_audio_config.codec(), input_audio_config.sample_format(),
375 input_audio_config.channel_layout(), 382 input_audio_config.channel_layout(),
376 input_audio_config.samples_per_second(), 383 input_audio_config.samples_per_second(),
377 input_audio_config.extra_data(), Unencrypted(), 384 input_audio_config.extra_data(), Unencrypted(),
(...skipping 13 matching lines...) Expand all
391 break; 398 break;
392 } 399 }
393 400
394 default: 401 default:
395 NOTREACHED(); 402 NOTREACHED();
396 return; 403 return;
397 } 404 }
398 } 405 }
399 406
400 } // namespace media 407 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/decrypting_audio_decoder_unittest.cc ('k') | media/filters/decrypting_demuxer_stream_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698