Chromium Code Reviews| Index: content/renderer/media/webmediaplayer_impl.cc |
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc |
| index 94bb678921c7ad5930f53d3aafaca2c370264f65..dfdf88700a7b86dd4ef54a78913cb62ed45ae942 100644 |
| --- a/content/renderer/media/webmediaplayer_impl.cc |
| +++ b/content/renderer/media/webmediaplayer_impl.cc |
| @@ -37,6 +37,8 @@ |
| #include "media/base/media_log.h" |
| #include "media/base/media_switches.h" |
| #include "media/base/pipeline.h" |
| +#include "media/base/text_cue.h" |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
nit: no longer needed.
Matthew Heaney (Chromium)
2013/10/13 05:30:17
Done.
|
| +#include "media/base/text_renderer.h" |
| #include "media/base/video_frame.h" |
| #include "media/filters/audio_renderer_impl.h" |
| #include "media/filters/chunk_demuxer.h" |
| @@ -46,6 +48,7 @@ |
| #include "media/filters/gpu_video_accelerator_factories.h" |
| #include "media/filters/gpu_video_decoder.h" |
| #include "media/filters/opus_audio_decoder.h" |
| +#include "media/filters/text_decoder_impl.h" |
| #include "media/filters/video_renderer_base.h" |
| #include "media/filters/vpx_video_decoder.h" |
| #include "third_party/WebKit/public/platform/WebMediaSource.h" |
| @@ -948,6 +951,8 @@ scoped_ptr<media::TextTrack> |
| WebMediaPlayerImpl::OnTextTrack(media::TextKind kind, |
| const std::string& label, |
| const std::string& language) { |
| + DCHECK(main_loop_->BelongsToCurrentThread()); |
| + |
| typedef WebInbandTextTrackImpl::Kind webkind_t; |
| const webkind_t webkind = static_cast<webkind_t>(kind); |
| const WebKit::WebString weblabel = WebKit::WebString::fromUTF8(label); |
| @@ -957,10 +962,22 @@ WebMediaPlayerImpl::OnTextTrack(media::TextKind kind, |
| new WebInbandTextTrackImpl(webkind, weblabel, weblanguage, |
| text_track_index_++); |
| - return scoped_ptr<media::TextTrack>(new TextTrackImpl(GetClient(), |
| + return scoped_ptr<media::TextTrack>(new TextTrackImpl(main_loop_, |
| + GetClient(), |
| text_track)); |
| } |
| +void WebMediaPlayerImpl::OnAddTextStream( |
| + media::DemuxerStream* text_stream, |
| + media::TextKind kind, |
| + const std::string& label, |
| + const std::string& language, |
| + const media::AddTextTrackDoneCB& done_cb) { |
| + DCHECK(main_loop_->BelongsToCurrentThread()); |
| + scoped_ptr<media::TextTrack> text_track = OnTextTrack(kind, label, language); |
| + done_cb.Run(text_stream, text_track.Pass()); |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
WebMediaPlayerImpl should not need to know about D
Matthew Heaney (Chromium)
2013/10/13 05:30:17
Done.
|
| +} |
| + |
| void WebMediaPlayerImpl::OnKeyError(const std::string& session_id, |
| media::MediaKeys::KeyError error_code, |
| int system_code) { |
| @@ -1029,6 +1046,9 @@ void WebMediaPlayerImpl::StartPipeline() { |
| UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback", |
| (load_type_ == LoadTypeMediaSource)); |
| + const bool enable_inband_text_tracks = |
| + cmd_line->HasSwitch(switches::kEnableInbandTextTracks); |
| + |
| // Figure out which demuxer to use. |
| if (load_type_ != LoadTypeMediaSource) { |
| DCHECK(!chunk_demuxer_); |
| @@ -1037,14 +1057,17 @@ void WebMediaPlayerImpl::StartPipeline() { |
| demuxer_.reset(new media::FFmpegDemuxer( |
| media_loop_, data_source_.get(), |
| BIND_TO_RENDER_LOOP_1(&WebMediaPlayerImpl::OnNeedKey, ""), |
| + enable_inband_text_tracks, |
| media_log_)); |
| } else { |
| DCHECK(!chunk_demuxer_); |
| DCHECK(!data_source_); |
| + // TODO(matthewjheaney): Once we have resolved the threading issues, |
| + // change the chunk demuxer to user the same mechanism as for ffmpeg. |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
nit: s/user/use/.
Matthew Heaney (Chromium)
2013/10/13 05:30:17
Done.
|
| media::AddTextTrackCB add_text_track_cb; |
| - if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
| + if (enable_inband_text_tracks) { |
| add_text_track_cb = |
| base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this)); |
| } |
| @@ -1122,6 +1145,22 @@ void WebMediaPlayerImpl::StartPipeline() { |
| true)); |
| filter_collection->SetVideoRenderer(video_renderer.Pass()); |
| + if (load_type_ != LoadTypeMediaSource && enable_inband_text_tracks) { |
| + scoped_ptr<media::TextDecoder> text_decoder( |
| + new media::TextDecoderImpl(media_loop_)); |
|
acolwell GONE FROM CHROMIUM
2013/10/08 15:45:24
Move this into the TextRenderer constructor since
Matthew Heaney (Chromium)
2013/10/13 05:30:17
Done.
|
| + |
| + media::AddTextTrackCB2 add_text_track_cb = |
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextStream); |
| + |
| + scoped_ptr<media::TextRenderer> text_renderer( |
| + new media::TextRenderer( |
| + media_loop_, |
| + text_decoder.Pass(), |
| + add_text_track_cb)); |
| + |
| + filter_collection->SetTextRenderer(text_renderer.Pass()); |
| + } |
| + |
| // ... and we're ready to go! |
| starting_ = true; |
| pipeline_->Start( |