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( |