| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index 3749bf2f1878ab954dc318a122e029e88e123d58..a007f84d2e842a5b2224ee045acef7814d55500b 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -843,6 +843,46 @@ void WebMediaPlayerImpl::OnEncryptedMediaInitData(
|
| base::saturated_cast<unsigned int>(init_data.size()));
|
| }
|
|
|
| +void WebMediaPlayerImpl::OnMediaTracksUpdated(scoped_ptr<MediaTracks> tracks) {
|
| + // For MSE/chunk_demuxer case the media tracks should be handled by WSBI
|
| + DCHECK(!chunk_demuxer_);
|
| + DCHECK(client_);
|
| +
|
| + // Remove the old tracks first, if any were present
|
| + while (!blink_audio_tracks_.empty()) {
|
| + client_->removeAudioTrack(blink_audio_tracks_[0]);
|
| + blink_audio_tracks_.erase(blink_audio_tracks_.begin());
|
| + }
|
| + while (!blink_video_tracks_.empty()) {
|
| + client_->removeVideoTrack(blink_video_tracks_[0]);
|
| + blink_audio_tracks_.erase(blink_audio_tracks_.begin());
|
| + }
|
| +
|
| + // Now report the new media tracks to blink
|
| + for (const auto& track : tracks->tracks()) {
|
| + if (track->type() == MediaTrack::Audio) {
|
| + auto track_id = client_->addAudioTrack(
|
| + blink::WebString::fromUTF8(track->id()),
|
| + blink::WebMediaPlayerClient::AudioTrackKindMain,
|
| + blink::WebString::fromUTF8(track->label()),
|
| + blink::WebString::fromUTF8(track->language()),
|
| + /*enabled*/ true);
|
| + blink_audio_tracks_.push_back(track_id);
|
| + } else if (track->type() == MediaTrack::Video) {
|
| + auto track_id = client_->addVideoTrack(
|
| + blink::WebString::fromUTF8(track->id()),
|
| + blink::WebMediaPlayerClient::VideoTrackKindMain,
|
| + blink::WebString::fromUTF8(track->label()),
|
| + blink::WebString::fromUTF8(track->language()),
|
| + /*selected*/ true);
|
| + blink_video_tracks_.push_back(track_id);
|
| + } else {
|
| + // Text tracks are not supported yet.
|
| + NOTREACHED();
|
| + }
|
| + }
|
| +}
|
| +
|
| void WebMediaPlayerImpl::OnWaitingForDecryptionKey() {
|
| encrypted_client_->didBlockPlaybackWaitingForKey();
|
|
|
| @@ -1371,6 +1411,9 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb =
|
| BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData);
|
|
|
| + Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb =
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnMediaTracksUpdated);
|
| +
|
| // Figure out which demuxer to use.
|
| if (load_type_ != LoadTypeMediaSource) {
|
| DCHECK(!chunk_demuxer_);
|
| @@ -1378,7 +1421,8 @@ void WebMediaPlayerImpl::StartPipeline() {
|
|
|
| #if !defined(MEDIA_DISABLE_FFMPEG)
|
| demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(),
|
| - encrypted_media_init_data_cb, media_log_));
|
| + encrypted_media_init_data_cb,
|
| + media_tracks_updated_cb, media_log_));
|
| #else
|
| OnPipelineError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN);
|
| return;
|
|
|