summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webmediaplayer_impl.cc
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 16:37:46 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-29 16:37:46 +0000
commit020fba32dc0e07d855d644bd575d88365b7e2deb (patch)
tree73cce4387cebbc4497b746f3641a60b66e0ff3be /webkit/glue/webmediaplayer_impl.cc
parent8914a69a5973071c57b47d4a0c6c43b7330ff9b1 (diff)
downloadchromium_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.cc27
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_) {