summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-07 02:24:44 +0000
committerhclam@chromium.org <hclam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-07 02:24:44 +0000
commit4e6be3fc92efcbedfedbc003892ad56682058971 (patch)
treecaa72331addc9a7f348394cc330c6b1ba1bac623 /chrome/renderer
parent4492c17d67cfbd62ef28e18871c3a08dd07248d9 (diff)
downloadchromium_src-4e6be3fc92efcbedfedbc003892ad56682058971.zip
chromium_src-4e6be3fc92efcbedfedbc003892ad56682058971.tar.gz
chromium_src-4e6be3fc92efcbedfedbc003892ad56682058971.tar.bz2
Refactor media player to move away from webkit_glue
Highlights: 1. WebCore::MediaPlayerPrivate now only has one static method that constructs WebMediaPlayerClient 2. Implementation of WebCore::MediaPlayerPrivateInterface now is WebMediaPlayerClient 3. WebMediaPlayerClient does the delgation to WebMediaPlayer 4. Implemtnation of real media player will go into chrome/renderer and implements WebMediaPlayer Review URL: http://codereview.chromium.org/105007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15492 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/media/buffered_data_source.cc17
-rw-r--r--chrome/renderer/media/buffered_data_source.h23
-rw-r--r--chrome/renderer/media/simple_data_source.cc1
-rw-r--r--chrome/renderer/media/video_renderer_impl.cc2
-rw-r--r--chrome/renderer/media/video_renderer_impl.h17
-rw-r--r--chrome/renderer/render_view.cc9
-rw-r--r--chrome/renderer/render_view.h5
-rw-r--r--chrome/renderer/renderer.vcproj12
-rw-r--r--chrome/renderer/webmediaplayer_impl.cc (renamed from chrome/renderer/webmediaplayer_delegate_impl.cc)187
-rw-r--r--chrome/renderer/webmediaplayer_impl.h (renamed from chrome/renderer/webmediaplayer_delegate_impl.h)123
10 files changed, 177 insertions, 219 deletions
diff --git a/chrome/renderer/media/buffered_data_source.cc b/chrome/renderer/media/buffered_data_source.cc
index f6daf58..67d3b9d 100644
--- a/chrome/renderer/media/buffered_data_source.cc
+++ b/chrome/renderer/media/buffered_data_source.cc
@@ -9,7 +9,6 @@
#include "chrome/common/extensions/url_pattern.h"
#include "chrome/renderer/media/buffered_data_source.h"
#include "chrome/renderer/render_view.h"
-#include "chrome/renderer/webmediaplayer_delegate_impl.h"
#include "chrome/renderer/render_thread.h"
#include "media/base/filter_host.h"
#include "net/base/load_flags.h"
@@ -36,7 +35,7 @@ bool IsSchemeSupported(const GURL& url) {
/////////////////////////////////////////////////////////////////////////////
// BufferedResourceLoader
-BufferedResourceLoader::BufferedResourceLoader(int route_id,
+BufferedResourceLoader::BufferedResourceLoader(int32 routing_id,
const GURL& url,
int64 first_byte_position,
int64 last_byte_position)
@@ -52,7 +51,7 @@ BufferedResourceLoader::BufferedResourceLoader(int route_id,
completed_(false),
range_requested_(false),
async_start_(false),
- route_id_(route_id),
+ routing_id_(routing_id),
url_(url),
first_byte_position_(first_byte_position),
last_byte_position_(last_byte_position),
@@ -109,7 +108,7 @@ int BufferedResourceLoader::Start(net::CompletionCallback* start_callback) {
// app_cache_context()->context_id()
// For now don't service media resource requests from the appcache.
WebAppCacheContext::kNoAppCacheContextId,
- route_id_));
+ routing_id_));
// We may receive stop signal while we are inside this method, it's because
// Start() may get called on demuxer thread while Stop() is called on
@@ -458,8 +457,8 @@ void BufferedResourceLoader::InvokeAndResetStartCallback(int error) {
//////////////////////////////////////////////////////////////////////////////
// BufferedDataSource
-BufferedDataSource::BufferedDataSource(WebMediaPlayerDelegateImpl* delegate)
- : delegate_(delegate),
+BufferedDataSource::BufferedDataSource(int routing_id)
+ : routing_id_(routing_id),
stopped_(false),
position_(0),
total_bytes_(kPositionNotSpecified),
@@ -505,8 +504,7 @@ bool BufferedDataSource::Initialize(const std::string& url) {
AutoLock auto_lock(lock_);
if (!stopped_) {
buffered_resource_loader_ = new BufferedResourceLoader(
- delegate_->view()->routing_id(),
- url_, kPositionNotSpecified, kPositionNotSpecified);
+ routing_id_, url_, kPositionNotSpecified, kPositionNotSpecified);
resource_loader = buffered_resource_loader_;
}
}
@@ -564,8 +562,7 @@ size_t BufferedDataSource::Read(uint8* data, size_t size) {
// Create a new resource loader.
resource_loader =
- new BufferedResourceLoader(delegate_->view()->routing_id(),
- url_, position_,
+ new BufferedResourceLoader(routing_id_, url_, position_,
kPositionNotSpecified);
buffered_resource_loader_ = resource_loader;
}
diff --git a/chrome/renderer/media/buffered_data_source.h b/chrome/renderer/media/buffered_data_source.h
index bd80402..cc1a0bb 100644
--- a/chrome/renderer/media/buffered_data_source.h
+++ b/chrome/renderer/media/buffered_data_source.h
@@ -20,8 +20,6 @@
#include "webkit/glue/resource_loader_bridge.h"
#include "googleurl/src/gurl.h"
-class WebMediaPlayerDelegateImpl;
-
/////////////////////////////////////////////////////////////////////////////
// BufferedResourceLoader
// This class works inside demuxer thread and render thread. It contains a
@@ -32,7 +30,7 @@ class BufferedResourceLoader :
public base::RefCountedThreadSafe<BufferedResourceLoader>,
public webkit_glue::ResourceLoaderBridge::Peer {
public:
- BufferedResourceLoader(int route_id,
+ BufferedResourceLoader(int32 routing_id,
const GURL& url,
int64 first_byte_position,
int64 last_byte_position);
@@ -139,7 +137,7 @@ class BufferedResourceLoader :
bool range_requested_;
bool async_start_;
- int route_id_;
+ int32 routing_id_;
GURL url_;
int64 first_byte_position_;
int64 last_byte_position_;
@@ -161,10 +159,8 @@ class BufferedDataSource : public media::DataSource {
public:
// Methods called from pipeline thread
// Static methods for creating this class.
- static media::FilterFactory* CreateFactory(
- WebMediaPlayerDelegateImpl* delegate) {
- return new media::FilterFactoryImpl1<BufferedDataSource,
- WebMediaPlayerDelegateImpl*>(delegate);
+ static media::FilterFactory* CreateFactory(int32 routing_id) {
+ return new media::FilterFactoryImpl1<BufferedDataSource, int32>(routing_id);
}
virtual bool Initialize(const std::string& url);
@@ -182,8 +178,7 @@ class BufferedDataSource : public media::DataSource {
const media::MediaFormat& media_format();
private:
- friend class media::FilterFactoryImpl1<BufferedDataSource,
- WebMediaPlayerDelegateImpl*>;
+ friend class media::FilterFactoryImpl1<BufferedDataSource, int32>;
// Call to filter host to trigger an error, be sure not to call this method
// while the lock is acquired.
void HandleError(media::PipelineError error);
@@ -194,17 +189,13 @@ class BufferedDataSource : public media::DataSource {
void InitialRequestStarted(int error);
void OnInitialRequestStarted(int error);
- explicit BufferedDataSource(WebMediaPlayerDelegateImpl* delegate);
+ explicit BufferedDataSource(int32 routing_id);
virtual ~BufferedDataSource();
media::MediaFormat media_format_;
GURL url_;
- // Pointer to the delegate which provides access to RenderView, this is set
- // in construction and can be accessed in all threads safely.
- // TODO(hclam): get rid of this and save the routing id and pointer to
- // ResourceDispatcher.
- WebMediaPlayerDelegateImpl* delegate_;
+ int32 routing_id_;
// A common lock for protecting members accessed by multiple threads.
Lock lock_;
diff --git a/chrome/renderer/media/simple_data_source.cc b/chrome/renderer/media/simple_data_source.cc
index cb625e2..b1644b7 100644
--- a/chrome/renderer/media/simple_data_source.cc
+++ b/chrome/renderer/media/simple_data_source.cc
@@ -6,7 +6,6 @@
#include "chrome/renderer/media/simple_data_source.h"
#include "chrome/renderer/render_thread.h"
#include "chrome/renderer/render_view.h"
-#include "chrome/renderer/webmediaplayer_delegate_impl.h"
#include "media/base/filter_host.h"
#include "net/base/load_flags.h"
#include "net/http/http_response_headers.h"
diff --git a/chrome/renderer/media/video_renderer_impl.cc b/chrome/renderer/media/video_renderer_impl.cc
index ed1704f..be3466c 100644
--- a/chrome/renderer/media/video_renderer_impl.cc
+++ b/chrome/renderer/media/video_renderer_impl.cc
@@ -5,7 +5,7 @@
#include "chrome/renderer/media/video_renderer_impl.h"
#include "media/base/yuv_convert.h"
-VideoRendererImpl::VideoRendererImpl(WebMediaPlayerDelegateImpl* delegate)
+VideoRendererImpl::VideoRendererImpl(WebMediaPlayerImpl* delegate)
: delegate_(delegate),
last_converted_frame_(NULL) {
// TODO(hclam): decide whether to do the following line in this thread or
diff --git a/chrome/renderer/media/video_renderer_impl.h b/chrome/renderer/media/video_renderer_impl.h
index 01ded10..9a39933 100644
--- a/chrome/renderer/media/video_renderer_impl.h
+++ b/chrome/renderer/media/video_renderer_impl.h
@@ -17,12 +17,12 @@
#include "base/gfx/platform_canvas.h"
#include "base/gfx/rect.h"
#include "base/gfx/size.h"
-#include "chrome/renderer/webmediaplayer_delegate_impl.h"
+#include "chrome/renderer/webmediaplayer_impl.h"
#include "media/base/buffers.h"
#include "media/base/factory.h"
#include "media/base/filters.h"
#include "media/filters/video_renderer_base.h"
-#include "webkit/glue/webmediaplayer_delegate.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebMediaPlayer.h"
class VideoRendererImpl : public media::VideoRendererBase {
public:
@@ -39,10 +39,9 @@ class VideoRendererImpl : public media::VideoRendererBase {
virtual void Paint(skia::PlatformCanvas* canvas, const gfx::Rect& dest_rect);
// Static method for creating factory for this object.
- static media::FilterFactory* CreateFactory(
- WebMediaPlayerDelegateImpl* delegate) {
- return new media::FilterFactoryImpl1<
- VideoRendererImpl, WebMediaPlayerDelegateImpl*>(delegate);
+ static media::FilterFactory* CreateFactory(WebMediaPlayerImpl* delegate) {
+ return new media::FilterFactoryImpl1<VideoRendererImpl,
+ WebMediaPlayerImpl*>(delegate);
}
private:
@@ -56,11 +55,11 @@ class VideoRendererImpl : public media::VideoRendererBase {
virtual void OnPaintNeeded();
friend class media::FilterFactoryImpl1<VideoRendererImpl,
- WebMediaPlayerDelegateImpl*>;
+ WebMediaPlayerImpl*>;
// Constructor and destructor are private. Only the filter factory is
// allowed to create instances.
- explicit VideoRendererImpl(WebMediaPlayerDelegateImpl* delegate);
+ explicit VideoRendererImpl(WebMediaPlayerImpl* delegate);
virtual ~VideoRendererImpl() {}
// Internal method used by the Paint method to convert the specified video
@@ -68,7 +67,7 @@ class VideoRendererImpl : public media::VideoRendererBase {
void CopyToCurrentFrame(media::VideoFrame* video_frame);
// Pointer to our parent object that is called to request repaints.
- WebMediaPlayerDelegateImpl* delegate_;
+ WebMediaPlayerImpl* delegate_;
// An RGB bitmap used to convert the video frames.
SkBitmap bitmap_;
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 03df749..4db143d 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -39,7 +39,7 @@
#include "chrome/renderer/renderer_logging.h"
#include "chrome/renderer/user_script_slave.h"
#include "chrome/renderer/visitedlink_slave.h"
-#include "chrome/renderer/webmediaplayer_delegate_impl.h"
+#include "chrome/renderer/webmediaplayer_impl.h"
#include "chrome/renderer/webplugin_delegate_proxy.h"
#include "chrome/renderer/webworker_proxy.h"
#include "grit/generated_resources.h"
@@ -1872,11 +1872,12 @@ WebPluginDelegate* RenderView::CreatePluginDelegate(
#endif
}
-webkit_glue::WebMediaPlayerDelegate* RenderView::CreateMediaPlayerDelegate() {
+WebKit::WebMediaPlayer* RenderView::CreateWebMediaPlayer(
+ WebKit::WebMediaPlayerClient* client) {
#if defined(OS_WIN)
- return new WebMediaPlayerDelegateImpl(this);
+ return new WebMediaPlayerImpl(this, client);
#else
- // TODO(port)
+ // TODO(port): media player is not functional other than on Windows.
NOTIMPLEMENTED();
return NULL;
#endif
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index bdd415c..17abcc2 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -74,6 +74,8 @@ struct FileUploadData;
namespace WebKit {
class WebDragData;
struct WebFindOptions;
+class WebMediaPlayer;
+class WebMediaPlayerClient;
}
// We need to prevent a page from trying to create infinite popups. It is not
@@ -244,7 +246,8 @@ class RenderView : public RenderWidget,
const std::string& clsid,
std::string* actual_mime_type);
virtual WebKit::WebWorker* CreateWebWorker(WebKit::WebWorkerClient* client);
- virtual webkit_glue::WebMediaPlayerDelegate* CreateMediaPlayerDelegate();
+ virtual WebKit::WebMediaPlayer* CreateWebMediaPlayer(
+ WebKit::WebMediaPlayerClient* client);
virtual void OnMissingPluginStatus(WebPluginDelegate* delegate, int status);
virtual void OpenURL(WebView* webview, const GURL& url,
const GURL& referrer,
diff --git a/chrome/renderer/renderer.vcproj b/chrome/renderer/renderer.vcproj
index bd1f995..b86fae6 100644
--- a/chrome/renderer/renderer.vcproj
+++ b/chrome/renderer/renderer.vcproj
@@ -153,14 +153,6 @@
>
</File>
<File
- RelativePath=".\media\data_source_impl.cc"
- >
- </File>
- <File
- RelativePath=".\media\data_source_impl.h"
- >
- </File>
- <File
RelativePath=".\media\simple_data_source.cc"
>
</File>
@@ -438,11 +430,11 @@
>
</File>
<File
- RelativePath=".\webmediaplayer_delegate_impl.cc"
+ RelativePath=".\webmediaplayer_impl.cc"
>
</File>
<File
- RelativePath=".\webmediaplayer_delegate_impl.h"
+ RelativePath=".\webmediaplayer_impl.h"
>
</File>
<File
diff --git a/chrome/renderer/webmediaplayer_delegate_impl.cc b/chrome/renderer/webmediaplayer_impl.cc
index 00e65ab..6966479 100644
--- a/chrome/renderer/webmediaplayer_delegate_impl.cc
+++ b/chrome/renderer/webmediaplayer_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/renderer/webmediaplayer_delegate_impl.h"
+#include "chrome/renderer/webmediaplayer_impl.h"
#include "base/command_line.h"
#include "chrome/common/chrome_switches.h"
@@ -22,6 +22,7 @@
#include "media/filters/null_audio_renderer.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
#include "third_party/WebKit/WebKit/chromium/public/WebSize.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebURL.h"
using WebKit::WebRect;
using WebKit::WebSize;
@@ -31,39 +32,40 @@ using WebKit::WebSize;
class NotifyWebMediaPlayerTask : public CancelableTask {
public:
- NotifyWebMediaPlayerTask(WebMediaPlayerDelegateImpl* delegate,
- WebMediaPlayerMethod method)
- : delegate_(delegate),
+ NotifyWebMediaPlayerTask(WebMediaPlayerImpl* media_player,
+ WebMediaPlayerClientMethod method)
+ : media_player_(media_player),
method_(method) {}
virtual void Run() {
- if (delegate_) {
- (delegate_->web_media_player()->*(method_))();
- delegate_->DidTask(this);
+ if (media_player_) {
+ (media_player_->client()->*(method_))();
+ media_player_->DidTask(this);
}
}
virtual void Cancel() {
- delegate_ = NULL;
+ media_player_ = NULL;
}
private:
- WebMediaPlayerDelegateImpl* delegate_;
- WebMediaPlayerMethod method_;
+ WebMediaPlayerImpl* media_player_;
+ WebMediaPlayerClientMethod method_;
DISALLOW_COPY_AND_ASSIGN(NotifyWebMediaPlayerTask);
};
/////////////////////////////////////////////////////////////////////////////
-// WebMediaPlayerDelegateImpl implementation
+// WebMediaPlayerImpl implementation
-WebMediaPlayerDelegateImpl::WebMediaPlayerDelegateImpl(RenderView* view)
- : network_state_(webkit_glue::WebMediaPlayer::EMPTY),
- ready_state_(webkit_glue::WebMediaPlayer::HAVE_NOTHING),
+WebMediaPlayerImpl::WebMediaPlayerImpl(RenderView* view,
+ WebKit::WebMediaPlayerClient* client)
+ : network_state_(WebKit::WebMediaPlayer::Empty),
+ ready_state_(WebKit::WebMediaPlayer::HaveNothing),
main_loop_(NULL),
filter_factory_(new media::FilterFactoryCollection()),
video_renderer_(NULL),
- web_media_player_(NULL),
+ client_(client),
view_(view),
tasks_(kLastTaskIndex) {
// Add in any custom filter factories first.
@@ -87,57 +89,48 @@ WebMediaPlayerDelegateImpl::WebMediaPlayerDelegateImpl(RenderView* view)
// Add in the default filter factories.
filter_factory_->AddFactory(
AudioRendererImpl::CreateFactory(view_->audio_message_filter()));
- filter_factory_->AddFactory(BufferedDataSource::CreateFactory(this));
+ filter_factory_->AddFactory(
+ BufferedDataSource::CreateFactory(view->routing_id()));
filter_factory_->AddFactory(VideoRendererImpl::CreateFactory(this));
+
+ DCHECK(client_);
+
+ // Saves the current message loop.
+ DCHECK(!main_loop_);
+ main_loop_ = MessageLoop::current();
+
+ // Also we want to be notified of |main_loop_| destruction.
+ main_loop_->AddDestructionObserver(this);
}
-WebMediaPlayerDelegateImpl::~WebMediaPlayerDelegateImpl() {
+WebMediaPlayerImpl::~WebMediaPlayerImpl() {
pipeline_.Stop();
- // Cancel all tasks posted on the main_loop_.
+ // Cancel all tasks posted on the |main_loop_|.
CancelAllTasks();
- // After cancelling all tasks, we are sure there will be no calls to
- // web_media_player_, so we are safe to delete it.
- if (web_media_player_) {
- delete web_media_player_;
- }
-
- // Finally tell the main_loop_ we don't want to be notified of destruction
+ // Finally tell the |main_loop_| we don't want to be notified of destruction
// event.
if (main_loop_) {
main_loop_->RemoveDestructionObserver(this);
}
}
-void WebMediaPlayerDelegateImpl::Initialize(
- webkit_glue::WebMediaPlayer* media_player) {
- DCHECK(!web_media_player_);
- web_media_player_ = media_player;
-
- // Saves the current message loop.
- DCHECK(!main_loop_);
- main_loop_ = MessageLoop::current();
-
- // Also we want to be notified of main_loop_ destruction.
- main_loop_->AddDestructionObserver(this);
-}
-
-void WebMediaPlayerDelegateImpl::Load(const GURL& url) {
+void WebMediaPlayerImpl::load(const WebKit::WebURL& url) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// Initialize the pipeline
pipeline_.Start(filter_factory_.get(), url.spec(),
- NewCallback(this, &WebMediaPlayerDelegateImpl::DidInitializePipeline));
+ NewCallback(this, &WebMediaPlayerImpl::DidInitializePipeline));
}
-void WebMediaPlayerDelegateImpl::CancelLoad() {
+void WebMediaPlayerImpl::cancelLoad() {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(hclam): Calls to render_view_ to stop resource load
}
-void WebMediaPlayerDelegateImpl::Play() {
+void WebMediaPlayerImpl::play() {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(hclam): We should restore the previous playback rate rather than
@@ -145,20 +138,20 @@ void WebMediaPlayerDelegateImpl::Play() {
pipeline_.SetPlaybackRate(1.0f);
}
-void WebMediaPlayerDelegateImpl::Pause() {
+void WebMediaPlayerImpl::pause() {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
pipeline_.SetPlaybackRate(0.0f);
}
-void WebMediaPlayerDelegateImpl::Stop() {
+void WebMediaPlayerImpl::stop() {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// We can fire Stop() multiple times.
pipeline_.Stop();
}
-void WebMediaPlayerDelegateImpl::Seek(float seconds) {
+void WebMediaPlayerImpl::seek(float seconds) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
pipeline_.Seek(base::TimeDelta::FromSeconds(static_cast<int64>(seconds)));
@@ -168,116 +161,101 @@ void WebMediaPlayerDelegateImpl::Seek(float seconds) {
//
// TODO(scherkus): add a seek completion callback to the pipeline.
PostTask(kTimeChangedTaskIndex,
- &webkit_glue::WebMediaPlayer::NotifyTimeChange);
+ &WebKit::WebMediaPlayerClient::timeChanged);
}
-void WebMediaPlayerDelegateImpl::SetEndTime(float seconds) {
+void WebMediaPlayerImpl::setEndTime(float seconds) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(hclam): add method call when it has been implemented.
return;
}
-void WebMediaPlayerDelegateImpl::SetPlaybackRate(float rate) {
+void WebMediaPlayerImpl::setRate(float rate) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
pipeline_.SetPlaybackRate(rate);
}
-void WebMediaPlayerDelegateImpl::SetVolume(float volume) {
+void WebMediaPlayerImpl::setVolume(float volume) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
pipeline_.SetVolume(volume);
}
-void WebMediaPlayerDelegateImpl::SetVisible(bool visible) {
+void WebMediaPlayerImpl::setVisible(bool visible) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(hclam): add appropriate method call when pipeline has it implemented.
return;
}
-bool WebMediaPlayerDelegateImpl::IsTotalBytesKnown() {
+bool WebMediaPlayerImpl::setAutoBuffer(bool autoBuffer) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
- return pipeline_.GetTotalBytes() != 0;
+ return false;
}
-bool WebMediaPlayerDelegateImpl::IsVideo() const {
+bool WebMediaPlayerImpl::totalBytesKnown() {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
- size_t width, height;
- pipeline_.GetVideoSize(&width, &height);
- return width != 0 && height != 0;
+ return pipeline_.GetTotalBytes() != 0;
}
-size_t WebMediaPlayerDelegateImpl::GetWidth() const {
+bool WebMediaPlayerImpl::hasVideo() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
size_t width, height;
pipeline_.GetVideoSize(&width, &height);
- return width;
+ return width != 0 && height != 0;
}
-size_t WebMediaPlayerDelegateImpl::GetHeight() const {
+WebKit::WebSize WebMediaPlayerImpl::naturalSize() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
size_t width, height;
pipeline_.GetVideoSize(&width, &height);
- return height;
+ return WebKit::WebSize(width, height);
}
-bool WebMediaPlayerDelegateImpl::IsPaused() const {
+bool WebMediaPlayerImpl::paused() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return pipeline_.GetPlaybackRate() == 0.0f;
}
-bool WebMediaPlayerDelegateImpl::IsSeeking() const {
+bool WebMediaPlayerImpl::seeking() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return tasks_[kTimeChangedTaskIndex] != NULL;
}
-float WebMediaPlayerDelegateImpl::GetDuration() const {
+float WebMediaPlayerImpl::duration() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return static_cast<float>(pipeline_.GetDuration().InSecondsF());
}
-float WebMediaPlayerDelegateImpl::GetCurrentTime() const {
+float WebMediaPlayerImpl::currentTime() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return static_cast<float>(pipeline_.GetTime().InSecondsF());
}
-
-float WebMediaPlayerDelegateImpl::GetPlayBackRate() const {
- DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
-
- return pipeline_.GetPlaybackRate();
-}
-
-float WebMediaPlayerDelegateImpl::GetVolume() const {
- DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
-
- return pipeline_.GetVolume();
-}
-
-int WebMediaPlayerDelegateImpl::GetDataRate() const {
+int WebMediaPlayerImpl::dataRate() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(hclam): Add this method call if pipeline has it in the interface.
return 0;
}
-float WebMediaPlayerDelegateImpl::GetMaxTimeBuffered() const {
+float WebMediaPlayerImpl::maxTimeBuffered() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return static_cast<float>(pipeline_.GetBufferedTime().InSecondsF());
}
-float WebMediaPlayerDelegateImpl::GetMaxTimeSeekable() const {
+float WebMediaPlayerImpl::maxTimeSeekable() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
// TODO(scherkus): move this logic down into the pipeline.
@@ -290,19 +268,19 @@ float WebMediaPlayerDelegateImpl::GetMaxTimeSeekable() const {
return static_cast<float>(duration * (buffered_bytes / total_bytes));
}
-int64 WebMediaPlayerDelegateImpl::GetBytesLoaded() const {
+unsigned long long WebMediaPlayerImpl::bytesLoaded() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return pipeline_.GetBufferedBytes();
}
-int64 WebMediaPlayerDelegateImpl::GetTotalBytes() const {
+unsigned long long WebMediaPlayerImpl::totalBytes() const {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
return pipeline_.GetTotalBytes();
}
-void WebMediaPlayerDelegateImpl::SetSize(const WebSize& size) {
+void WebMediaPlayerImpl::setSize(const WebSize& size) {
DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
if (video_renderer_) {
@@ -311,42 +289,43 @@ void WebMediaPlayerDelegateImpl::SetSize(const WebSize& size) {
}
}
-void WebMediaPlayerDelegateImpl::Paint(skia::PlatformCanvas *canvas,
- const WebRect& rect) {
+void WebMediaPlayerImpl::paint(skia::PlatformCanvas* canvas,
+ const WebRect& rect) {
+ DCHECK(main_loop_ && MessageLoop::current() == main_loop_);
+
if (video_renderer_) {
video_renderer_->Paint(canvas, rect);
}
}
-void WebMediaPlayerDelegateImpl::WillDestroyCurrentMessageLoop() {
+void WebMediaPlayerImpl::WillDestroyCurrentMessageLoop() {
pipeline_.Stop();
}
-void WebMediaPlayerDelegateImpl::DidInitializePipeline(bool successful) {
+void WebMediaPlayerImpl::DidInitializePipeline(bool successful) {
if (successful) {
- // Since we have initialized the pipeline, we should be able to play it.
- // And we skip LOADED_METADATA state and starting with LOADED_FIRST_FRAME.
- ready_state_ = webkit_glue::WebMediaPlayer::HAVE_ENOUGH_DATA;
- network_state_ = webkit_glue::WebMediaPlayer::LOADED;
+ // Since we have initialized the pipeline, say we have everything.
+ // TODO(hclam): change this to report the correct status.
+ ready_state_ = WebKit::WebMediaPlayer::HaveEnoughData;
+ network_state_ = WebKit::WebMediaPlayer::Loaded;
} else {
// TODO(hclam): should use pipeline_.GetError() to determine the state
// properly and reports error using MediaError.
- ready_state_ = webkit_glue::WebMediaPlayer::HAVE_NOTHING;
- network_state_ = webkit_glue::WebMediaPlayer::NETWORK_ERROR;
+ ready_state_ = WebKit::WebMediaPlayer::HaveNothing;
+ network_state_ = WebKit::WebMediaPlayer::NetworkError;
}
PostTask(kNetworkStateTaskIndex,
- &webkit_glue::WebMediaPlayer::NotifyNetworkStateChange);
+ &WebKit::WebMediaPlayerClient::networkStateChanged);
PostTask(kReadyStateTaskIndex,
- &webkit_glue::WebMediaPlayer::NotifyReadyStateChange);
+ &WebKit::WebMediaPlayerClient::readyStateChanged);
}
-void WebMediaPlayerDelegateImpl::SetVideoRenderer(
- VideoRendererImpl* video_renderer) {
+void WebMediaPlayerImpl::SetVideoRenderer(VideoRendererImpl* video_renderer) {
video_renderer_ = video_renderer;
}
-void WebMediaPlayerDelegateImpl::DidTask(CancelableTask* task) {
+void WebMediaPlayerImpl::DidTask(CancelableTask* task) {
AutoLock auto_lock(task_lock_);
for (size_t i = 0; i < tasks_.size(); ++i) {
@@ -358,7 +337,7 @@ void WebMediaPlayerDelegateImpl::DidTask(CancelableTask* task) {
NOTREACHED();
}
-void WebMediaPlayerDelegateImpl::CancelAllTasks() {
+void WebMediaPlayerImpl::CancelAllTasks() {
AutoLock auto_lock(task_lock_);
// Loop through the list of tasks and cancel tasks that are still alive.
for (size_t i = 0; i < tasks_.size(); ++i) {
@@ -367,18 +346,18 @@ void WebMediaPlayerDelegateImpl::CancelAllTasks() {
}
}
-void WebMediaPlayerDelegateImpl::PostTask(int index,
- WebMediaPlayerMethod method) {
+void WebMediaPlayerImpl::PostTask(int index,
+ WebMediaPlayerClientMethod method) {
DCHECK(main_loop_);
AutoLock auto_lock(task_lock_);
- if(!tasks_[index]) {
+ if (!tasks_[index]) {
CancelableTask* task = new NotifyWebMediaPlayerTask(this, method);
tasks_[index] = task;
main_loop_->PostTask(FROM_HERE, task);
}
}
-void WebMediaPlayerDelegateImpl::PostRepaintTask() {
- PostTask(kRepaintTaskIndex, &webkit_glue::WebMediaPlayer::Repaint);
+void WebMediaPlayerImpl::PostRepaintTask() {
+ PostTask(kRepaintTaskIndex, &WebKit::WebMediaPlayerClient::repaint);
}
diff --git a/chrome/renderer/webmediaplayer_delegate_impl.h b/chrome/renderer/webmediaplayer_impl.h
index 9ae5383..12c675f 100644
--- a/chrome/renderer/webmediaplayer_delegate_impl.h
+++ b/chrome/renderer/webmediaplayer_impl.h
@@ -1,8 +1,8 @@
-// Copyright (c) 2008 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.
+// Copyright (c) 2008-2009 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.
//
-// Delegate calls from WebCore::MediaPlayerPrivate to google's video player.
+// Delegate calls from WebCore::MediaPlayerPrivate to Chrome's video player.
// It contains PipelineImpl which is the actual media player pipeline, it glues
// the media player pipeline, data source, audio renderer and renderer.
// PipelineImpl would creates multiple threads and access some public methods
@@ -40,19 +40,22 @@
// at destruction of this class we will need to unhook it from destruction event
// list of the main thread.
-#ifndef CHROME_RENDERER_WEBMEDIAPLAYER_DELEGATE_IMPL_H_
-#define CHROME_RENDERER_WEBMEDIAPLAYER_DELEGATE_IMPL_H_
+#ifndef CHROME_RENDERER_WEBMEDIAPLAYER_IMPL_H_
+#define CHROME_RENDERER_WEBMEDIAPLAYER_IMPL_H_
#include <vector>
+#include "base/gfx/platform_canvas.h"
#include "base/lock.h"
#include "base/message_loop.h"
#include "media/base/filters.h"
#include "media/base/pipeline_impl.h"
-#include "webkit/glue/webmediaplayer_delegate.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebMediaPlayer.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebMediaPlayerClient.h"
class AudioRendererImpl;
class DataSourceImpl;
+class GURL;
class RenderView;
class VideoRendererImpl;
@@ -60,103 +63,97 @@ namespace media {
class FilterFactoryCollection;
}
-// This typedef is used for WebMediaPlayerDelegateImpl::PostTask() and
+// This typedef is used for WebMediaPlayerImpl::PostTask() and
// NotifyWebMediaPlayerTask in the source file.
-typedef void (webkit_glue::WebMediaPlayer::*WebMediaPlayerMethod)();
+typedef void (WebKit::WebMediaPlayerClient::*WebMediaPlayerClientMethod)();
-class WebMediaPlayerDelegateImpl : public webkit_glue::WebMediaPlayerDelegate,
- public MessageLoop::DestructionObserver {
+class WebMediaPlayerImpl : public WebKit::WebMediaPlayer,
+ public MessageLoop::DestructionObserver {
public:
- explicit WebMediaPlayerDelegateImpl(RenderView* view);
- virtual ~WebMediaPlayerDelegateImpl();
+ WebMediaPlayerImpl(RenderView* view, WebKit::WebMediaPlayerClient* client);
+ virtual ~WebMediaPlayerImpl();
- // Implementations of WebMediaPlayerDelegate, theses following methods are
- // called from the WebKit, essentially lives inside the main thread.
- virtual void Initialize(webkit_glue::WebMediaPlayer* media_player);
-
- virtual void Load(const GURL& url);
- virtual void CancelLoad();
+ virtual void load(const WebKit::WebURL& url);
+ virtual void cancelLoad();
// Playback controls.
- virtual void Play();
- virtual void Pause();
- virtual void Stop();
- virtual void Seek(float seconds);
- virtual void SetEndTime(float seconds);
- virtual void SetPlaybackRate(float rate);
- virtual void SetVolume(float volume);
- virtual void SetVisible(bool visible);
- virtual bool IsTotalBytesKnown();
+ virtual void play();
+ virtual void pause();
+ virtual void stop();
+ virtual void seek(float seconds);
+ virtual void setEndTime(float seconds);
+ virtual void setRate(float rate);
+ virtual void setVolume(float volume);
+ virtual void setVisible(bool visible);
+ virtual bool setAutoBuffer(bool autoBuffer);
+ virtual bool totalBytesKnown();
+ virtual float maxTimeBuffered() const;
+ virtual float maxTimeSeekable() const;
// Methods for painting.
- virtual void SetSize(const WebKit::WebSize& size);
+ virtual void setSize(const WebKit::WebSize& size);
- virtual void Paint(skia::PlatformCanvas *canvas,
- const WebKit::WebRect& rect);
+ virtual void paint(WebKit::WebCanvas* canvas, const WebKit::WebRect& rect);
// True if a video is loaded.
- virtual bool IsVideo() const;
+ virtual bool hasVideo() const;
- // Dimension of the video.
- virtual size_t GetWidth() const;
- virtual size_t GetHeight() const;
+ // Dimensions of the video.
+ virtual WebKit::WebSize naturalSize() const;
// Getters of playback state.
- virtual bool IsPaused() const;
- virtual bool IsSeeking() const;
- virtual float GetDuration() const;
- virtual float GetCurrentTime() const;
- virtual float GetPlayBackRate() const;
- virtual float GetVolume() const;
- virtual float GetMaxTimeBuffered() const;
- virtual float GetMaxTimeSeekable() const;
+ virtual bool paused() const;
+ virtual bool seeking() const;
+ virtual float duration() const;
+ virtual float currentTime() const;
// Get rate of loading the resource.
- virtual int32 GetDataRate() const;
+ virtual int32 dataRate() const;
// Internal states of loading and network.
// TODO(hclam): Ask the pipeline about the state rather than having reading
// them from members which would cause race conditions.
- virtual webkit_glue::WebMediaPlayer::NetworkState GetNetworkState() const {
+ virtual WebKit::WebMediaPlayer::NetworkState networkState() const {
return network_state_;
}
- virtual webkit_glue::WebMediaPlayer::ReadyState GetReadyState() const {
+ virtual WebKit::WebMediaPlayer::ReadyState readyState() const {
return ready_state_;
}
- virtual int64 GetBytesLoaded() const;
- virtual int64 GetTotalBytes() const;
+ virtual unsigned long long bytesLoaded() const;
+ virtual unsigned long long totalBytes() const;
- // As we are closing the tab or even the browser, main_loop_ is destroyed
+ // As we are closing the tab or even the browser, |main_loop_| is destroyed
// even before this object gets destructed, so we need to know when
- // main_loop_ is being destroyed and we can stop posting repaint task
+ // |main_loop_| is being destroyed and we can stop posting repaint task
// to it.
virtual void WillDestroyCurrentMessageLoop();
- // Callbacks.
+ // Notification callback for initialization from |pipeline_|. |successful| is
+ // true if the pipeline initialization is successful otherwise false.
void DidInitializePipeline(bool successful);
- // Called from tasks posted to main_loop_ from this object to remove
+ // Called from tasks posted to |main_loop_| from this object to remove
// reference of them.
void DidTask(CancelableTask* task);
// Public methods to be called from renderers and data source so that
- // WebMediaPlayerDelegateImpl has references to them.
+ // WebMediaPlayerImpl has references to them.
void SetVideoRenderer(VideoRendererImpl* video_renderer);
- // Called from VideoRenderer to fire a repaint task to main_loop_.
+ // Called from VideoRenderer to fire a repaint task to |main_loop_|.
void PostRepaintTask();
// Inline getters.
- webkit_glue::WebMediaPlayer* web_media_player() { return web_media_player_; }
+ WebKit::WebMediaPlayerClient* client() { return client_; }
RenderView* view() { return view_; }
private:
// Methods for posting tasks and cancelling tasks. This method may lives in
// the main thread or the media threads.
- void PostTask(int index, WebMediaPlayerMethod method);
+ void PostTask(int index, WebMediaPlayerClientMethod method);
- // Cancel all tasks currently lives in |main_loop_|.
+ // Cancel all tasks currently live in |main_loop_|.
void CancelAllTasks();
// Indexes for tasks.
@@ -169,12 +166,12 @@ class WebMediaPlayerDelegateImpl : public webkit_glue::WebMediaPlayerDelegate,
};
// TODO(hclam): get rid of these members and read from the pipeline directly.
- webkit_glue::WebMediaPlayer::NetworkState network_state_;
- webkit_glue::WebMediaPlayer::ReadyState ready_state_;
+ WebKit::WebMediaPlayer::NetworkState network_state_;
+ WebKit::WebMediaPlayer::ReadyState ready_state_;
// Message loops for posting tasks between Chrome's main thread. Also used
// for DCHECKs so methods calls won't execute in the wrong thread.
- MessageLoop* main_loop_;
+ MessageLoop* |main_loop_|;
// A collection of factories for creating filters.
scoped_refptr<media::FilterFactoryCollection> filter_factory_;
@@ -187,7 +184,7 @@ class WebMediaPlayerDelegateImpl : public webkit_glue::WebMediaPlayerDelegate,
// from WebKit.
scoped_refptr<VideoRendererImpl> video_renderer_;
- webkit_glue::WebMediaPlayer* web_media_player_;
+ WebKit::WebMediaPlayerClient* client_;
RenderView* view_;
// List of tasks for holding pointers to all tasks currently in the
@@ -197,7 +194,7 @@ class WebMediaPlayerDelegateImpl : public webkit_glue::WebMediaPlayerDelegate,
typedef std::vector<CancelableTask*> CancelableTaskList;
CancelableTaskList tasks_;
- DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerDelegateImpl);
+ DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
};
-#endif // ifndef CHROME_RENDERER_WEBMEDIAPLAYER_DELEGATE_IMPL_H_
+#endif // CHROME_RENDERER_WEBMEDIAPLAYER_IMPL_H_