| Index: content/renderer/media/webmediaplayer_impl.cc
|
| diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
|
| index f6c347c069f7c93a536a45b0ec1a91020a747b0c..34f80d1b95b1e8d8017ac7b4e12aa599d1ac98af 100644
|
| --- a/content/renderer/media/webmediaplayer_impl.cc
|
| +++ b/content/renderer/media/webmediaplayer_impl.cc
|
| @@ -38,6 +38,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"
|
| @@ -993,21 +994,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) {
|
| - typedef WebInbandTextTrackImpl::Kind webkind_t;
|
| - const webkind_t webkind = static_cast<webkind_t>(kind);
|
| - const WebKit::WebString weblabel = WebKit::WebString::fromUTF8(label);
|
| - const WebKit::WebString weblanguage = WebKit::WebString::fromUTF8(language);
|
| +void WebMediaPlayerImpl::OnAddTextTrack(
|
| + const media::TextTrackConfig& config,
|
| + const media::AddTextTrackDoneCB& done_cb) {
|
| + DCHECK(main_loop_->BelongsToCurrentThread());
|
| +
|
| + const WebInbandTextTrackImpl::Kind web_kind =
|
| + static_cast<WebInbandTextTrackImpl::Kind>(config.kind());
|
| + const WebKit::WebString web_label =
|
| + WebKit::WebString::fromUTF8(config.label());
|
| + const WebKit::WebString web_language =
|
| + WebKit::WebString::fromUTF8(config.language());
|
| +
|
| + scoped_ptr<WebInbandTextTrackImpl> web_inband_text_track(
|
| + new WebInbandTextTrackImpl(web_kind, web_label, web_language,
|
| + text_track_index_++));
|
|
|
| - WebInbandTextTrackImpl* const text_track =
|
| - new WebInbandTextTrackImpl(webkind, weblabel, weblanguage,
|
| - text_track_index_++);
|
| + scoped_ptr<media::TextTrack> text_track(
|
| + new TextTrackImpl(main_loop_, GetClient(), web_inband_text_track.Pass()));
|
|
|
| - return scoped_ptr<media::TextTrack>(new TextTrackImpl(GetClient(),
|
| - text_track));
|
| + done_cb.Run(text_track.Pass());
|
| }
|
|
|
| void WebMediaPlayerImpl::OnKeyError(const std::string& session_id,
|
| @@ -1078,6 +1084,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_);
|
| @@ -1086,22 +1095,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_);
|
|
|
| @@ -1171,6 +1174,15 @@ void WebMediaPlayerImpl::StartPipeline() {
|
| true));
|
| filter_collection->SetVideoRenderer(video_renderer.Pass());
|
|
|
| + if (enable_inband_text_tracks) {
|
| + scoped_ptr<media::TextRenderer> text_renderer(
|
| + new media::TextRenderer(
|
| + media_loop_,
|
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack)));
|
| +
|
| + filter_collection->SetTextRenderer(text_renderer.Pass());
|
| + }
|
| +
|
| // ... and we're ready to go!
|
| starting_ = true;
|
| pipeline_->Start(
|
|
|