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

Side by Side Diff: content/renderer/media/android/media_source_delegate.cc

Issue 1613793002: MediaSourceDelegate: Fix DecryptingDemuxerStream initialization logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/android/media_source_delegate.h" 5 #include "content/renderer/media/android/media_source_delegate.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 void MediaSourceDelegate::InitializeMediaSource( 146 void MediaSourceDelegate::InitializeMediaSource(
147 const MediaSourceOpenedCB& media_source_opened_cb, 147 const MediaSourceOpenedCB& media_source_opened_cb,
148 const media::Demuxer::EncryptedMediaInitDataCB& 148 const media::Demuxer::EncryptedMediaInitDataCB&
149 encrypted_media_init_data_cb, 149 encrypted_media_init_data_cb,
150 const media::SetCdmReadyCB& set_cdm_ready_cb, 150 const media::SetCdmReadyCB& set_cdm_ready_cb,
151 const UpdateNetworkStateCB& update_network_state_cb, 151 const UpdateNetworkStateCB& update_network_state_cb,
152 const DurationChangeCB& duration_change_cb, 152 const DurationChangeCB& duration_change_cb,
153 const base::Closure& waiting_for_decryption_key_cb) { 153 const base::Closure& waiting_for_decryption_key_cb) {
154 DCHECK(main_task_runner_->BelongsToCurrentThread()); 154 DCHECK(main_task_runner_->BelongsToCurrentThread());
155 DCHECK(!media_source_opened_cb.is_null()); 155 DCHECK(!media_source_opened_cb.is_null());
156 DCHECK(!set_cdm_ready_cb.is_null());
157
ddorwin 2016/01/22 00:58:35 Should we check all cb parameters?
xhwang 2016/01/29 00:47:15 Done.
156 media_source_opened_cb_ = media_source_opened_cb; 158 media_source_opened_cb_ = media_source_opened_cb;
157 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; 159 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb;
158 set_cdm_ready_cb_ = media::BindToCurrentLoop(set_cdm_ready_cb); 160 set_cdm_ready_cb_ = media::BindToCurrentLoop(set_cdm_ready_cb);
159 update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb); 161 update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb);
160 duration_change_cb_ = duration_change_cb; 162 duration_change_cb_ = duration_change_cb;
161 waiting_for_decryption_key_cb_ = 163 waiting_for_decryption_key_cb_ =
162 media::BindToCurrentLoop(waiting_for_decryption_key_cb); 164 media::BindToCurrentLoop(waiting_for_decryption_key_cb);
163 access_unit_size_ = kAccessUnitSizeForMediaSource; 165 access_unit_size_ = kAccessUnitSizeForMediaSource;
164 166
165 chunk_demuxer_.reset(new media::ChunkDemuxer( 167 chunk_demuxer_.reset(new media::ChunkDemuxer(
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 DCHECK(chunk_demuxer_); 491 DCHECK(chunk_demuxer_);
490 492
491 if (status != media::PIPELINE_OK) { 493 if (status != media::PIPELINE_OK) {
492 OnDemuxerError(status); 494 OnDemuxerError(status);
493 return; 495 return;
494 } 496 }
495 497
496 audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO); 498 audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO);
497 video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO); 499 video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO);
498 500
499 if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted() && 501 if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted()) {
500 !set_cdm_ready_cb_.is_null()) {
501 InitAudioDecryptingDemuxerStream(); 502 InitAudioDecryptingDemuxerStream();
502 // InitVideoDecryptingDemuxerStream() will be called in 503 // InitVideoDecryptingDemuxerStream() will be called in
503 // OnAudioDecryptingDemuxerStreamInitDone(). 504 // OnAudioDecryptingDemuxerStreamInitDone().
504 return; 505 return;
505 } 506 }
506 507
507 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted() && 508 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted()) {
508 !set_cdm_ready_cb_.is_null()) {
509 InitVideoDecryptingDemuxerStream(); 509 InitVideoDecryptingDemuxerStream();
510 return; 510 return;
511 } 511 }
512 512
513 // Notify demuxer ready when both streams are not encrypted. 513 // Notify demuxer ready when both streams are not encrypted.
514 is_demuxer_ready_ = true; 514 is_demuxer_ready_ = true;
515 NotifyDemuxerReady(); 515 NotifyDemuxerReady();
516 } 516 }
517 517
518 void MediaSourceDelegate::InitAudioDecryptingDemuxerStream() { 518 void MediaSourceDelegate::InitAudioDecryptingDemuxerStream() {
519 DCHECK(media_task_runner_->BelongsToCurrentThread()); 519 DCHECK(media_task_runner_->BelongsToCurrentThread());
520 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; 520 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
521 DCHECK(!set_cdm_ready_cb_.is_null()); 521 DCHECK(!set_cdm_ready_cb_.is_null());
522
523 audio_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( 522 audio_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream(
524 media_task_runner_, media_log_, waiting_for_decryption_key_cb_)); 523 media_task_runner_, media_log_, waiting_for_decryption_key_cb_));
525 audio_decrypting_demuxer_stream_->Initialize( 524 audio_decrypting_demuxer_stream_->Initialize(
526 audio_stream_, set_cdm_ready_cb_, 525 audio_stream_, set_cdm_ready_cb_,
527 base::Bind(&MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone, 526 base::Bind(&MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone,
528 media_weak_factory_.GetWeakPtr())); 527 media_weak_factory_.GetWeakPtr()));
529 } 528 }
530 529
531 void MediaSourceDelegate::InitVideoDecryptingDemuxerStream() { 530 void MediaSourceDelegate::InitVideoDecryptingDemuxerStream() {
532 DCHECK(media_task_runner_->BelongsToCurrentThread()); 531 DCHECK(media_task_runner_->BelongsToCurrentThread());
533 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; 532 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
534 DCHECK(!set_cdm_ready_cb_.is_null()); 533 DCHECK(!set_cdm_ready_cb_.is_null());
535 534
536 video_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( 535 video_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream(
537 media_task_runner_, media_log_, waiting_for_decryption_key_cb_)); 536 media_task_runner_, media_log_, waiting_for_decryption_key_cb_));
538 video_decrypting_demuxer_stream_->Initialize( 537 video_decrypting_demuxer_stream_->Initialize(
539 video_stream_, set_cdm_ready_cb_, 538 video_stream_, set_cdm_ready_cb_,
540 base::Bind(&MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone, 539 base::Bind(&MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone,
541 media_weak_factory_.GetWeakPtr())); 540 media_weak_factory_.GetWeakPtr()));
542 } 541 }
543 542
544 void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone( 543 void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone(
545 media::PipelineStatus status) { 544 media::PipelineStatus status) {
546 DCHECK(media_task_runner_->BelongsToCurrentThread()); 545 DCHECK(media_task_runner_->BelongsToCurrentThread());
547 DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_; 546 DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
548 DCHECK(chunk_demuxer_); 547 DCHECK(chunk_demuxer_);
549 548
550 if (status != media::PIPELINE_OK) 549 if (status != media::PIPELINE_OK) {
551 audio_decrypting_demuxer_stream_.reset(); 550 audio_decrypting_demuxer_stream_.reset();
552 else 551 is_demuxer_ready_ = true;
ddorwin 2016/01/22 00:58:35 This is probably worth a comment (explaining why w
xhwang 2016/01/29 00:47:15 Done.
553 audio_stream_ = audio_decrypting_demuxer_stream_.get(); 552 NotifyDemuxerReady();
553 return;
554 }
555
556 audio_stream_ = audio_decrypting_demuxer_stream_.get();
554 557
555 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted()) { 558 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted()) {
556 InitVideoDecryptingDemuxerStream(); 559 InitVideoDecryptingDemuxerStream();
557 return; 560 return;
558 } 561 }
559 562
560 // Try to notify demuxer ready when audio DDS initialization finished and 563 // Try to notify demuxer ready when audio DDS initialization finished and
561 // video is not encrypted. 564 // video is not encrypted.
562 is_demuxer_ready_ = true; 565 is_demuxer_ready_ = true;
563 NotifyDemuxerReady(); 566 NotifyDemuxerReady();
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 configs->video_codec = config.codec(); 753 configs->video_codec = config.codec();
751 configs->video_size = config.natural_size(); 754 configs->video_size = config.natural_size();
752 configs->is_video_encrypted = config.is_encrypted(); 755 configs->is_video_encrypted = config.is_encrypted();
753 configs->video_extra_data = config.extra_data(); 756 configs->video_extra_data = config.extra_data();
754 return true; 757 return true;
755 } 758 }
756 return false; 759 return false;
757 } 760 }
758 761
759 } // namespace content 762 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698