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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 // TODO(xhwang): Figure out if we need to Reset the DDSs after Seeking or | 125 // TODO(xhwang): Figure out if we need to Reset the DDSs after Seeking or |
126 // before destroying them. | 126 // before destroying them. |
127 audio_decrypting_demuxer_stream_.reset(); | 127 audio_decrypting_demuxer_stream_.reset(); |
128 video_decrypting_demuxer_stream_.reset(); | 128 video_decrypting_demuxer_stream_.reset(); |
129 | 129 |
130 media_weak_factory_.InvalidateWeakPtrs(); | 130 media_weak_factory_.InvalidateWeakPtrs(); |
131 DCHECK(!media_weak_factory_.HasWeakPtrs()); | 131 DCHECK(!media_weak_factory_.HasWeakPtrs()); |
132 | 132 |
133 // The callback OnDemuxerStopDone() owns |this| and will delete it when | 133 // The callback OnDemuxerStopDone() owns |this| and will delete it when |
134 // called. Hence using base::Unretained(this) is safe here. | 134 // called. Hence using base::Unretained(this) is safe here. |
135 demuxer_->Stop(media::BindToLoop(main_loop_, | 135 demuxer_->Stop(base::Bind(&MediaSourceDelegate::OnDemuxerStopDone, |
136 base::Bind(&MediaSourceDelegate::OnDemuxerStopDone, | 136 base::Unretained(this))); |
137 base::Unretained(this)))); | |
138 } | 137 } |
139 | 138 |
140 void MediaSourceDelegate::InitializeMediaSource( | 139 void MediaSourceDelegate::InitializeMediaSource( |
141 const MediaSourceOpenedCB& media_source_opened_cb, | 140 const MediaSourceOpenedCB& media_source_opened_cb, |
142 const media::Demuxer::NeedKeyCB& need_key_cb, | 141 const media::Demuxer::NeedKeyCB& need_key_cb, |
143 const media::SetDecryptorReadyCB& set_decryptor_ready_cb, | 142 const media::SetDecryptorReadyCB& set_decryptor_ready_cb, |
144 const UpdateNetworkStateCB& update_network_state_cb, | 143 const UpdateNetworkStateCB& update_network_state_cb, |
145 const DurationChangeCB& duration_change_cb) { | 144 const DurationChangeCB& duration_change_cb) { |
146 DCHECK(main_loop_->BelongsToCurrentThread()); | 145 DCHECK(main_loop_->BelongsToCurrentThread()); |
147 DCHECK(!media_source_opened_cb.is_null()); | 146 DCHECK(!media_source_opened_cb.is_null()); |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 654 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
656 | 655 |
657 base::AutoLock auto_lock(seeking_lock_); | 656 base::AutoLock auto_lock(seeking_lock_); |
658 DCHECK(seeking_); | 657 DCHECK(seeking_); |
659 seeking_ = false; | 658 seeking_ = false; |
660 doing_browser_seek_ = false; | 659 doing_browser_seek_ = false; |
661 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_); | 660 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_); |
662 } | 661 } |
663 | 662 |
664 void MediaSourceDelegate::OnDemuxerStopDone() { | 663 void MediaSourceDelegate::OnDemuxerStopDone() { |
| 664 DCHECK(media_loop_->BelongsToCurrentThread()); |
| 665 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 666 main_loop_->PostTask( |
| 667 FROM_HERE, |
| 668 base::Bind(&MediaSourceDelegate::DeleteSelf, base::Unretained(this))); |
| 669 } |
| 670 |
| 671 void MediaSourceDelegate::DeleteSelf() { |
665 DCHECK(main_loop_->BelongsToCurrentThread()); | 672 DCHECK(main_loop_->BelongsToCurrentThread()); |
666 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 673 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
667 chunk_demuxer_.reset(); | 674 chunk_demuxer_.reset(); |
668 demuxer_ = NULL; | 675 demuxer_ = NULL; |
669 delete this; | 676 delete this; |
670 } | 677 } |
671 | 678 |
672 void MediaSourceDelegate::OnMediaConfigRequest() { | 679 void MediaSourceDelegate::OnMediaConfigRequest() { |
673 DCHECK(media_loop_->BelongsToCurrentThread()); | 680 DCHECK(media_loop_->BelongsToCurrentThread()); |
674 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 681 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 // current time have been garbage collected or removed by the web app, this is | 835 // current time have been garbage collected or removed by the web app, this is |
829 // unlikely. This may cause unexpected playback stall due to seek pending an | 836 // unlikely. This may cause unexpected playback stall due to seek pending an |
830 // append for a GOP prior to the last GOP demuxed. | 837 // append for a GOP prior to the last GOP demuxed. |
831 // TODO(wolenetz): Remove the possibility for this seek to cause unexpected | 838 // TODO(wolenetz): Remove the possibility for this seek to cause unexpected |
832 // player stall by replaying cached data since last keyframe in browser player | 839 // player stall by replaying cached data since last keyframe in browser player |
833 // rather than issuing browser seek. See http://crbug.com/304234. | 840 // rather than issuing browser seek. See http://crbug.com/304234. |
834 return seek_time; | 841 return seek_time; |
835 } | 842 } |
836 | 843 |
837 } // namespace content | 844 } // namespace content |
OLD | NEW |