Index: webkit/renderer/media/android/webmediaplayer_android.h |
diff --git a/webkit/renderer/media/android/webmediaplayer_android.h b/webkit/renderer/media/android/webmediaplayer_android.h |
deleted file mode 100644 |
index a914d7489d8c19054756110d414a40c6b50f3f0e..0000000000000000000000000000000000000000 |
--- a/webkit/renderer/media/android/webmediaplayer_android.h |
+++ /dev/null |
@@ -1,413 +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_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
-#define WEBKIT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
- |
-#include <jni.h> |
- |
-#include "base/basictypes.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 "base/time.h" |
-#include "cc/layers/video_frame_provider.h" |
-#include "media/base/android/media_player_android.h" |
-#include "media/base/demuxer_stream.h" |
-#include "media/base/media_keys.h" |
-#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" |
-#include "third_party/WebKit/public/platform/WebSize.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
-#include "third_party/WebKit/public/web/WebMediaPlayer.h" |
-#include "ui/gfx/rect_f.h" |
-#include "webkit/renderer/media/android/media_source_delegate.h" |
-#include "webkit/renderer/media/android/stream_texture_factory_android.h" |
-#include "webkit/renderer/media/crypto/proxy_decryptor.h" |
-#include "webkit/renderer/media/media_info_loader.h" |
- |
-namespace media { |
-class Demuxer; |
-class MediaLog; |
-} |
- |
-namespace WebKit { |
-class WebFrame; |
-} |
- |
-namespace webkit { |
-class WebLayerImpl; |
-} |
- |
-namespace webkit_media { |
- |
-class MediaStreamClient; |
-class WebMediaPlayerDelegate; |
-class WebMediaPlayerManagerAndroid; |
-class WebMediaPlayerProxyAndroid; |
- |
-#if defined(GOOGLE_TV) |
-class MediaStreamAudioRenderer; |
-#endif |
- |
-// This class implements WebKit::WebMediaPlayer by keeping the android |
-// media player in the browser process. It listens to all the status changes |
-// sent from the browser process and sends playback controls to the media |
-// player. |
-class WebMediaPlayerAndroid |
- : public WebKit::WebMediaPlayer, |
- public cc::VideoFrameProvider, |
- public base::MessageLoop::DestructionObserver, |
- public base::SupportsWeakPtr<WebMediaPlayerAndroid> { |
- public: |
- // Construct a WebMediaPlayerAndroid object. This class communicates |
- // with the MediaPlayerAndroid object in the browser process through |
- // |proxy|. |
- // TODO(qinmin): |frame| argument is used to determine whether the current |
- // player can enter fullscreen. This logic should probably be moved into |
- // blink, so that enterFullscreen() will not be called if another video is |
- // already in fullscreen. |
- WebMediaPlayerAndroid(WebKit::WebFrame* frame, |
- WebKit::WebMediaPlayerClient* client, |
- base::WeakPtr<WebMediaPlayerDelegate> delegate, |
- WebMediaPlayerManagerAndroid* manager, |
- WebMediaPlayerProxyAndroid* proxy, |
- StreamTextureFactory* factory, |
- media::MediaLog* media_log); |
- virtual ~WebMediaPlayerAndroid(); |
- |
- // WebKit::WebMediaPlayer implementation. |
- virtual void enterFullscreen(); |
- virtual void exitFullscreen(); |
- virtual bool canEnterFullscreen() const; |
- |
- // Resource loading. |
- 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 void seek(double seconds); |
- virtual bool supportsFullscreen() const; |
- virtual bool supportsSave() const; |
- virtual void setRate(double rate); |
- virtual void setVolume(double volume); |
- 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); |
- |
- 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); |
- |
- // 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; |
- |
- virtual bool didLoadingProgress() const; |
- |
- // Internal states of loading and network. |
- virtual WebKit::WebMediaPlayer::NetworkState networkState() const; |
- virtual WebKit::WebMediaPlayer::ReadyState readyState() const; |
- |
- virtual bool hasSingleSecurityOrigin() const; |
- virtual bool didPassCORSAccessCheck() const; |
- |
- virtual double mediaTimeForTimeValue(double timeValue) const; |
- |
- // Provide statistics. |
- virtual unsigned decodedFrameCount() const; |
- virtual unsigned droppedFrameCount() const; |
- virtual unsigned audioDecodedByteCount() const; |
- virtual unsigned videoDecodedByteCount() const; |
- |
- // cc::VideoFrameProvider implementation. These methods are running on the |
- // compositor thread. |
- 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; |
- |
- // Media player callback handlers. |
- void OnMediaMetadataChanged(base::TimeDelta duration, int width, |
- int height, bool success); |
- void OnPlaybackComplete(); |
- void OnBufferingUpdate(int percentage); |
- void OnSeekComplete(base::TimeDelta current_time); |
- void OnMediaError(int error_type); |
- void OnVideoSizeChanged(int width, int height); |
- void OnMediaSeekRequest(base::TimeDelta time_to_seek); |
- void OnMediaConfigRequest(); |
- void OnDurationChange(const base::TimeDelta& duration); |
- |
- // Called to update the current time. |
- void OnTimeUpdate(base::TimeDelta current_time); |
- |
- // Functions called when media player status changes. |
- void OnMediaPlayerPlay(); |
- void OnMediaPlayerPause(); |
- void OnDidEnterFullscreen(); |
- void OnDidExitFullscreen(); |
- |
- // Called when the player is released. |
- virtual void OnPlayerReleased(); |
- |
- // This function is called by the WebMediaPlayerManagerAndroid to pause the |
- // video and release the media player and surface texture when we switch tabs. |
- // However, the actual GlTexture is not released to keep the video screenshot. |
- virtual void ReleaseMediaResources(); |
- |
- // Method inherited from DestructionObserver. |
- virtual void WillDestroyCurrentMessageLoop() OVERRIDE; |
- |
- // Detach the player from its manager. |
- void Detach(); |
- |
-#if defined(GOOGLE_TV) |
- // Retrieve geometry of the media player (i.e. location and size of the video |
- // frame) if changed. Returns true only if the geometry has been changed since |
- // the last call. |
- bool RetrieveGeometryChange(gfx::RectF* rect); |
-#endif |
- |
- virtual MediaKeyException generateKeyRequest( |
- const WebKit::WebString& key_system, |
- const unsigned char* init_data, |
- unsigned init_data_length) OVERRIDE; |
- 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) OVERRIDE; |
- virtual MediaKeyException cancelKeyRequest( |
- const WebKit::WebString& key_system, |
- const WebKit::WebString& session_id) OVERRIDE; |
- |
- 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& destination_url); |
- |
- void OnNeedKey(const std::string& type, |
- const std::string& session_id, |
- scoped_ptr<uint8[]> init_data, |
- int init_data_size); |
- |
-#if defined(GOOGLE_TV) |
- bool InjectMediaStream(MediaStreamClient* media_stream_client, |
- media::Demuxer* demuxer, |
- const base::Closure& destroy_demuxer_cb); |
-#endif |
- |
- // Called when DemuxerStreamPlayer needs to read data from ChunkDemuxer. |
- void OnReadFromDemuxer(media::DemuxerStream::Type type, bool seek_done); |
- |
- protected: |
- // Helper method to update the playing state. |
- void UpdatePlayingState(bool is_playing_); |
- |
- // Helper methods for posting task for setting states and update WebKit. |
- void UpdateNetworkState(WebKit::WebMediaPlayer::NetworkState state); |
- void UpdateReadyState(WebKit::WebMediaPlayer::ReadyState state); |
- |
- // Helper method to reestablish the surface texture peer for android |
- // media player. |
- void EstablishSurfaceTexturePeer(); |
- |
- // Requesting whether the surface texture peer needs to be reestablished. |
- void SetNeedsEstablishPeer(bool needs_establish_peer); |
- |
- void InitializeMediaPlayer(const WebKit::WebURL& url); |
- |
-#if defined(GOOGLE_TV) |
- // Request external surface for out-of-band composition. |
- void RequestExternalSurface(); |
-#endif |
- |
- private: |
- void ReallocateVideoFrame(); |
- void DidLoadMediaInfo(MediaInfoLoader::Status status); |
- |
- // 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); |
- |
- WebKit::WebFrame* const frame_; |
- |
- WebKit::WebMediaPlayerClient* const client_; |
- |
- // |delegate_| is used to notify the browser process of the player status, so |
- // that the browser process can control screen locks. |
- // TODO(qinmin): Currently android mediaplayer takes care of the screen |
- // lock. So this is only used for media source. Will apply this to regular |
- // media tag once http://crbug.com/247892 is fixed. |
- base::WeakPtr<WebMediaPlayerDelegate> delegate_; |
- |
- // Save the list of buffered time ranges. |
- WebKit::WebTimeRanges buffered_; |
- |
- // Size of the video. |
- WebKit::WebSize natural_size_; |
- |
- // The video frame object used for rendering by the compositor. |
- scoped_refptr<media::VideoFrame> current_frame_; |
- |
- // Message loop for main renderer thread. |
- const scoped_refptr<base::MessageLoopProxy> main_loop_; |
- |
- // URL of the media file to be fetched. |
- GURL url_; |
- |
- // Media duration. |
- base::TimeDelta duration_; |
- |
- // Flag to remember if we have a trusted duration_ value provided by |
- // MediaSourceDelegate notifying OnDurationChange(). In this case, ignore |
- // any subsequent duration value passed to OnMediaMetadataChange(). |
- bool ignore_metadata_duration_change_; |
- |
- // The time android media player is trying to seek. |
- double pending_seek_; |
- |
- // Internal seek state. |
- bool seeking_; |
- |
- // Whether loading has progressed since the last call to didLoadingProgress. |
- mutable bool did_loading_progress_; |
- |
- // Manager for managing this object. |
- WebMediaPlayerManagerAndroid* manager_; |
- |
- // Player ID assigned by the |manager_|. |
- int player_id_; |
- |
- // Current player states. |
- WebKit::WebMediaPlayer::NetworkState network_state_; |
- WebKit::WebMediaPlayer::ReadyState ready_state_; |
- |
- // GL texture ID allocated to the video. |
- unsigned int texture_id_; |
- |
- // Stream texture ID allocated to the video. |
- unsigned int stream_id_; |
- |
- // Whether the mediaplayer is playing. |
- bool is_playing_; |
- |
- // Whether media player needs to re-establish the surface texture peer. |
- bool needs_establish_peer_; |
- |
- // Whether |stream_texture_proxy_| is initialized. |
- bool stream_texture_proxy_initialized_; |
- |
- // Whether the video size info is available. |
- bool has_size_info_; |
- |
- // Whether the video metadata and info are available. |
- bool has_media_metadata_; |
- bool has_media_info_; |
- |
- // Object for allocating stream textures. |
- scoped_ptr<StreamTextureFactory> stream_texture_factory_; |
- |
- // Object for calling back the compositor thread to repaint the video when a |
- // frame available. It should be initialized on the compositor thread. |
- ScopedStreamTextureProxy stream_texture_proxy_; |
- |
- // Whether media player needs external surface. |
- bool needs_external_surface_; |
- |
- // 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_; |
- |
- scoped_ptr<webkit::WebLayerImpl> video_weblayer_; |
- |
-#if defined(GOOGLE_TV) |
- // A rectangle represents the geometry of video frame, when computed last |
- // time. |
- gfx::RectF last_computed_rect_; |
- |
- // Media Stream related fields. |
- media::Demuxer* demuxer_; |
- base::Closure destroy_demuxer_cb_; |
- scoped_refptr<MediaStreamAudioRenderer> audio_renderer_; |
-#endif |
- |
- scoped_ptr<MediaSourceDelegate, |
- MediaSourceDelegate::Destroyer> media_source_delegate_; |
- |
- media::MediaPlayerAndroid::SourceType source_type_; |
- |
- // Proxy object that delegates method calls on Render Thread. |
- // This object is created on the Render Thread and is only called in the |
- // destructor. |
- WebMediaPlayerProxyAndroid* proxy_; |
- |
- // The current playing time. Because the media player is in the browser |
- // process, it will regularly update the |current_time_| by calling |
- // OnTimeUpdate(). |
- double current_time_; |
- |
- media::MediaLog* media_log_; |
- MediaStreamClient* media_stream_client_; |
- |
- scoped_ptr<MediaInfoLoader> info_loader_; |
- |
- // The currently selected key system. Empty string means that no key system |
- // has been selected. |
- WebKit::WebString current_key_system_; |
- |
- // 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_; |
- |
- // The decryptor that manages decryption keys and decrypts encrypted frames. |
- scoped_ptr<ProxyDecryptor> decryptor_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid); |
-}; |
- |
-} // namespace webkit_media |
- |
-#endif // WEBKIT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |