Index: media/base/pipeline_impl.cc |
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc |
index 36747bd48b3cd7ba73421aa5d2de35966c903170..c7ee5b0965a52dfa09d2c818c95424edca03412f 100644 |
--- a/media/base/pipeline_impl.cc |
+++ b/media/base/pipeline_impl.cc |
@@ -57,6 +57,15 @@ class PipelineImpl::RendererWrapper : public DemuxerHost, |
PipelineStatistics GetStatistics() const; |
void SetCdm(CdmContext* cdm_context, const CdmAttachedCB& cdm_attached_cb); |
+ // |enabledTrackIds| contains track ids of enabled audio tracks. |
+ void OnEnabledAudioTracksChanged( |
+ const std::vector<MediaTrack::Id>& enabledTrackIds); |
+ |
+ // |trackId| either empty, which means no video track is selected, or contain |
+ // one element - the selected video track id. |
+ void OnSelectedVideoTrackChanged( |
+ const std::vector<MediaTrack::Id>& selectedTrackId); |
+ |
private: |
// Contains state shared between main and media thread. |
// Main thread can only read. Media thread can both - read and write. |
@@ -224,6 +233,24 @@ void PipelineImpl::Start(Demuxer* demuxer, |
weak_factory_.GetWeakPtr())); |
} |
+void PipelineImpl::OnEnabledAudioTracksChanged( |
+ const std::vector<MediaTrack::Id>& enabledTrackIds) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ media_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&RendererWrapper::OnEnabledAudioTracksChanged, |
+ base::Unretained(renderer_wrapper_.get()), enabledTrackIds)); |
+} |
+ |
+void PipelineImpl::OnSelectedVideoTrackChanged( |
+ const std::vector<MediaTrack::Id>& selectedTrackId) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ media_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&RendererWrapper::OnSelectedVideoTrackChanged, |
+ base::Unretained(renderer_wrapper_.get()), selectedTrackId)); |
+} |
+ |
void PipelineImpl::Stop() { |
DVLOG(2) << __FUNCTION__; |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -519,6 +546,40 @@ void PipelineImpl::RendererWrapper::OnEnded() { |
RunEndedCallbackIfNeeded(); |
} |
+void PipelineImpl::RendererWrapper::OnEnabledAudioTracksChanged( |
+ const std::vector<MediaTrack::Id>& enabledTrackIds) { |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
+ |
+ // This might happen at the very beginning of the media playback, when the |
+ // first video track gets selected by default before the playback has been |
+ // started, so we don't need to react to this. |
+ if (!demuxer_ || !shared_state_.renderer) { |
+ return; |
+ } |
+ |
+ base::TimeDelta currTime = (state_ == kPlaying) |
+ ? shared_state_.renderer->GetMediaTime() |
+ : start_timestamp_; |
+ demuxer_->OnEnabledAudioTracksChanged(enabledTrackIds, currTime); |
+} |
+ |
+void PipelineImpl::RendererWrapper::OnSelectedVideoTrackChanged( |
+ const std::vector<MediaTrack::Id>& selectedTrackId) { |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
+ |
+ // This might happen at the very beginning of the media playback, when the |
+ // first video track gets selected by default before the playback has been |
chcunningham
2016/06/24 23:32:55
What if something other than the first/default tra
|
+ // started, so we don't need to react to this. |
+ if (!demuxer_ || !shared_state_.renderer) { |
+ return; |
+ } |
+ |
+ base::TimeDelta currTime = (state_ == kPlaying) |
+ ? shared_state_.renderer->GetMediaTime() |
+ : start_timestamp_; |
+ demuxer_->OnSelectedVideoTrackChanged(selectedTrackId, currTime); |
+} |
+ |
void PipelineImpl::RendererWrapper::OnStatisticsUpdate( |
const PipelineStatistics& stats) { |
DVLOG(3) << __FUNCTION__; |