| 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_
|
|
|