OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |