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

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/12) 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 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(

Powered by Google App Engine
This is Rietveld 408576698