diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 16:37:46 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-29 16:37:46 +0000 |
commit | 020fba32dc0e07d855d644bd575d88365b7e2deb (patch) | |
tree | 73cce4387cebbc4497b746f3641a60b66e0ff3be /webkit/glue/webmediaplayer_impl.cc | |
parent | 8914a69a5973071c57b47d4a0c6c43b7330ff9b1 (diff) | |
download | chromium_src-020fba32dc0e07d855d644bd575d88365b7e2deb.zip chromium_src-020fba32dc0e07d855d644bd575d88365b7e2deb.tar.gz chromium_src-020fba32dc0e07d855d644bd575d88365b7e2deb.tar.bz2 |
Adding ChunkDemuxer implementation.
BUG=86536
TEST=ChunkDemuxerTest.*
Review URL: http://codereview.chromium.org/7203002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@90966 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webmediaplayer_impl.cc')
-rw-r--r-- | webkit/glue/webmediaplayer_impl.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index a4c7f06..611e339 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -340,6 +340,11 @@ bool WebMediaPlayerImpl::Initialize( data_source_factory->AddFactory(simple_data_source_factory.release()); } + if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableAdaptive)) { + chunk_demuxer_factory_.reset(new media::ChunkDemuxerFactory( + data_source_factory->Clone())); + } + scoped_ptr<media::DemuxerFactory> demuxer_factory( new media::FFmpegDemuxerFactory(data_source_factory.release(), pipeline_message_loop)); @@ -384,6 +389,12 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url) { filter_collection_->AddVideoDecoder(rtc_video_decoder); } + if (chunk_demuxer_factory_.get() && + chunk_demuxer_factory_->IsUrlSupported(url.spec())) { + media_data_sink_.reset(chunk_demuxer_factory_->CreateMediaDataSink()); + filter_collection_->SetDemuxerFactory(chunk_demuxer_factory_.release()); + } + // Handle any volume changes that occured before load(). setVolume(GetClient()->volume()); // Get the preload value. @@ -418,6 +429,15 @@ void WebMediaPlayerImpl::pause() { paused_time_ = pipeline_->GetCurrentTime(); } +bool WebMediaPlayerImpl::addData(const unsigned char* data, unsigned length) { + DCHECK(MessageLoop::current() == main_loop_); + + if (!media_data_sink_.get()) + return false; + + return media_data_sink_->AddData(data, length); +} + bool WebMediaPlayerImpl::supportsFullscreen() const { DCHECK(MessageLoop::current() == main_loop_); return true; @@ -452,6 +472,9 @@ void WebMediaPlayerImpl::seek(float seconds) { seeking_ = true; + if (media_data_sink_.get()) + media_data_sink_->Flush(); + // Kick off the asynchronous seek! pipeline_->Seek( seek_time, @@ -567,7 +590,6 @@ float WebMediaPlayerImpl::duration() const { float WebMediaPlayerImpl::currentTime() const { DCHECK(MessageLoop::current() == main_loop_); - if (paused_) { return static_cast<float>(paused_time_.InSecondsF()); } @@ -908,6 +930,9 @@ void WebMediaPlayerImpl::Destroy() { if (proxy_) proxy_->AbortDataSources(); + if (media_data_sink_.get()) + media_data_sink_->Shutdown(); + // Make sure to kill the pipeline so there's no more media threads running. // Note: stopping the pipeline might block for a long time. if (pipeline_) { |