| Index: webkit/renderer/media/webmediaplayer_impl.h
|
| diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h
|
| deleted file mode 100644
|
| index b2ec010460ce5fbca4d51e07a5634d8c66aba3e8..0000000000000000000000000000000000000000
|
| --- a/webkit/renderer/media/webmediaplayer_impl.h
|
| +++ /dev/null
|
| @@ -1,373 +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.
|
| -
|
| -// Delegate calls from WebCore::MediaPlayerPrivate to Chrome's video player.
|
| -// It contains Pipeline which is the actual media player pipeline, it glues
|
| -// the media player pipeline, data source, audio renderer and renderer.
|
| -// Pipeline 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.
|
| -//
|
| -// 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_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
|
| -#define WEBKIT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/threading/thread.h"
|
| -#include "cc/layers/video_frame_provider.h"
|
| -#include "googleurl/src/gurl.h"
|
| -#include "media/base/audio_renderer_sink.h"
|
| -#include "media/base/decryptor.h"
|
| -#include "media/base/media_keys.h"
|
| -#include "media/base/pipeline.h"
|
| -#include "media/base/text_track.h"
|
| -#include "media/filters/gpu_video_decoder.h"
|
| -#include "media/filters/skcanvas_video_renderer.h"
|
| -#include "skia/ext/platform_canvas.h"
|
| -#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
|
| -#include "third_party/WebKit/public/web/WebAudioSourceProvider.h"
|
| -#include "third_party/WebKit/public/web/WebMediaPlayer.h"
|
| -#include "third_party/WebKit/public/web/WebMediaPlayerClient.h"
|
| -#include "webkit/renderer/media/crypto/proxy_decryptor.h"
|
| -
|
| -class RenderAudioSourceProvider;
|
| -
|
| -namespace WebKit {
|
| -class WebFrame;
|
| -}
|
| -
|
| -namespace base {
|
| -class MessageLoopProxy;
|
| -}
|
| -
|
| -namespace media {
|
| -class ChunkDemuxer;
|
| -class FFmpegDemuxer;
|
| -class MediaLog;
|
| -}
|
| -
|
| -namespace webkit {
|
| -class WebLayerImpl;
|
| -}
|
| -
|
| -namespace webkit_media {
|
| -
|
| -class BufferedDataSource;
|
| -class MediaStreamClient;
|
| -class WebAudioSourceProviderImpl;
|
| -class WebMediaPlayerDelegate;
|
| -class WebMediaPlayerParams;
|
| -class WebTextTrackImpl;
|
| -
|
| -class WebMediaPlayerImpl
|
| - : public WebKit::WebMediaPlayer,
|
| - public cc::VideoFrameProvider,
|
| - public base::MessageLoop::DestructionObserver,
|
| - public base::SupportsWeakPtr<WebMediaPlayerImpl> {
|
| - public:
|
| - // Constructs a WebMediaPlayer implementation using Chromium's media stack.
|
| - //
|
| - // |delegate| may be null.
|
| - WebMediaPlayerImpl(
|
| - WebKit::WebFrame* frame,
|
| - WebKit::WebMediaPlayerClient* client,
|
| - base::WeakPtr<WebMediaPlayerDelegate> delegate,
|
| - const WebMediaPlayerParams& params);
|
| - virtual ~WebMediaPlayerImpl();
|
| -
|
| - virtual void load(const WebKit::WebURL& url, CORSMode cors_mode);
|
| - virtual void load(const WebKit::WebURL& url,
|
| - WebKit::WebMediaSource* media_source,
|
| - CORSMode cors_mode);
|
| -
|
| - // Playback controls.
|
| - virtual void play();
|
| - virtual void pause();
|
| - virtual bool supportsFullscreen() const;
|
| - virtual bool supportsSave() const;
|
| - virtual void seek(double seconds);
|
| - virtual void setRate(double rate);
|
| - virtual void setVolume(double volume);
|
| - virtual void setPreload(WebKit::WebMediaPlayer::Preload preload);
|
| - virtual const WebKit::WebTimeRanges& buffered();
|
| - virtual double maxTimeSeekable() const;
|
| -
|
| - // Methods for painting.
|
| - virtual void paint(WebKit::WebCanvas* canvas,
|
| - const WebKit::WebRect& rect,
|
| - unsigned char alpha);
|
| -
|
| - // 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 double duration() const;
|
| - virtual double currentTime() 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 bool didLoadingProgress() const;
|
| -
|
| - virtual bool hasSingleSecurityOrigin() const;
|
| - virtual bool didPassCORSAccessCheck() const;
|
| -
|
| - virtual double mediaTimeForTimeValue(double timeValue) const;
|
| -
|
| - virtual unsigned decodedFrameCount() const;
|
| - virtual unsigned droppedFrameCount() const;
|
| - virtual unsigned audioDecodedByteCount() const;
|
| - virtual unsigned videoDecodedByteCount() const;
|
| -
|
| - // cc::VideoFrameProvider implementation.
|
| - virtual void SetVideoFrameProviderClient(
|
| - cc::VideoFrameProvider::Client* client) OVERRIDE;
|
| - virtual scoped_refptr<media::VideoFrame> GetCurrentFrame() OVERRIDE;
|
| - virtual void PutCurrentFrame(const scoped_refptr<media::VideoFrame>& frame)
|
| - OVERRIDE;
|
| -
|
| - virtual bool copyVideoTextureToPlatformTexture(
|
| - WebKit::WebGraphicsContext3D* web_graphics_context,
|
| - unsigned int texture,
|
| - unsigned int level,
|
| - unsigned int internal_format,
|
| - unsigned int type,
|
| - bool premultiply_alpha,
|
| - bool flip_y);
|
| -
|
| - virtual WebKit::WebAudioSourceProvider* audioSourceProvider();
|
| -
|
| - virtual MediaKeyException generateKeyRequest(
|
| - const WebKit::WebString& key_system,
|
| - const unsigned char* init_data,
|
| - unsigned init_data_length);
|
| -
|
| - virtual MediaKeyException addKey(const WebKit::WebString& key_system,
|
| - const unsigned char* key,
|
| - unsigned key_length,
|
| - const unsigned char* init_data,
|
| - unsigned init_data_length,
|
| - const WebKit::WebString& session_id);
|
| -
|
| - virtual MediaKeyException cancelKeyRequest(
|
| - const WebKit::WebString& key_system,
|
| - const WebKit::WebString& session_id);
|
| -
|
| - // 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() OVERRIDE;
|
| -
|
| - void Repaint();
|
| -
|
| - void OnPipelineSeek(media::PipelineStatus status);
|
| - void OnPipelineEnded();
|
| - void OnPipelineError(media::PipelineStatus error);
|
| - void OnPipelineBufferingState(
|
| - media::Pipeline::BufferingState buffering_state);
|
| - void OnDemuxerOpened(scoped_ptr<WebKit::WebMediaSource> media_source);
|
| - void OnKeyAdded(const std::string& session_id);
|
| - void OnKeyError(const std::string& session_id,
|
| - media::MediaKeys::KeyError error_code,
|
| - int system_code);
|
| - void OnKeyMessage(const std::string& session_id,
|
| - const std::string& message,
|
| - const std::string& default_url);
|
| - void OnNeedKey(const std::string& type,
|
| - const std::string& session_id,
|
| - scoped_ptr<uint8[]> init_data,
|
| - int init_data_size);
|
| - scoped_ptr<media::TextTrack> OnTextTrack(media::TextKind kind,
|
| - const std::string& label,
|
| - const std::string& language);
|
| - void SetOpaque(bool);
|
| -
|
| - private:
|
| - // Contains common logic used across the different types loading.
|
| - void LoadSetup(const WebKit::WebURL& url);
|
| -
|
| - // Called after asynchronous initialization of a data source completed.
|
| - void DataSourceInitialized(const GURL& gurl, bool success);
|
| -
|
| - // Called when the data source is downloading or paused.
|
| - void NotifyDownloading(bool is_downloading);
|
| -
|
| - // Finishes starting the pipeline due to a call to load().
|
| - //
|
| - // A non-null |media_source| will construct a Media Source pipeline.
|
| - void StartPipeline(WebKit::WebMediaSource* media_source);
|
| -
|
| - // 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();
|
| -
|
| - // Actually do the work for generateKeyRequest/addKey so they can easily
|
| - // report results to UMA.
|
| - MediaKeyException GenerateKeyRequestInternal(
|
| - const WebKit::WebString& key_system,
|
| - const unsigned char* init_data,
|
| - unsigned init_data_length);
|
| - MediaKeyException AddKeyInternal(const WebKit::WebString& key_system,
|
| - const unsigned char* key,
|
| - unsigned key_length,
|
| - const unsigned char* init_data,
|
| - unsigned init_data_length,
|
| - const WebKit::WebString& session_id);
|
| - MediaKeyException CancelKeyRequestInternal(
|
| - const WebKit::WebString& key_system,
|
| - const WebKit::WebString& session_id);
|
| -
|
| - // Gets the duration value reported by the pipeline.
|
| - double GetPipelineDuration() const;
|
| -
|
| - // Notifies WebKit of the duration change.
|
| - void OnDurationChange();
|
| -
|
| - // Called by VideoRendererBase on its internal thread with the new frame to be
|
| - // painted.
|
| - void FrameReady(const scoped_refptr<media::VideoFrame>& frame);
|
| -
|
| - WebKit::WebFrame* frame_;
|
| -
|
| - // 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 on Chrome's main thread. Also used
|
| - // for DCHECKs so methods calls won't execute in the wrong thread.
|
| - const scoped_refptr<base::MessageLoopProxy> main_loop_;
|
| -
|
| - scoped_ptr<media::Pipeline> pipeline_;
|
| - scoped_refptr<base::MessageLoopProxy> media_loop_;
|
| -
|
| - // The currently selected key system. Empty string means that no key system
|
| - // has been selected.
|
| - WebKit::WebString current_key_system_;
|
| -
|
| - // 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_;
|
| - double 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_;
|
| - double pending_seek_seconds_;
|
| -
|
| - WebKit::WebMediaPlayerClient* client_;
|
| -
|
| - base::WeakPtr<WebMediaPlayerDelegate> delegate_;
|
| -
|
| - MediaStreamClient* media_stream_client_;
|
| -
|
| - scoped_refptr<media::MediaLog> media_log_;
|
| -
|
| - // Since accelerated compositing status is only known after the first layout,
|
| - // we delay reporting it to UMA until that time.
|
| - bool accelerated_compositing_reported_;
|
| -
|
| - bool incremented_externally_allocated_memory_;
|
| -
|
| - // Factories for supporting GpuVideoDecoder. May be null.
|
| - scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_;
|
| -
|
| - // Routes audio playback to either AudioRendererSink or WebAudio.
|
| - scoped_refptr<WebAudioSourceProviderImpl> audio_source_provider_;
|
| -
|
| - bool is_local_source_;
|
| - bool supports_save_;
|
| -
|
| - // The decryptor that manages decryption keys and decrypts encrypted frames.
|
| - scoped_ptr<ProxyDecryptor> decryptor_;
|
| -
|
| - bool starting_;
|
| -
|
| - // These two are mutually exclusive:
|
| - // |data_source_| is used for regular resource loads.
|
| - // |chunk_demuxer_| is used for Media Source resource loads.
|
| - //
|
| - // |demuxer_| will contain the appropriate demuxer based on which resource
|
| - // load strategy we're using.
|
| - scoped_ptr<BufferedDataSource> data_source_;
|
| - scoped_ptr<media::Demuxer> demuxer_;
|
| - media::ChunkDemuxer* chunk_demuxer_;
|
| -
|
| - // Temporary for EME v0.1. In the future the init data type should be passed
|
| - // through GenerateKeyRequest() directly from WebKit.
|
| - std::string init_data_type_;
|
| -
|
| - // Video frame rendering members.
|
| - //
|
| - // |lock_| protects |current_frame_| since new frames arrive on the video
|
| - // rendering thread, yet are accessed for rendering on either the main thread
|
| - // or compositing thread depending on whether accelerated compositing is used.
|
| - base::Lock lock_;
|
| - media::SkCanvasVideoRenderer skcanvas_video_renderer_;
|
| - scoped_refptr<media::VideoFrame> current_frame_;
|
| - bool pending_repaint_;
|
| - bool pending_size_change_;
|
| -
|
| - // The compositor layer for displaying the video content when using composited
|
| - // playback.
|
| - scoped_ptr<webkit::WebLayerImpl> video_weblayer_;
|
| -
|
| - // A pointer back to the compositor to inform it about state changes. This is
|
| - // not NULL while the compositor is actively using this webmediaplayer.
|
| - cc::VideoFrameProvider::Client* video_frame_provider_client_;
|
| -
|
| - // Text track objects get a unique index value when they're created.
|
| - int text_track_index_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
|
| -};
|
| -
|
| -} // namespace webkit_media
|
| -
|
| -#endif // WEBKIT_RENDERER_MEDIA_WEBMEDIAPLAYER_IMPL_H_
|
|
|