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

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

Issue 416393003: Make Demuxer::Stop() synchronous. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix android Created 6 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/media/android/media_source_delegate.h ('k') | media/base/demuxer.h » ('j') | 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 <vector> 9 #include <vector>
10 10
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 audio_stream_ = NULL; 132 audio_stream_ = NULL;
133 video_stream_ = NULL; 133 video_stream_ = NULL;
134 // TODO(xhwang): Figure out if we need to Reset the DDSs after Seeking or 134 // TODO(xhwang): Figure out if we need to Reset the DDSs after Seeking or
135 // before destroying them. 135 // before destroying them.
136 audio_decrypting_demuxer_stream_.reset(); 136 audio_decrypting_demuxer_stream_.reset();
137 video_decrypting_demuxer_stream_.reset(); 137 video_decrypting_demuxer_stream_.reset();
138 138
139 media_weak_factory_.InvalidateWeakPtrs(); 139 media_weak_factory_.InvalidateWeakPtrs();
140 DCHECK(!media_weak_factory_.HasWeakPtrs()); 140 DCHECK(!media_weak_factory_.HasWeakPtrs());
141 141
142 // The callback OnDemuxerStopDone() owns |this| and will delete it when 142 chunk_demuxer_->Stop();
143 // called. Hence using base::Unretained(this) is safe here. 143 chunk_demuxer_.reset();
144 chunk_demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone, 144
145 base::Unretained(this))); 145 // The callback DeleteSelf() owns |this| and will delete it when called.
146 // Hence using base::Unretained(this) is safe here.
147 media_task_runner_->PostTask(
148 FROM_HERE,
149 base::Bind(&MediaSourceDelegate::DeleteSelf, base::Unretained(this)));
146 } 150 }
147 151
148 void MediaSourceDelegate::InitializeMediaSource( 152 void MediaSourceDelegate::InitializeMediaSource(
149 const MediaSourceOpenedCB& media_source_opened_cb, 153 const MediaSourceOpenedCB& media_source_opened_cb,
150 const media::Demuxer::NeedKeyCB& need_key_cb, 154 const media::Demuxer::NeedKeyCB& need_key_cb,
151 const media::SetDecryptorReadyCB& set_decryptor_ready_cb, 155 const media::SetDecryptorReadyCB& set_decryptor_ready_cb,
152 const UpdateNetworkStateCB& update_network_state_cb, 156 const UpdateNetworkStateCB& update_network_state_cb,
153 const DurationChangeCB& duration_change_cb) { 157 const DurationChangeCB& duration_change_cb) {
154 DCHECK(main_task_runner_->BelongsToCurrentThread()); 158 DCHECK(main_task_runner_->BelongsToCurrentThread());
155 DCHECK(!media_source_opened_cb.is_null()); 159 DCHECK(!media_source_opened_cb.is_null());
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 DCHECK(media_task_runner_->BelongsToCurrentThread()); 623 DCHECK(media_task_runner_->BelongsToCurrentThread());
620 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; 624 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
621 625
622 base::AutoLock auto_lock(seeking_lock_); 626 base::AutoLock auto_lock(seeking_lock_);
623 DCHECK(seeking_); 627 DCHECK(seeking_);
624 seeking_ = false; 628 seeking_ = false;
625 doing_browser_seek_ = false; 629 doing_browser_seek_ = false;
626 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_); 630 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_);
627 } 631 }
628 632
629 void MediaSourceDelegate::OnDemuxerStopDone() {
630 DCHECK(media_task_runner_->BelongsToCurrentThread());
631 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
632 main_task_runner_->PostTask(
633 FROM_HERE,
634 base::Bind(&MediaSourceDelegate::DeleteSelf, base::Unretained(this)));
635 }
636
637 void MediaSourceDelegate::DeleteSelf() { 633 void MediaSourceDelegate::DeleteSelf() {
638 DCHECK(main_task_runner_->BelongsToCurrentThread()); 634 DCHECK(main_task_runner_->BelongsToCurrentThread());
639 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; 635 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
640 chunk_demuxer_.reset();
641 delete this; 636 delete this;
642 } 637 }
643 638
644 void MediaSourceDelegate::NotifyDemuxerReady() { 639 void MediaSourceDelegate::NotifyDemuxerReady() {
645 DCHECK(media_task_runner_->BelongsToCurrentThread()); 640 DCHECK(media_task_runner_->BelongsToCurrentThread());
646 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; 641 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_;
647 DCHECK(is_demuxer_ready_); 642 DCHECK(is_demuxer_ready_);
648 643
649 scoped_ptr<DemuxerConfigs> configs(new DemuxerConfigs()); 644 scoped_ptr<DemuxerConfigs> configs(new DemuxerConfigs());
650 GetDemuxerConfigFromStream(configs.get(), true); 645 GetDemuxerConfigFromStream(configs.get(), true);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 configs->video_size = config.natural_size(); 751 configs->video_size = config.natural_size();
757 configs->is_video_encrypted = config.is_encrypted(); 752 configs->is_video_encrypted = config.is_encrypted();
758 configs->video_extra_data = std::vector<uint8>( 753 configs->video_extra_data = std::vector<uint8>(
759 config.extra_data(), config.extra_data() + config.extra_data_size()); 754 config.extra_data(), config.extra_data() + config.extra_data_size());
760 return true; 755 return true;
761 } 756 }
762 return false; 757 return false;
763 } 758 }
764 759
765 } // namespace content 760 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/media_source_delegate.h ('k') | media/base/demuxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698