Index: webkit/media/android/webmediaplayer_android.h |
diff --git a/webkit/media/android/webmediaplayer_android.h b/webkit/media/android/webmediaplayer_android.h |
index c8935faa85ffb4a7c2631bc41223feab9ef8157b..b948d362f6f4ced83d07cb6a3417f6e5ebf2bc96 100644 |
--- a/webkit/media/android/webmediaplayer_android.h |
+++ b/webkit/media/android/webmediaplayer_android.h |
@@ -4,6 +4,7 @@ |
#ifndef WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
#define WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
+#pragma once |
#include <jni.h> |
@@ -18,6 +19,7 @@ |
namespace WebKit { |
class WebCookieJar; |
+class WebFrame; |
} |
namespace media { |
@@ -26,6 +28,9 @@ class MediaPlayerBridge; |
namespace webkit_media { |
+class StreamTextureFactory; |
+class StreamTextureProxy; |
+class WebMediaPlayerManagerAndroid; |
class WebMediaPlayerProxyAndroid; |
// This class serves as the android implementation of WebKit::WebMediaPlayer. |
@@ -35,8 +40,11 @@ class WebMediaPlayerAndroid : |
public WebKit::WebMediaPlayer, |
public base::SupportsWeakPtr<WebMediaPlayerAndroid> { |
public: |
- WebMediaPlayerAndroid(WebKit::WebMediaPlayerClient* client, |
- WebKit::WebCookieJar* cookie_jar); |
+ WebMediaPlayerAndroid(WebKit::WebFrame* frame, |
+ WebKit::WebMediaPlayerClient* client, |
+ WebKit::WebCookieJar* cookie_jar, |
+ webkit_media::WebMediaPlayerManagerAndroid* manager, |
+ webkit_media::StreamTextureFactory* factory); |
virtual ~WebMediaPlayerAndroid(); |
// Set |incognito_mode_| to true if in incognito mode. |
@@ -105,6 +113,8 @@ class WebMediaPlayerAndroid : |
// compositor thread. |
virtual WebKit::WebVideoFrame* getCurrentFrame(); |
virtual void putCurrentFrame(WebKit::WebVideoFrame*); |
+ virtual void setStreamTextureClient( |
+ WebKit::WebStreamTextureClient* client); |
// Media player callback handlers. |
void OnMediaPrepared(); |
@@ -115,8 +125,10 @@ class WebMediaPlayerAndroid : |
void OnMediaInfo(int info_type); |
void OnVideoSizeChanged(int width, int height); |
- // Method to set the video surface for android media player. |
- void SetVideoSurface(jobject j_surface); |
+ // This function is called by WebMediaPlayerManagerAndroid to pause the video |
+ // and release |media_player_| and its surface texture when we switch tabs. |
+ // However, the actual GlTexture is not released to keep the video screenshot. |
+ void ReleaseMediaResources(); |
private: |
// Create a media player to load the |url_| and prepare for playback. |
@@ -134,9 +146,15 @@ class WebMediaPlayerAndroid : |
void UpdateNetworkState(WebKit::WebMediaPlayer::NetworkState state); |
void UpdateReadyState(WebKit::WebMediaPlayer::ReadyState state); |
+ // Methods for creation and deletion of stream texture. |
+ void CreateStreamTexture(); |
+ void DestroyStreamTexture(); |
+ |
// whether the current process is incognito mode |
static bool incognito_mode_; |
+ WebKit::WebFrame* frame_; |
+ |
WebKit::WebMediaPlayerClient* const client_; |
// Save the list of buffered time ranges. |
@@ -188,6 +206,12 @@ class WebMediaPlayerAndroid : |
// Pointer to the cookie jar to get the cookie for the media url. |
WebKit::WebCookieJar* cookie_jar_; |
+ // Manager for managing this media player. |
+ webkit_media::WebMediaPlayerManagerAndroid* manager_; |
+ |
+ // Player ID assigned by the media player manager. |
+ int player_id_; |
+ |
// Whether the user has clicked the play button while media player |
// is preparing. |
bool pending_play_event_; |
@@ -196,6 +220,22 @@ class WebMediaPlayerAndroid : |
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 |media_player_| needs to re-establish the surface texture peer. |
+ bool needs_establish_peer_; |
+ |
+ // Object for allocating stream textures. |
+ scoped_ptr<webkit_media::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. |
+ scoped_ptr<webkit_media::StreamTextureProxy> stream_texture_proxy_; |
+ |
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid); |
}; |