Chromium Code Reviews| Index: webkit/media/webmediaplayer_impl.cc |
| diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc |
| index b187f468b7e56834c8fd06f1e1190f296ff8078b..240d2b2aa4c7018b3cdc75a66574312d8b451c0d 100644 |
| --- a/webkit/media/webmediaplayer_impl.cc |
| +++ b/webkit/media/webmediaplayer_impl.cc |
| @@ -45,7 +45,9 @@ |
| #include "v8/include/v8.h" |
| #include "webkit/compositor_bindings/web_layer_impl.h" |
| #include "webkit/media/buffered_data_source.h" |
| +#include "webkit/media/texttrack_impl.h" |
| #include "webkit/media/webaudiosourceprovider_impl.h" |
| +#include "webkit/media/webinbandtexttrack_impl.h" |
| #include "webkit/media/webmediaplayer_delegate.h" |
| #include "webkit/media/webmediaplayer_params.h" |
| #include "webkit/media/webmediaplayer_util.h" |
| @@ -146,7 +148,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| chunk_demuxer_(NULL), |
| pending_repaint_(false), |
| pending_size_change_(false), |
| - video_frame_provider_client_(NULL) { |
| + video_frame_provider_client_(NULL), |
| + text_track_index_(0) { |
| media_log_->AddEvent( |
| media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
| @@ -989,6 +992,32 @@ void WebMediaPlayerImpl::OnNeedKey(const std::string& key_system, |
| 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); |
| + |
| + // TODO(matthewjheaney): resolve lifetime issues for text_track_. |
| + // Note that the text track object is adopted by its client, and so |
| + // it does get destroyed during teardown of the tracks, and |
| + // therefore there's no memory leak. However, there is the issue of |
| + // lifetime, since we share a pointer to this text track object with |
| + // its (owning) client. |
|
acolwell GONE FROM CHROMIUM
2013/05/15 22:42:36
This needs to be resolved before the final l g t m
Matthew Heaney (Chromium)
2013/05/16 22:05:22
Done.
|
| + |
| + WebInbandTextTrackImpl* const text_track = |
| + new WebInbandTextTrackImpl(webkind, weblabel, weblanguage, |
| + text_track_index_++); |
| + GetClient()->addTextTrack(text_track); |
| + |
| + // TODO(matthewjheaney): give text_cb ownership of text_track. |
| + // This means webkit will not adopt text_track. |
|
acolwell GONE FROM CHROMIUM
2013/05/15 22:42:36
ditto
Matthew Heaney (Chromium)
2013/05/16 22:05:22
Done.
|
| + return scoped_ptr<media::TextTrack>(new TextTrackImpl(text_track->client())); |
| +} |
| + |
| #define COMPILE_ASSERT_MATCHING_ENUM(name) \ |
| COMPILE_ASSERT(static_cast<int>(WebKit::WebMediaPlayerClient::name) == \ |
| static_cast<int>(media::Decryptor::k ## name), \ |
| @@ -1084,6 +1113,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { |
| BIND_TO_RENDER_LOOP_1(&WebMediaPlayerImpl::OnDemuxerOpened, |
| base::Passed(&ms)), |
| BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""), |
| + base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this)), |
| base::Bind(&LogMediaSourceError, media_log_)); |
| demuxer_.reset(chunk_demuxer_); |