summaryrefslogtreecommitdiffstats
path: root/webkit/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/renderer')
-rw-r--r--webkit/renderer/media/simple_video_frame_provider.cc83
-rw-r--r--webkit/renderer/media/simple_video_frame_provider.h63
-rw-r--r--webkit/renderer/media/webkit_media.gypi2
-rw-r--r--webkit/renderer/media/webmediaplayer_delegate.h6
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.cc59
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.h10
-rw-r--r--webkit/renderer/media/webmediaplayer_params.cc2
-rw-r--r--webkit/renderer/media/webmediaplayer_params.h6
8 files changed, 52 insertions, 179 deletions
diff --git a/webkit/renderer/media/simple_video_frame_provider.cc b/webkit/renderer/media/simple_video_frame_provider.cc
deleted file mode 100644
index 1bc2323..0000000
--- a/webkit/renderer/media/simple_video_frame_provider.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/renderer/media/simple_video_frame_provider.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "media/base/video_frame.h"
-
-namespace webkit_media {
-
-SimpleVideoFrameProvider::SimpleVideoFrameProvider(
- const gfx::Size& size,
- const base::TimeDelta& frame_duration,
- const base::Closure& error_cb,
- const VideoFrameProvider::RepaintCB& repaint_cb)
- : message_loop_proxy_(base::MessageLoopProxy::current()),
- size_(size),
- state_(kStopped),
- frame_duration_(frame_duration),
- error_cb_(error_cb),
- repaint_cb_(repaint_cb) {
-}
-
-SimpleVideoFrameProvider::~SimpleVideoFrameProvider() {}
-
-void SimpleVideoFrameProvider::Start() {
- DVLOG(1) << "SimpleVideoFrameProvider::Start";
- DCHECK(message_loop_proxy_->BelongsToCurrentThread());
- state_ = kStarted;
- message_loop_proxy_->PostTask(
- FROM_HERE,
- base::Bind(&SimpleVideoFrameProvider::GenerateFrame, this));
-}
-
-void SimpleVideoFrameProvider::Stop() {
- DVLOG(1) << "SimpleVideoFrameProvider::Stop";
- DCHECK(message_loop_proxy_->BelongsToCurrentThread());
- state_ = kStopped;
-}
-
-void SimpleVideoFrameProvider::Play() {
- DVLOG(1) << "SimpleVideoFrameProvider::Play";
- DCHECK(message_loop_proxy_->BelongsToCurrentThread());
- if (state_ == kPaused)
- state_ = kStarted;
-}
-
-void SimpleVideoFrameProvider::Pause() {
- DVLOG(1) << "SimpleVideoFrameProvider::Pause";
- DCHECK(message_loop_proxy_->BelongsToCurrentThread());
- if (state_ == kStarted)
- state_ = kPaused;
-}
-
-void SimpleVideoFrameProvider::GenerateFrame() {
- DVLOG(1) << "SimpleVideoFrameProvider::GenerateFrame";
- DCHECK(message_loop_proxy_->BelongsToCurrentThread());
- if (state_ == kStopped)
- return;
-
- if (state_ == kStarted) {
- // Always allocate a new frame filled with white color.
- scoped_refptr<media::VideoFrame> video_frame =
- media::VideoFrame::CreateColorFrame(
- size_, 255, 128, 128, current_time_);
-
- // TODO(wjia): set pixel data to pre-defined patterns if it's desired to
- // verify frame content.
-
- repaint_cb_.Run(video_frame);
- }
-
- current_time_ += frame_duration_;
- message_loop_proxy_->PostDelayedTask(
- FROM_HERE,
- base::Bind(&SimpleVideoFrameProvider::GenerateFrame, this),
- frame_duration_);
-}
-
-} // namespace webkit_media
diff --git a/webkit/renderer/media/simple_video_frame_provider.h b/webkit/renderer/media/simple_video_frame_provider.h
deleted file mode 100644
index bcc0679..0000000
--- a/webkit/renderer/media/simple_video_frame_provider.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
-#define WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
-
-#include "base/time/time.h"
-#include "ui/gfx/size.h"
-#include "webkit/renderer/media/video_frame_provider.h"
-
-namespace base {
-class MessageLoopProxy;
-}
-
-namespace webkit_media {
-
-// A simple implementation of VideoFrameProvider generates raw frames and
-// passes them to webmediaplayer.
-// Since non-black pixel values are required in the layout test, e.g.,
-// media/video-capture-canvas.html, this class should generate frame with
-// only non-black pixels.
-class SimpleVideoFrameProvider : public VideoFrameProvider {
- public:
- SimpleVideoFrameProvider(
- const gfx::Size& size,
- const base::TimeDelta& frame_duration,
- const base::Closure& error_cb,
- const RepaintCB& repaint_cb);
-
- // VideoFrameProvider implementation.
- virtual void Start() OVERRIDE;
- virtual void Stop() OVERRIDE;
- virtual void Play() OVERRIDE;
- virtual void Pause() OVERRIDE;
-
- protected:
- virtual ~SimpleVideoFrameProvider();
-
- private:
- enum State {
- kStarted,
- kPaused,
- kStopped,
- };
-
- void GenerateFrame();
-
- scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
- gfx::Size size_;
- State state_;
-
- base::TimeDelta current_time_;
- base::TimeDelta frame_duration_;
- base::Closure error_cb_;
- RepaintCB repaint_cb_;
-
- DISALLOW_COPY_AND_ASSIGN(SimpleVideoFrameProvider);
-};
-
-} // namespace webkit_media
-
-#endif // WEBKIT_RENDERER_MEDIA_SIMPLE_VIDEO_FRAME_PROVIDER_H_
diff --git a/webkit/renderer/media/webkit_media.gypi b/webkit/renderer/media/webkit_media.gypi
index 2873d69..f7f446f 100644
--- a/webkit/renderer/media/webkit_media.gypi
+++ b/webkit/renderer/media/webkit_media.gypi
@@ -62,8 +62,6 @@
'media_stream_audio_renderer.h',
'media_stream_client.h',
'preload.h',
- 'simple_video_frame_provider.cc',
- 'simple_video_frame_provider.h',
'texttrack_impl.cc',
'texttrack_impl.h',
'video_frame_provider.cc',
diff --git a/webkit/renderer/media/webmediaplayer_delegate.h b/webkit/renderer/media/webmediaplayer_delegate.h
index 32bd9e4..9718f7c 100644
--- a/webkit/renderer/media/webmediaplayer_delegate.h
+++ b/webkit/renderer/media/webmediaplayer_delegate.h
@@ -17,13 +17,13 @@ class WebMediaPlayerDelegate {
WebMediaPlayerDelegate() {}
// The specified player started playing media.
- virtual void DidPlay(WebKit::WebMediaPlayer* player) {}
+ virtual void DidPlay(WebKit::WebMediaPlayer* player) = 0;
// The specified player stopped playing media.
- virtual void DidPause(WebKit::WebMediaPlayer* player) {}
+ virtual void DidPause(WebKit::WebMediaPlayer* player) = 0;
// The specified player was destroyed. Do not call any methods on it.
- virtual void PlayerGone(WebKit::WebMediaPlayer* player) {}
+ virtual void PlayerGone(WebKit::WebMediaPlayer* player) = 0;
protected:
virtual ~WebMediaPlayerDelegate() {}
diff --git a/webkit/renderer/media/webmediaplayer_impl.cc b/webkit/renderer/media/webmediaplayer_impl.cc
index 08fa5da..30ba639 100644
--- a/webkit/renderer/media/webmediaplayer_impl.cc
+++ b/webkit/renderer/media/webmediaplayer_impl.cc
@@ -139,6 +139,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
pending_seek_seconds_(0.0f),
client_(client),
delegate_(delegate),
+ defer_load_cb_(params.defer_load_cb()),
media_log_(params.media_log()),
accelerated_compositing_reported_(false),
incremented_externally_allocated_memory_(false),
@@ -242,37 +243,26 @@ URLSchemeForHistogram URLScheme(const GURL& url) {
} // anonymous namespace
void WebMediaPlayerImpl::load(const WebKit::WebURL& url, CORSMode cors_mode) {
- DCHECK(main_loop_->BelongsToCurrentThread());
-
- LoadSetup(url);
-
- // Otherwise it's a regular request which requires resolving the URL first.
- GURL gurl(url);
- data_source_.reset(new BufferedDataSource(
- main_loop_,
- frame_,
- media_log_.get(),
- base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())));
- data_source_->Initialize(
- url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
- base::Bind(
- &WebMediaPlayerImpl::DataSourceInitialized,
- AsWeakPtr(), gurl));
-
- is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
+ load(url, NULL, cors_mode);
}
void WebMediaPlayerImpl::load(const WebKit::WebURL& url,
WebKit::WebMediaSource* media_source,
CORSMode cors_mode) {
- LoadSetup(url);
-
- // Media source pipelines can start immediately.
- supports_save_ = false;
- StartPipeline(media_source);
+ if (!defer_load_cb_.is_null()) {
+ defer_load_cb_.Run(base::Bind(
+ &WebMediaPlayerImpl::DoLoad, AsWeakPtr(), url, media_source,
+ cors_mode));
+ return;
+ }
+ DoLoad(url, media_source, cors_mode);
}
-void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) {
+void WebMediaPlayerImpl::DoLoad(const WebKit::WebURL& url,
+ WebKit::WebMediaSource* media_source,
+ CORSMode cors_mode) {
+ DCHECK(main_loop_->BelongsToCurrentThread());
+
GURL gurl(url);
UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(gurl), kMaxURLScheme);
@@ -286,6 +276,27 @@ void WebMediaPlayerImpl::LoadSetup(const WebKit::WebURL& url) {
SetNetworkState(WebMediaPlayer::NetworkStateLoading);
SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
+
+ // Media source pipelines can start immediately.
+ if (media_source) {
+ supports_save_ = false;
+ StartPipeline(media_source);
+ return;
+ }
+
+ // Otherwise it's a regular request which requires resolving the URL first.
+ data_source_.reset(new BufferedDataSource(
+ main_loop_,
+ frame_,
+ media_log_.get(),
+ base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())));
+ data_source_->Initialize(
+ url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
+ base::Bind(
+ &WebMediaPlayerImpl::DataSourceInitialized,
+ AsWeakPtr(), gurl));
+
+ is_local_source_ = !gurl.SchemeIs("http") && !gurl.SchemeIs("https");
}
void WebMediaPlayerImpl::play() {
diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h
index 804866f..a691c4d 100644
--- a/webkit/renderer/media/webmediaplayer_impl.h
+++ b/webkit/renderer/media/webmediaplayer_impl.h
@@ -67,7 +67,6 @@ class WebLayerImpl;
namespace webkit_media {
class BufferedDataSource;
-class MediaStreamClient;
class WebAudioSourceProviderImpl;
class WebMediaPlayerDelegate;
class WebMediaPlayerParams;
@@ -207,8 +206,11 @@ class WebMediaPlayerImpl
void SetOpaque(bool);
private:
- // Contains common logic used across the different types loading.
- void LoadSetup(const WebKit::WebURL& url);
+ // Called after |defer_load_cb_| has decided to allow the load. If
+ // |defer_load_cb_| is null this is called immediately.
+ void DoLoad(const WebKit::WebURL& url,
+ WebKit::WebMediaSource* media_source,
+ CORSMode cors_mode);
// Called after asynchronous initialization of a data source completed.
void DataSourceInitialized(const GURL& gurl, bool success);
@@ -307,7 +309,7 @@ class WebMediaPlayerImpl
base::WeakPtr<WebMediaPlayerDelegate> delegate_;
- MediaStreamClient* media_stream_client_;
+ base::Callback<void(const base::Closure&)> defer_load_cb_;
scoped_refptr<media::MediaLog> media_log_;
diff --git a/webkit/renderer/media/webmediaplayer_params.cc b/webkit/renderer/media/webmediaplayer_params.cc
index 6bcac8d..36f190f 100644
--- a/webkit/renderer/media/webmediaplayer_params.cc
+++ b/webkit/renderer/media/webmediaplayer_params.cc
@@ -12,10 +12,12 @@ namespace webkit_media {
WebMediaPlayerParams::WebMediaPlayerParams(
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const base::Callback<void(const base::Closure&)>& defer_load_cb,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log)
: message_loop_proxy_(message_loop_proxy),
+ defer_load_cb_(defer_load_cb),
audio_renderer_sink_(audio_renderer_sink),
gpu_factories_(gpu_factories),
media_log_(media_log) {
diff --git a/webkit/renderer/media/webmediaplayer_params.h b/webkit/renderer/media/webmediaplayer_params.h
index 62a5ce1..02d23e8 100644
--- a/webkit/renderer/media/webmediaplayer_params.h
+++ b/webkit/renderer/media/webmediaplayer_params.h
@@ -27,6 +27,7 @@ class WebMediaPlayerParams {
// all others may be null.
WebMediaPlayerParams(
const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
+ const base::Callback<void(const base::Closure&)>& defer_load_cb,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log);
@@ -36,6 +37,10 @@ class WebMediaPlayerParams {
return message_loop_proxy_;
}
+ base::Callback<void(const base::Closure&)> defer_load_cb() const {
+ return defer_load_cb_;
+ }
+
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink() const {
return audio_renderer_sink_;
}
@@ -51,6 +56,7 @@ class WebMediaPlayerParams {
private:
scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
+ base::Callback<void(const base::Closure&)> defer_load_cb_;
scoped_refptr<media::AudioRendererSink> audio_renderer_sink_;
scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_;
scoped_refptr<media::MediaLog> media_log_;