Index: content/renderer/media/webmediaplayer_impl.cc |
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc |
index f4ccc730925e7249f16be52479399de68f6769ab..cc05f35ee264f55be5f9659a34a288efb6aae464 100644 |
--- a/content/renderer/media/webmediaplayer_impl.cc |
+++ b/content/renderer/media/webmediaplayer_impl.cc |
@@ -37,6 +37,7 @@ |
#include "media/base/media_log.h" |
#include "media/base/media_switches.h" |
#include "media/base/pipeline.h" |
+#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" |
@@ -943,21 +944,26 @@ void WebMediaPlayerImpl::OnNeedKey(const std::string& type, |
init_data.size()); |
} |
-scoped_ptr<media::TextTrack> |
-WebMediaPlayerImpl::OnTextTrack(media::TextKind kind, |
- const std::string& label, |
- const std::string& language) { |
+void WebMediaPlayerImpl::OnAddTextTrack( |
+ media::TextKind kind, |
+ const std::string& label, |
+ const std::string& language, |
+ const media::AddTextTrackDoneCB& done_cb) { |
+ DCHECK(main_loop_->BelongsToCurrentThread()); |
+ |
typedef WebInbandTextTrackImpl::Kind webkind_t; |
const webkind_t webkind = static_cast<webkind_t>(kind); |
acolwell GONE FROM CHROMIUM
2013/10/14 20:42:24
nit: Just use the actual type here instead of a ty
Matthew Heaney (Chromium)
2013/10/17 05:46:44
Done.
|
const WebKit::WebString weblabel = WebKit::WebString::fromUTF8(label); |
const WebKit::WebString weblanguage = WebKit::WebString::fromUTF8(language); |
- WebInbandTextTrackImpl* const text_track = |
- new WebInbandTextTrackImpl(webkind, weblabel, weblanguage, |
- text_track_index_++); |
+ WebInbandTextTrackImpl* const web_inband_text_track = |
+ new WebInbandTextTrackImpl(webkind, weblabel, weblanguage, |
acolwell GONE FROM CHROMIUM
2013/10/14 20:42:24
nit: s/webkind/web_kind_/, s/weblabel/web_label/,
Matthew Heaney (Chromium)
2013/10/17 05:46:44
Done.
|
+ text_track_index_++); |
+ |
+ scoped_ptr<media::TextTrack> text_track( |
+ new TextTrackImpl(main_loop_, GetClient(), web_inband_text_track)); |
- return scoped_ptr<media::TextTrack>(new TextTrackImpl(GetClient(), |
- text_track)); |
+ done_cb.Run(text_track.Pass()); |
} |
void WebMediaPlayerImpl::OnKeyError(const std::string& session_id, |
@@ -1028,6 +1034,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_); |
@@ -1036,22 +1045,16 @@ void WebMediaPlayerImpl::StartPipeline() { |
demuxer_.reset(new media::FFmpegDemuxer( |
media_loop_, data_source_.get(), |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), |
+ enable_inband_text_tracks, |
media_log_)); |
} else { |
DCHECK(!chunk_demuxer_); |
DCHECK(!data_source_); |
- media::AddTextTrackCB add_text_track_cb; |
- |
- if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
- add_text_track_cb = |
- base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this)); |
- } |
- |
chunk_demuxer_ = new media::ChunkDemuxer( |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), |
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), |
- add_text_track_cb, |
+ enable_inband_text_tracks, |
base::Bind(&LogMediaSourceError, media_log_)); |
demuxer_.reset(chunk_demuxer_); |
@@ -1121,6 +1124,18 @@ void WebMediaPlayerImpl::StartPipeline() { |
true)); |
filter_collection->SetVideoRenderer(video_renderer.Pass()); |
+ if (enable_inband_text_tracks) { |
+ media::AddTextTrackCB add_text_track_cb = |
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack); |
+ |
+ scoped_ptr<media::TextRenderer> text_renderer( |
+ new media::TextRenderer( |
+ media_loop_, |
+ add_text_track_cb)); |
+ |
+ filter_collection->SetTextRenderer(text_renderer.Pass()); |
+ } |
+ |
// ... and we're ready to go! |
starting_ = true; |
pipeline_->Start( |