Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: content/renderer/media/webmediaplayer_impl.cc

Issue 23702007: Render inband text tracks in the media pipeline (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: incorporate aaron's comments (10/16) Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/webmediaplayer_impl.cc
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index 95af968496d72dd912d602a20dd5c9f901925d0e..7c6a53a0cf9199900da413a1d590845bbc1e7659 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) {
- 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(
+ media::TextKind kind,
+ const std::string& label,
+ const std::string& language,
+ const media::AddTextTrackDoneCB& done_cb) {
+ DCHECK(main_loop_->BelongsToCurrentThread());
+
+ const WebInbandTextTrackImpl::Kind web_kind =
+ static_cast<WebInbandTextTrackImpl::Kind>(kind);
+ const WebKit::WebString web_label = WebKit::WebString::fromUTF8(label);
+ const WebKit::WebString web_language = WebKit::WebString::fromUTF8(language);
+
+ WebInbandTextTrackImpl* const web_inband_text_track =
acolwell GONE FROM CHROMIUM 2013/10/21 20:10:40 nit: use scoped_ptr here.
Matthew Heaney (Chromium) 2013/10/23 05:09:01 Done.
+ 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));
- 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);
acolwell GONE FROM CHROMIUM 2013/10/21 20:10:40 nit: Inline below.
Matthew Heaney (Chromium) 2013/10/23 05:09:01 Done.
+
+ 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(

Powered by Google App Engine
This is Rietveld 408576698