Chromium Code Reviews| Index: webkit/glue/webmediaplayer_impl.cc |
| diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc |
| index a4c7f06daecbb6179bd2bc085105131844e993dc..611e3397961bfaadbef45f704ced3b8747b8caa3 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) { |
|
scherkus (not reviewing)
2011/06/23 18:50:18
crazy naming nit we can decide on later:
appendDat
acolwell GONE FROM CHROMIUM
2011/06/23 22:42:17
This will probably change to appendData() once I s
|
| + 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_) { |