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

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 (9/28) Created 7 years, 3 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 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(

Powered by Google App Engine
This is Rietveld 408576698