| Index: content/renderer/media/android/media_source_delegate.cc
|
| diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc
|
| index bd4cf1a02adcf5ee482d2fe9117035aca8e8136c..0476633281c530097f1053bdde88a99eecc61bcf 100644
|
| --- a/content/renderer/media/android/media_source_delegate.cc
|
| +++ b/content/renderer/media/android/media_source_delegate.cc
|
| @@ -58,7 +58,6 @@ MediaSourceDelegate::MediaSourceDelegate(
|
| demuxer_client_(demuxer_client),
|
| demuxer_client_id_(demuxer_client_id),
|
| media_log_(media_log),
|
| - demuxer_(NULL),
|
| is_demuxer_ready_(false),
|
| audio_stream_(NULL),
|
| video_stream_(NULL),
|
| @@ -66,9 +65,6 @@ MediaSourceDelegate::MediaSourceDelegate(
|
| doing_browser_seek_(false),
|
| browser_seek_time_(media::kNoTimestamp()),
|
| expecting_regular_seek_(false),
|
| -#if defined(GOOGLE_TV)
|
| - key_added_(false),
|
| -#endif
|
| access_unit_size_(0) {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
| }
|
| @@ -77,7 +73,6 @@ MediaSourceDelegate::~MediaSourceDelegate() {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
|
| DCHECK(!chunk_demuxer_);
|
| - DCHECK(!demuxer_);
|
| DCHECK(!demuxer_client_);
|
| DCHECK(!audio_decrypting_demuxer_stream_);
|
| DCHECK(!video_decrypting_demuxer_stream_);
|
| @@ -89,7 +84,7 @@ void MediaSourceDelegate::Destroy() {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
|
|
|
| - if (!demuxer_) {
|
| + if (!chunk_demuxer_) {
|
| DCHECK(!demuxer_client_);
|
| delete this;
|
| return;
|
| @@ -102,8 +97,7 @@ void MediaSourceDelegate::Destroy() {
|
| main_weak_factory_.InvalidateWeakPtrs();
|
| DCHECK(!main_weak_factory_.HasWeakPtrs());
|
|
|
| - if (chunk_demuxer_)
|
| - chunk_demuxer_->Shutdown();
|
| + chunk_demuxer_->Shutdown();
|
|
|
| // |this| will be transferred to the callback StopDemuxer() and
|
| // OnDemuxerStopDone(). They own |this| and OnDemuxerStopDone() will delete
|
| @@ -115,7 +109,7 @@ void MediaSourceDelegate::Destroy() {
|
|
|
| void MediaSourceDelegate::StopDemuxer() {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| - DCHECK(demuxer_);
|
| + DCHECK(chunk_demuxer_);
|
|
|
| demuxer_client_->RemoveDelegate(demuxer_client_id_);
|
| demuxer_client_ = NULL;
|
| @@ -132,8 +126,8 @@ void MediaSourceDelegate::StopDemuxer() {
|
|
|
| // The callback OnDemuxerStopDone() owns |this| and will delete it when
|
| // called. Hence using base::Unretained(this) is safe here.
|
| - demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone,
|
| - base::Unretained(this)));
|
| + chunk_demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void MediaSourceDelegate::InitializeMediaSource(
|
| @@ -157,7 +151,6 @@ void MediaSourceDelegate::InitializeMediaSource(
|
| media::BindToCurrentLoop(base::Bind(
|
| &MediaSourceDelegate::OnNeedKey, main_weak_this_)),
|
| base::Bind(&LogMediaSourceError, media_log_)));
|
| - demuxer_ = chunk_demuxer_.get();
|
|
|
| // |this| will be retained until StopDemuxer() is posted, so Unretained() is
|
| // safe here.
|
| @@ -169,31 +162,12 @@ void MediaSourceDelegate::InitializeMediaSource(
|
| void MediaSourceDelegate::InitializeDemuxer() {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| demuxer_client_->AddDelegate(demuxer_client_id_, this);
|
| - demuxer_->Initialize(this, base::Bind(&MediaSourceDelegate::OnDemuxerInitDone,
|
| + chunk_demuxer_->Initialize(this,
|
| + base::Bind(&MediaSourceDelegate::OnDemuxerInitDone,
|
| media_weak_factory_.GetWeakPtr()),
|
| - false);
|
| + false);
|
| }
|
|
|
| -#if defined(GOOGLE_TV)
|
| -void MediaSourceDelegate::InitializeMediaStream(
|
| - media::Demuxer* demuxer,
|
| - const UpdateNetworkStateCB& update_network_state_cb) {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| - DCHECK(demuxer);
|
| - demuxer_ = demuxer;
|
| - update_network_state_cb_ = media::BindToCurrentLoop(update_network_state_cb);
|
| - // When playing Media Stream, don't wait to accumulate multiple packets per
|
| - // IPC communication.
|
| - access_unit_size_ = 1;
|
| -
|
| - // |this| will be retained until StopDemuxer() is posted, so Unretained() is
|
| - // safe here.
|
| - media_loop_->PostTask(FROM_HERE,
|
| - base::Bind(&MediaSourceDelegate::InitializeDemuxer,
|
| - base::Unretained(this)));
|
| -}
|
| -#endif
|
| -
|
| const blink::WebTimeRanges& MediaSourceDelegate::Buffered() {
|
| buffered_web_time_ranges_ =
|
| ConvertToWebTimeRanges(buffered_time_ranges_);
|
| @@ -313,7 +287,7 @@ void MediaSourceDelegate::Seek(
|
| void MediaSourceDelegate::SeekInternal(const base::TimeDelta& seek_time) {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| DCHECK(IsSeeking());
|
| - demuxer_->Seek(seek_time, base::Bind(
|
| + chunk_demuxer_->Seek(seek_time, base::Bind(
|
| &MediaSourceDelegate::OnDemuxerSeekDone,
|
| media_weak_factory_.GetWeakPtr()));
|
| }
|
| @@ -388,7 +362,7 @@ void MediaSourceDelegate::OnBufferReady(
|
| << ((!buffer || buffer->end_of_stream()) ?
|
| -1 : buffer->timestamp().InMilliseconds())
|
| << ") : " << demuxer_client_id_;
|
| - DCHECK(demuxer_);
|
| + DCHECK(chunk_demuxer_);
|
|
|
| // No new OnReadFromDemuxer() will be called during seeking. So this callback
|
| // must be from previous OnReadFromDemuxer() call and should be ignored.
|
| @@ -451,7 +425,6 @@ void MediaSourceDelegate::OnBufferReady(
|
|
|
| data->access_units[index].data.assign(
|
| buffer->data(), buffer->data() + buffer->data_size());
|
| -#if !defined(GOOGLE_TV)
|
| // Vorbis needs 4 extra bytes padding on Android. Check
|
| // NuMediaExtractor.cpp in Android source code.
|
| if (is_audio && media::kCodecVorbis ==
|
| @@ -460,7 +433,6 @@ void MediaSourceDelegate::OnBufferReady(
|
| data->access_units[index].data.end(), kVorbisPadding,
|
| kVorbisPadding + 4);
|
| }
|
| -#endif
|
| if (buffer->decrypt_config()) {
|
| data->access_units[index].key_id = std::vector<char>(
|
| buffer->decrypt_config()->key_id().begin(),
|
| @@ -508,15 +480,15 @@ void MediaSourceDelegate::RemoveTextStream(
|
| void MediaSourceDelegate::OnDemuxerInitDone(media::PipelineStatus status) {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
|
| - DCHECK(demuxer_);
|
| + DCHECK(chunk_demuxer_);
|
|
|
| if (status != media::PIPELINE_OK) {
|
| OnDemuxerError(status);
|
| return;
|
| }
|
|
|
| - audio_stream_ = demuxer_->GetStream(DemuxerStream::AUDIO);
|
| - video_stream_ = demuxer_->GetStream(DemuxerStream::VIDEO);
|
| + audio_stream_ = chunk_demuxer_->GetStream(DemuxerStream::AUDIO);
|
| + video_stream_ = chunk_demuxer_->GetStream(DemuxerStream::VIDEO);
|
|
|
| if (audio_stream_ && audio_stream_->audio_decoder_config().is_encrypted() &&
|
| !set_decryptor_ready_cb_.is_null()) {
|
| @@ -568,7 +540,7 @@ void MediaSourceDelegate::OnAudioDecryptingDemuxerStreamInitDone(
|
| media::PipelineStatus status) {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
|
| - DCHECK(demuxer_);
|
| + DCHECK(chunk_demuxer_);
|
|
|
| if (status != media::PIPELINE_OK)
|
| audio_decrypting_demuxer_stream_.reset();
|
| @@ -591,7 +563,7 @@ void MediaSourceDelegate::OnVideoDecryptingDemuxerStreamInitDone(
|
| media::PipelineStatus status) {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << "(" << status << ") : " << demuxer_client_id_;
|
| - DCHECK(demuxer_);
|
| + DCHECK(chunk_demuxer_);
|
|
|
| if (status != media::PIPELINE_OK)
|
| video_decrypting_demuxer_stream_.reset();
|
| @@ -666,7 +638,6 @@ void MediaSourceDelegate::DeleteSelf() {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
| DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
|
| chunk_demuxer_.reset();
|
| - demuxer_ = NULL;
|
| delete this;
|
| }
|
|
|
| @@ -677,42 +648,9 @@ void MediaSourceDelegate::OnMediaConfigRequest() {
|
| NotifyDemuxerReady();
|
| }
|
|
|
| -#if defined(GOOGLE_TV)
|
| -// TODO(kjyoun): Enhance logic to detect when to call NotifyDemuxerReady()
|
| -// For now, we call it when the first key is added. See http://crbug.com/255781
|
| -void MediaSourceDelegate::NotifyKeyAdded(const std::string& key_system) {
|
| - if (!media_loop_->BelongsToCurrentThread()) {
|
| - media_loop_->PostTask(FROM_HERE,
|
| - base::Bind(&MediaSourceDelegate::NotifyKeyAdded,
|
| - base::Unretained(this), key_system));
|
| - return;
|
| - }
|
| - DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
|
| - if (key_added_)
|
| - return;
|
| - key_added_ = true;
|
| - key_system_ = key_system;
|
| - if (!CanNotifyDemuxerReady())
|
| - return;
|
| - if (HasEncryptedStream())
|
| - NotifyDemuxerReady();
|
| -}
|
| -#endif // defined(GOOGLE_TV)
|
| -
|
| bool MediaSourceDelegate::CanNotifyDemuxerReady() {
|
| DCHECK(media_loop_->BelongsToCurrentThread());
|
| - // This can happen when a key is added before the demuxer is initialized.
|
| - // See NotifyKeyAdded().
|
| - // TODO(kjyoun): Remove NotifyDemxuerReady() call from NotifyKeyAdded() so
|
| - // that we can remove all is_demuxer_ready_/key_added_/key_system_ madness.
|
| - // See http://crbug.com/255781
|
| - if (!is_demuxer_ready_)
|
| - return false;
|
| -#if defined(GOOGLE_TV)
|
| - if (HasEncryptedStream() && !key_added_)
|
| - return false;
|
| -#endif // defined(GOOGLE_TV)
|
| - return true;
|
| + return is_demuxer_ready_;
|
| }
|
|
|
| void MediaSourceDelegate::NotifyDemuxerReady() {
|
| @@ -741,10 +679,6 @@ void MediaSourceDelegate::NotifyDemuxerReady() {
|
| }
|
| configs->duration_ms = GetDurationMs();
|
|
|
| -#if defined(GOOGLE_TV)
|
| - configs->key_system = HasEncryptedStream() ? key_system_ : "";
|
| -#endif
|
| -
|
| if (demuxer_client_)
|
| demuxer_client_->DemuxerReady(demuxer_client_id_, *configs);
|
| }
|
|
|