| 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 <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 // |this| may be destroyed at this point in time as a result of running | 140 // |this| may be destroyed at this point in time as a result of running |
| 141 // |stop_cb|. | 141 // |stop_cb|. |
| 142 stop_cb.Run(); | 142 stop_cb.Run(); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void MediaSourceDelegate::InitializeMediaSource( | 145 void MediaSourceDelegate::InitializeMediaSource( |
| 146 const MediaSourceOpenedCB& media_source_opened_cb, | 146 const MediaSourceOpenedCB& media_source_opened_cb, |
| 147 const media::Demuxer::EncryptedMediaInitDataCB& | 147 const media::Demuxer::EncryptedMediaInitDataCB& |
| 148 encrypted_media_init_data_cb, | 148 encrypted_media_init_data_cb, |
| 149 const media::SetDecryptorReadyCB& set_decryptor_ready_cb, | 149 const media::SetCdmReadyCB& set_cdm_ready_cb, |
| 150 const UpdateNetworkStateCB& update_network_state_cb, | 150 const UpdateNetworkStateCB& update_network_state_cb, |
| 151 const DurationChangeCB& duration_change_cb, | 151 const DurationChangeCB& duration_change_cb, |
| 152 const base::Closure& waiting_for_decryption_key_cb) { | 152 const base::Closure& waiting_for_decryption_key_cb) { |
| 153 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 153 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 154 DCHECK(!media_source_opened_cb.is_null()); | 154 DCHECK(!media_source_opened_cb.is_null()); |
| 155 media_source_opened_cb_ = media_source_opened_cb; | 155 media_source_opened_cb_ = media_source_opened_cb; |
| 156 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; | 156 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; |
| 157 set_decryptor_ready_cb_ = media::BindToCurrentLoop(set_decryptor_ready_cb); | 157 set_cdm_ready_cb_ = media::BindToCurrentLoop(set_cdm_ready_cb); |
| 158 update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb); | 158 update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb); |
| 159 duration_change_cb_ = duration_change_cb; | 159 duration_change_cb_ = duration_change_cb; |
| 160 waiting_for_decryption_key_cb_ = | 160 waiting_for_decryption_key_cb_ = |
| 161 media::BindToCurrentLoop(waiting_for_decryption_key_cb); | 161 media::BindToCurrentLoop(waiting_for_decryption_key_cb); |
| 162 access_unit_size_ = kAccessUnitSizeForMediaSource; | 162 access_unit_size_ = kAccessUnitSizeForMediaSource; |
| 163 | 163 |
| 164 chunk_demuxer_.reset(new media::ChunkDemuxer( | 164 chunk_demuxer_.reset(new media::ChunkDemuxer( |
| 165 media::BindToCurrentLoop( | 165 media::BindToCurrentLoop( |
| 166 base::Bind(&MediaSourceDelegate::OnDemuxerOpened, main_weak_this_)), | 166 base::Bind(&MediaSourceDelegate::OnDemuxerOpened, main_weak_this_)), |
| 167 media::BindToCurrentLoop(base::Bind( | 167 media::BindToCurrentLoop(base::Bind( |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 | 489 |
| 490 if (status != media::PIPELINE_OK) { | 490 if (status != media::PIPELINE_OK) { |
| 491 OnDemuxerError(status); | 491 OnDemuxerError(status); |
| 492 return; | 492 return; |
| 493 } | 493 } |
| 494 | 494 |
| 495 audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO); | 495 audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO); |
| 496 video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO); | 496 video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO); |
| 497 | 497 |
| 498 if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted() && | 498 if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted() && |
| 499 !set_decryptor_ready_cb_.is_null()) { | 499 !set_cdm_ready_cb_.is_null()) { |
| 500 InitAudioDecryptingDemuxerStream(); | 500 InitAudioDecryptingDemuxerStream(); |
| 501 // InitVideoDecryptingDemuxerStream() will be called in | 501 // InitVideoDecryptingDemuxerStream() will be called in |
| 502 // OnAudioDecryptingDemuxerStreamInitDone(). | 502 // OnAudioDecryptingDemuxerStreamInitDone(). |
| 503 return; | 503 return; |
| 504 } | 504 } |
| 505 | 505 |
| 506 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted() && | 506 if (video_stream_ && video_stream_->video_decoder_config().is_encrypted() && |
| 507 !set_decryptor_ready_cb_.is_null()) { | 507 !set_cdm_ready_cb_.is_null()) { |
| 508 InitVideoDecryptingDemuxerStream(); | 508 InitVideoDecryptingDemuxerStream(); |
| 509 return; | 509 return; |
| 510 } | 510 } |
| 511 | 511 |
| 512 // Notify demuxer ready when both streams are not encrypted. | 512 // Notify demuxer ready when both streams are not encrypted. |
| 513 is_demuxer_ready_ = true; | 513 is_demuxer_ready_ = true; |
| 514 NotifyDemuxerReady(); | 514 NotifyDemuxerReady(); |
| 515 } | 515 } |
| 516 | 516 |
| 517 void MediaSourceDelegate::InitAudioDecryptingDemuxerStream() { | 517 void MediaSourceDelegate::InitAudioDecryptingDemuxerStream() { |
| 518 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 518 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 519 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 519 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 520 DCHECK(!set_decryptor_ready_cb_.is_null()); | 520 DCHECK(!set_cdm_ready_cb_.is_null()); |
| 521 | 521 |
| 522 audio_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( | 522 audio_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( |
| 523 media_task_runner_, media_log_, set_decryptor_ready_cb_, | 523 media_task_runner_, media_log_, set_cdm_ready_cb_, |
| 524 waiting_for_decryption_key_cb_)); | 524 waiting_for_decryption_key_cb_)); |
| 525 audio_decrypting_demuxer_stream_->Initialize( | 525 audio_decrypting_demuxer_stream_->Initialize( |
| 526 audio_stream_, | 526 audio_stream_, |
| 527 base::Bind(&MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone, | 527 base::Bind(&MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone, |
| 528 media_weak_factory_.GetWeakPtr())); | 528 media_weak_factory_.GetWeakPtr())); |
| 529 } | 529 } |
| 530 | 530 |
| 531 void MediaSourceDelegate::InitVideoDecryptingDemuxerStream() { | 531 void MediaSourceDelegate::InitVideoDecryptingDemuxerStream() { |
| 532 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 532 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 533 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 533 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 534 DCHECK(!set_decryptor_ready_cb_.is_null()); | 534 DCHECK(!set_cdm_ready_cb_.is_null()); |
| 535 | 535 |
| 536 video_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( | 536 video_decrypting_demuxer_stream_.reset(new media::DecryptingDemuxerStream( |
| 537 media_task_runner_, media_log_, set_decryptor_ready_cb_, | 537 media_task_runner_, media_log_, set_cdm_ready_cb_, |
| 538 waiting_for_decryption_key_cb_)); | 538 waiting_for_decryption_key_cb_)); |
| 539 video_decrypting_demuxer_stream_->Initialize( | 539 video_decrypting_demuxer_stream_->Initialize( |
| 540 video_stream_, | 540 video_stream_, |
| 541 base::Bind(&MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone, | 541 base::Bind(&MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone, |
| 542 media_weak_factory_.GetWeakPtr())); | 542 media_weak_factory_.GetWeakPtr())); |
| 543 } | 543 } |
| 544 | 544 |
| 545 void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone( | 545 void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone( |
| 546 media::PipelineStatus status) { | 546 media::PipelineStatus status) { |
| 547 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 547 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 configs->video_codec = config.codec(); | 751 configs->video_codec = config.codec(); |
| 752 configs->video_size = config.natural_size(); | 752 configs->video_size = config.natural_size(); |
| 753 configs->is_video_encrypted = config.is_encrypted(); | 753 configs->is_video_encrypted = config.is_encrypted(); |
| 754 configs->video_extra_data = config.extra_data(); | 754 configs->video_extra_data = config.extra_data(); |
| 755 return true; | 755 return true; |
| 756 } | 756 } |
| 757 return false; | 757 return false; |
| 758 } | 758 } |
| 759 | 759 |
| 760 } // namespace content | 760 } // namespace content |
| OLD | NEW |