| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index 3b373485a2ae011fd57fcf8bdd8e060aa1357bb7..bd58e7772fee1e6a975be1eed41e81ac82bd1948 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -577,12 +577,70 @@ bool WebMediaPlayerImpl::hasAudio() const {
|
| return pipeline_metadata_.has_audio;
|
| }
|
|
|
| +using RestartStreamPlaybackCB =
|
| + base::Callback<void(DemuxerStream*, base::TimeDelta)>;
|
| +
|
| +void OnEnabledAudioTracksChanged(
|
| + Demuxer* demuxer,
|
| + base::TimeDelta currentTime,
|
| + const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds,
|
| + const RestartStreamPlaybackCB& restart_stream_playback_cb) {
|
| + DemuxerStream* audio_stream = demuxer->GetStream(DemuxerStream::AUDIO);
|
| + bool enabled = false;
|
| + for (const auto& trackId : enabledTrackIds) {
|
| + const DemuxerStream* s = demuxer->GetDemuxerStreamByTrackId(trackId);
|
| + CHECK(s);
|
| + CHECK_EQ(s, audio_stream);
|
| + enabled = true;
|
| + }
|
| +
|
| + DVLOG(1) << __FUNCTION__ << (enabled ? " enabling" : " disabling")
|
| + << " audio_stream=" << audio_stream
|
| + << " currentTime=" << currentTime.InSecondsF();
|
| + bool was_disabled = !audio_stream->enabled();
|
| + audio_stream->set_enabled(enabled, currentTime);
|
| + if (enabled && was_disabled) {
|
| + restart_stream_playback_cb.Run(audio_stream, currentTime);
|
| + }
|
| +}
|
| +
|
| void WebMediaPlayerImpl::enabledAudioTracksChanged(
|
| const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) {
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| CHECK(demuxer_.get());
|
|
|
| - // TODO(servolk): Implement disabling/enabling audio streams.
|
| + media_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &OnEnabledAudioTracksChanged, demuxer_.get(),
|
| + base::TimeDelta::FromSecondsD(currentTime()), enabledTrackIds,
|
| + BindToCurrentLoop(base::Bind(
|
| + &WebMediaPlayerImpl::RestartStreamPlayback, AsWeakPtr()))));
|
| +}
|
| +
|
| +void OnSelectedVideoTrackChanged(
|
| + Demuxer* demuxer,
|
| + base::TimeDelta currentTime,
|
| + const std::vector<blink::WebMediaPlayer::TrackId>& selectedTrackIdVector,
|
| + const RestartStreamPlaybackCB& restart_stream_playback_cb) {
|
| + DemuxerStream* video_stream = demuxer->GetStream(DemuxerStream::VIDEO);
|
| + bool enabled = false;
|
| + if (!selectedTrackIdVector.empty()) {
|
| + const DemuxerStream* selectedVideoStream =
|
| + demuxer->GetDemuxerStreamByTrackId(selectedTrackIdVector[0]);
|
| + CHECK(selectedVideoStream);
|
| + CHECK_EQ(selectedVideoStream, video_stream);
|
| + enabled = true;
|
| + }
|
| +
|
| + DVLOG(1) << __FUNCTION__ << (enabled ? " enabling" : " disabling")
|
| + << " video_stream=" << video_stream
|
| + << " currentTime=" << currentTime.InSecondsF();
|
| + bool was_disabled = !video_stream->enabled();
|
| + video_stream->set_enabled(enabled, currentTime);
|
| + if (enabled && was_disabled) {
|
| + restart_stream_playback_cb.Run(video_stream, currentTime);
|
| + }
|
| }
|
|
|
| void WebMediaPlayerImpl::selectedVideoTrackChanged(
|
| @@ -590,7 +648,23 @@ void WebMediaPlayerImpl::selectedVideoTrackChanged(
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| CHECK(demuxer_.get());
|
|
|
| - // TODO(servolk): Implement disabling/enabling video stream.
|
| + std::vector<blink::WebMediaPlayer::TrackId> selectedTrackIdVector;
|
| + if (selectedTrackId) {
|
| + selectedTrackIdVector.push_back(*selectedTrackId);
|
| + }
|
| + media_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &OnSelectedVideoTrackChanged, demuxer_.get(),
|
| + base::TimeDelta::FromSecondsD(currentTime()), selectedTrackIdVector,
|
| + BindToCurrentLoop(base::Bind(
|
| + &WebMediaPlayerImpl::RestartStreamPlayback, AsWeakPtr()))));
|
| +}
|
| +
|
| +void WebMediaPlayerImpl::RestartStreamPlayback(DemuxerStream* stream,
|
| + base::TimeDelta time) {
|
| + DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| + pipeline_.RestartStreamPlayback(stream, time);
|
| }
|
|
|
| blink::WebSize WebMediaPlayerImpl::naturalSize() const {
|
|
|