| 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 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 649 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 648 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 650 | 649 |
| 651 base::AutoLock auto_lock(seeking_lock_); | 650 base::AutoLock auto_lock(seeking_lock_); |
| 652 DCHECK(seeking_); | 651 DCHECK(seeking_); |
| 653 seeking_ = false; | 652 seeking_ = false; |
| 654 doing_browser_seek_ = false; | 653 doing_browser_seek_ = false; |
| 655 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_); | 654 demuxer_client_->DemuxerSeekDone(demuxer_client_id_, browser_seek_time_); |
| 656 } | 655 } |
| 657 | 656 |
| 658 void MediaSourceDelegate::OnDemuxerStopDone() { | 657 void MediaSourceDelegate::OnDemuxerStopDone() { |
| 658 DCHECK(media_loop_->BelongsToCurrentThread()); |
| 659 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 660 main_loop_->PostTask( |
| 661 FROM_HERE, |
| 662 base::Bind(&MediaSourceDelegate::DeleteSelf, base::Unretained(this))); |
| 663 } |
| 664 |
| 665 void MediaSourceDelegate::DeleteSelf() { |
| 659 DCHECK(main_loop_->BelongsToCurrentThread()); | 666 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 660 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 667 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| 661 chunk_demuxer_.reset(); | 668 chunk_demuxer_.reset(); |
| 662 demuxer_ = NULL; | 669 demuxer_ = NULL; |
| 663 delete this; | 670 delete this; |
| 664 } | 671 } |
| 665 | 672 |
| 666 void MediaSourceDelegate::OnMediaConfigRequest() { | 673 void MediaSourceDelegate::OnMediaConfigRequest() { |
| 667 DCHECK(media_loop_->BelongsToCurrentThread()); | 674 DCHECK(media_loop_->BelongsToCurrentThread()); |
| 668 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; | 675 DVLOG(1) << __FUNCTION__ << " : " << demuxer_client_id_; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 822 // current time have been garbage collected or removed by the web app, this is | 829 // current time have been garbage collected or removed by the web app, this is |
| 823 // unlikely. This may cause unexpected playback stall due to seek pending an | 830 // unlikely. This may cause unexpected playback stall due to seek pending an |
| 824 // append for a GOP prior to the last GOP demuxed. | 831 // append for a GOP prior to the last GOP demuxed. |
| 825 // TODO(wolenetz): Remove the possibility for this seek to cause unexpected | 832 // TODO(wolenetz): Remove the possibility for this seek to cause unexpected |
| 826 // player stall by replaying cached data since last keyframe in browser player | 833 // player stall by replaying cached data since last keyframe in browser player |
| 827 // rather than issuing browser seek. See http://crbug.com/304234. | 834 // rather than issuing browser seek. See http://crbug.com/304234. |
| 828 return seek_time; | 835 return seek_time; |
| 829 } | 836 } |
| 830 | 837 |
| 831 } // namespace content | 838 } // namespace content |
| OLD | NEW |