Index: webkit/glue/webmediaplayer_impl.h |
diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h |
deleted file mode 100644 |
index 3acaa6f1d8b4e2369a851e528b03c936863f4655..0000000000000000000000000000000000000000 |
--- a/webkit/glue/webmediaplayer_impl.h |
+++ /dev/null |
@@ -1,277 +0,0 @@ |
-// Copyright (c) 2011 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 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 |
-// of this class, so we need to be extra careful about concurrent access of |
-// methods and members. |
-// |
-// WebMediaPlayerImpl works with multiple objects, the most important ones are: |
-// |
-// media::PipelineImpl |
-// The media playback pipeline. |
-// |
-// WebVideoRenderer |
-// Video renderer object. |
-// |
-// WebKit::WebMediaPlayerClient |
-// WebKit client of this media player object. |
-// |
-// The following diagram shows the relationship of these objects: |
-// (note: ref-counted reference is marked by a "r".) |
-// |
-// WebMediaPlayerClient (WebKit object) |
-// ^ |
-// | |
-// WebMediaPlayerImpl ---> PipelineImpl |
-// | ^ | |
-// | | v r |
-// | | WebVideoRenderer |
-// | | | ^ r |
-// | r | v r | |
-// '---> WebMediaPlayerProxy --' |
-// |
-// Notice that WebMediaPlayerProxy and WebVideoRenderer are referencing each |
-// other. This interdependency has to be treated carefully. |
-// |
-// Other issues: |
-// During tear down of the whole browser or a tab, the DOM tree may not be |
-// destructed nicely, and there will be some dangling media threads trying to |
-// the main thread, so we need this class to listen to destruction event of the |
-// main thread and cleanup the media threads when the even is received. Also |
-// at destruction of this class we will need to unhook it from destruction event |
-// list of the main thread. |
- |
-#ifndef WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ |
-#define WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ |
- |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/message_loop.h" |
-#include "media/base/filters.h" |
-#include "media/base/message_loop_factory.h" |
-#include "media/base/pipeline.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h" |
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.h" |
- |
-class GURL; |
- |
-namespace WebKit { |
-class WebFrame; |
-} |
- |
-namespace media { |
-class MediaLog; |
-} |
- |
-namespace webkit_glue { |
- |
-class MediaResourceLoaderBridgeFactory; |
-class MediaStreamClient; |
-class WebMediaPlayerDelegate; |
-class WebMediaPlayerProxy; |
-class WebVideoRenderer; |
- |
-class WebMediaPlayerImpl |
- : public WebKit::WebMediaPlayer, |
- public MessageLoop::DestructionObserver, |
- public base::SupportsWeakPtr<WebMediaPlayerImpl> { |
- public: |
- // Construct a WebMediaPlayerImpl with reference to the client, and media |
- // filter collection. By providing the filter collection the implementor can |
- // provide more specific media filters that does resource loading and |
- // rendering. |collection| should contain filter factories for: |
- // 1. Data source |
- // 2. Audio renderer |
- // 3. Video renderer (optional) |
- // |
- // There are some default filters provided by this method: |
- // 1. FFmpeg demuxer |
- // 2. FFmpeg audio decoder |
- // 3. FFmpeg video decoder |
- // 4. Video renderer |
- // 5. Null audio renderer |
- // The video renderer provided by this class is using the graphics context |
- // provided by WebKit to perform renderering. The simple data source does |
- // resource loading by loading the whole resource object into memory. Null |
- // audio renderer is a fake audio device that plays silence. Provider of the |
- // |collection| can override the default filters by adding extra filters to |
- // |collection| before calling this method. |
- // |
- // Callers must call |Initialize()| before they can use the object. |
- WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client, |
- base::WeakPtr<WebMediaPlayerDelegate> delegate, |
- media::FilterCollection* collection, |
- media::MessageLoopFactory* message_loop_factory, |
- MediaStreamClient* media_stream_client, |
- media::MediaLog* media_log); |
- virtual ~WebMediaPlayerImpl(); |
- |
- // Finalizes initialization of the object. |
- bool Initialize( |
- WebKit::WebFrame* frame, |
- bool use_simple_data_source, |
- scoped_refptr<WebVideoRenderer> web_video_renderer); |
- |
- virtual void load(const WebKit::WebURL& url); |
- virtual void cancelLoad(); |
- |
- // Playback controls. |
- virtual void play(); |
- virtual void pause(); |
- virtual bool supportsFullscreen() const; |
- virtual bool supportsSave() const; |
- 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 void setPreload(WebKit::WebMediaPlayer::Preload preload); |
- virtual bool totalBytesKnown(); |
- virtual const WebKit::WebTimeRanges& buffered(); |
- virtual float maxTimeSeekable() const; |
- |
- // Methods for painting. |
- virtual void setSize(const WebKit::WebSize& size); |
- |
- virtual void paint(WebKit::WebCanvas* canvas, const WebKit::WebRect& rect); |
- |
- // True if the loaded media has a playable video/audio track. |
- virtual bool hasVideo() const; |
- virtual bool hasAudio() const; |
- |
- // Dimensions of the video. |
- virtual WebKit::WebSize naturalSize() const; |
- |
- // Getters of playback state. |
- virtual bool paused() const; |
- virtual bool seeking() const; |
- virtual float duration() const; |
- virtual float currentTime() const; |
- |
- // Get rate of loading the resource. |
- 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::WebMediaPlayer::NetworkState networkState() const; |
- virtual WebKit::WebMediaPlayer::ReadyState readyState() const; |
- |
- virtual unsigned long long bytesLoaded() const; |
- virtual unsigned long long totalBytes() const; |
- |
- virtual bool hasSingleSecurityOrigin() const; |
- virtual WebKit::WebMediaPlayer::MovieLoadType movieLoadType() const; |
- |
- virtual float mediaTimeForTimeValue(float timeValue) const; |
- |
- virtual unsigned decodedFrameCount() const; |
- virtual unsigned droppedFrameCount() const; |
- virtual unsigned audioDecodedByteCount() const; |
- virtual unsigned videoDecodedByteCount() const; |
- |
- virtual WebKit::WebVideoFrame* getCurrentFrame(); |
- virtual void putCurrentFrame(WebKit::WebVideoFrame* web_video_frame); |
- |
- virtual bool sourceAppend(const unsigned char* data, unsigned length); |
- virtual void sourceEndOfStream(EndOfStreamStatus status); |
- |
- // 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 |
- // to it. |
- virtual void WillDestroyCurrentMessageLoop(); |
- |
- void Repaint(); |
- |
- void OnPipelineInitialize(media::PipelineStatus status); |
- void OnPipelineSeek(media::PipelineStatus status); |
- void OnPipelineEnded(media::PipelineStatus status); |
- void OnPipelineError(media::PipelineStatus error); |
- void OnNetworkEvent(bool is_downloading_data); |
- void OnDemuxerOpened(); |
- |
- private: |
- // Helpers that set the network/ready state and notifies the client if |
- // they've changed. |
- void SetNetworkState(WebKit::WebMediaPlayer::NetworkState state); |
- void SetReadyState(WebKit::WebMediaPlayer::ReadyState state); |
- |
- // Destroy resources held. |
- void Destroy(); |
- |
- // Getter method to |client_|. |
- WebKit::WebMediaPlayerClient* GetClient(); |
- |
- // Lets V8 know that player uses extra resources not managed by V8. |
- void IncrementExternallyAllocatedMemory(); |
- |
- // TODO(hclam): get rid of these members and read from the pipeline directly. |
- WebKit::WebMediaPlayer::NetworkState network_state_; |
- WebKit::WebMediaPlayer::ReadyState ready_state_; |
- |
- // Keep a list of buffered time ranges. |
- WebKit::WebTimeRanges buffered_; |
- |
- // 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_; |
- |
- // A collection of filters. |
- scoped_ptr<media::FilterCollection> filter_collection_; |
- |
- // The actual pipeline and the thread it runs on. |
- scoped_refptr<media::Pipeline> pipeline_; |
- |
- scoped_ptr<media::MessageLoopFactory> message_loop_factory_; |
- |
- // Playback state. |
- // |
- // TODO(scherkus): we have these because Pipeline favours the simplicity of a |
- // single "playback rate" over worrying about paused/stopped etc... It forces |
- // all clients to manage the pause+playback rate externally, but is that |
- // really a bad thing? |
- // |
- // TODO(scherkus): since SetPlaybackRate(0) is asynchronous and we don't want |
- // to hang the render thread during pause(), we record the time at the same |
- // time we pause and then return that value in currentTime(). Otherwise our |
- // clock can creep forward a little bit while the asynchronous |
- // SetPlaybackRate(0) is being executed. |
- bool paused_; |
- bool seeking_; |
- float playback_rate_; |
- base::TimeDelta paused_time_; |
- |
- // Seek gets pending if another seek is in progress. Only last pending seek |
- // will have effect. |
- bool pending_seek_; |
- float pending_seek_seconds_; |
- |
- WebKit::WebMediaPlayerClient* client_; |
- |
- scoped_refptr<WebMediaPlayerProxy> proxy_; |
- |
- base::WeakPtr<WebMediaPlayerDelegate> delegate_; |
- |
- MediaStreamClient* media_stream_client_; |
- |
-#if WEBKIT_USING_CG |
- scoped_ptr<skia::PlatformCanvas> skia_canvas_; |
-#endif |
- |
- scoped_refptr<media::MediaLog> media_log_; |
- |
- bool incremented_externally_allocated_memory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl); |
-}; |
- |
-} // namespace webkit_glue |
- |
-#endif // WEBKIT_GLUE_WEBMEDIAPLAYER_IMPL_H_ |