| Index: webkit/media/android/webmediaplayer_android.h
|
| diff --git a/webkit/media/android/webmediaplayer_android.h b/webkit/media/android/webmediaplayer_android.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61ee5d167393a5f7325ba1d296305f0a31c6484e
|
| --- /dev/null
|
| +++ b/webkit/media/android/webmediaplayer_android.h
|
| @@ -0,0 +1,200 @@
|
| +// Copyright (c) 2012 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_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
|
| +#define WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
|
| +
|
| +#include <jni.h>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/message_loop_proxy.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h"
|
| +
|
| +namespace WebKit {
|
| +class WebCookieJar;
|
| +}
|
| +
|
| +namespace media {
|
| +class MediaPlayerBridge;
|
| +}
|
| +
|
| +namespace webkit_media {
|
| +
|
| +class WebMediaPlayerProxyAndroid;
|
| +
|
| +// This class serves as the android implementation of WebKit::WebMediaPlayer.
|
| +// It implements all the playback functions by forwarding calls to android
|
| +// media player, and reports player state changes to the webkit.
|
| +class WebMediaPlayerAndroid :
|
| + public WebKit::WebMediaPlayer,
|
| + public base::SupportsWeakPtr<WebMediaPlayerAndroid> {
|
| + public:
|
| + WebMediaPlayerAndroid(WebKit::WebMediaPlayerClient* client,
|
| + WebKit::WebCookieJar* cookie_jar);
|
| + virtual ~WebMediaPlayerAndroid() OVERRIDE;
|
| +
|
| + // Set |incognito_mode_| to true if in incognito mode.
|
| + static void InitIncognito(bool incognito_mode);
|
| +
|
| + // Resource loading.
|
| + virtual void load(const WebKit::WebURL& url) OVERRIDE;
|
| + virtual void cancelLoad() OVERRIDE;
|
| +
|
| + // Playback controls.
|
| + virtual void play() OVERRIDE;
|
| + virtual void pause() OVERRIDE;
|
| + virtual void seek(float seconds) OVERRIDE;
|
| + virtual bool supportsFullscreen() const OVERRIDE;
|
| + virtual bool supportsSave() const OVERRIDE;
|
| + virtual void setEndTime(float seconds) OVERRIDE;
|
| + virtual void setRate(float rate) OVERRIDE;
|
| + virtual void setVolume(float volume) OVERRIDE;
|
| + virtual void setVisible(bool visible) OVERRIDE;
|
| + virtual bool totalBytesKnown() OVERRIDE;
|
| + virtual const WebKit::WebTimeRanges& buffered() OVERRIDE;
|
| + virtual float maxTimeSeekable() const OVERRIDE;
|
| +
|
| + // Methods for painting.
|
| + virtual void setSize(const WebKit::WebSize& size) OVERRIDE;
|
| + virtual void paint(WebKit::WebCanvas* canvas,
|
| + const WebKit::WebRect& rect,
|
| + uint8_t alpha) OVERRIDE;
|
| +
|
| + // True if the loaded media has a playable video/audio track.
|
| + virtual bool hasVideo() const OVERRIDE;
|
| + virtual bool hasAudio() const OVERRIDE;
|
| +
|
| + // Dimensions of the video.
|
| + virtual WebKit::WebSize naturalSize() const OVERRIDE;
|
| +
|
| + // Getters of playback state.
|
| + virtual bool paused() const OVERRIDE;
|
| + virtual bool seeking() const OVERRIDE;
|
| + virtual float duration() const OVERRIDE;
|
| + virtual float currentTime() const OVERRIDE;
|
| +
|
| + // Get rate of loading the resource.
|
| + virtual int32 dataRate() const OVERRIDE;
|
| +
|
| + virtual unsigned long long bytesLoaded() const OVERRIDE;
|
| + virtual unsigned long long totalBytes() const OVERRIDE;
|
| +
|
| + // Internal states of loading and network.
|
| + virtual WebKit::WebMediaPlayer::NetworkState networkState() const OVERRIDE;
|
| + virtual WebKit::WebMediaPlayer::ReadyState readyState() const OVERRIDE;
|
| +
|
| + virtual bool hasSingleSecurityOrigin() const OVERRIDE;
|
| + virtual WebKit::WebMediaPlayer::MovieLoadType movieLoadType() const OVERRIDE;
|
| +
|
| + virtual float mediaTimeForTimeValue(float timeValue) const OVERRIDE;
|
| +
|
| + // Provide statistics.
|
| + virtual unsigned decodedFrameCount() const OVERRIDE;
|
| + virtual unsigned droppedFrameCount() const OVERRIDE;
|
| + virtual unsigned audioDecodedByteCount() const OVERRIDE;
|
| + virtual unsigned videoDecodedByteCount() const OVERRIDE;
|
| +
|
| + // Methods called from VideoLayerChromium. These methods are running on the
|
| + // compositor thread.
|
| + virtual WebKit::WebVideoFrame* getCurrentFrame() OVERRIDE;
|
| + virtual void putCurrentFrame(WebKit::WebVideoFrame*) OVERRIDE;
|
| +
|
| + // Media player callback handlers.
|
| + void OnMediaPrepared();
|
| + void OnPlaybackComplete();
|
| + void OnBufferingUpdate(int percentage);
|
| + void OnSeekComplete();
|
| + void OnMediaError(int error_type);
|
| + 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);
|
| +
|
| + private:
|
| + // Create a media player to load the |url_| and prepare for playback.
|
| + // Because of limited decoding resources on mobile devices, idle media players
|
| + // could get released. In that case, we call this function to get a new media
|
| + // player when needed.
|
| + void InitializeMediaPlayer();
|
| +
|
| + // Functions that implements media player control.
|
| + void PlayInternal();
|
| + void PauseInternal();
|
| + void SeekInternal(float seconds);
|
| +
|
| + // Helper methods for posting task for setting states and update WebKit.
|
| + void UpdateNetworkState(WebKit::WebMediaPlayer::NetworkState state);
|
| + void UpdateReadyState(WebKit::WebMediaPlayer::ReadyState state);
|
| +
|
| + // whether the current process is incognito mode
|
| + static bool incognito_mode_;
|
| +
|
| + WebKit::WebMediaPlayerClient* const client_;
|
| +
|
| + // Save the list of buffered time ranges.
|
| + WebKit::WebTimeRanges buffered_;
|
| +
|
| + // Bridge to the android media player.
|
| + scoped_ptr<media::MediaPlayerBridge> media_player_;
|
| +
|
| + // Size of the media element.
|
| + WebKit::WebSize texture_size_;
|
| +
|
| + // Size of the video.
|
| + WebKit::WebSize natural_size_;
|
| +
|
| + // The video frame object used for renderering by WebKit.
|
| + scoped_ptr<WebKit::WebVideoFrame> video_frame_;
|
| +
|
| + // Proxy object that delegates method calls on Render Thread.
|
| + // This object is created on the Render Thread and is only called in the
|
| + // destructor.
|
| + scoped_refptr<WebMediaPlayerProxyAndroid> proxy_;
|
| +
|
| + // If this is set to true, prepare of the media player is done.
|
| + bool prepared_;
|
| +
|
| + // URL of the media file to be fetched.
|
| + GURL url_;
|
| +
|
| + // Media duration.
|
| + float duration_;
|
| +
|
| + // When switching tabs, we release the media player. This variable keeps
|
| + // track of the current playback time so that a seek will be performed
|
| + // next time the media player gets recreated.
|
| + float pending_seek_;
|
| +
|
| + // Internal seek state.
|
| + bool seeking_;
|
| +
|
| + // Whether playback has completed.
|
| + float playback_completed_;
|
| +
|
| + // Fake it by self increasing on every OnBufferingUpdate event.
|
| + int64 buffered_bytes_;
|
| +
|
| + // Pointer to the cookie jar to get the cookie for the media url.
|
| + WebKit::WebCookieJar* cookie_jar_;
|
| +
|
| + // Whether the user has clicked the play button while media player
|
| + // is preparing.
|
| + bool pending_play_event_;
|
| +
|
| + // Current player states.
|
| + WebKit::WebMediaPlayer::NetworkState network_state_;
|
| + WebKit::WebMediaPlayer::ReadyState ready_state_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid);
|
| +};
|
| +
|
| +} // namespace webkit_media
|
| +
|
| +#endif // WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
|
|
|