summaryrefslogtreecommitdiff
path: root/chromium/media/base/android/media_player_android.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/android/media_player_android.h')
-rw-r--r--chromium/media/base/android/media_player_android.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/chromium/media/base/android/media_player_android.h b/chromium/media/base/android/media_player_android.h
new file mode 100644
index 00000000000..f1c9c37ee09
--- /dev/null
+++ b/chromium/media/base/android/media_player_android.h
@@ -0,0 +1,141 @@
+// Copyright (c) 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 MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_
+#define MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_
+
+#include <jni.h>
+#include <string>
+
+#include "base/callback.h"
+#include "base/time/time.h"
+#include "media/base/android/demuxer_stream_player_params.h"
+#include "media/base/media_export.h"
+#include "ui/gl/android/scoped_java_surface.h"
+#include "url/gurl.h"
+
+namespace media {
+
+class MediaDrmBridge;
+class MediaPlayerManager;
+
+// This class serves as the base class for different media player
+// implementations on Android. Subclasses need to provide their own
+// MediaPlayerAndroid::Create() implementation.
+class MEDIA_EXPORT MediaPlayerAndroid {
+ public:
+ virtual ~MediaPlayerAndroid();
+
+ // Error types for MediaErrorCB.
+ enum MediaErrorType {
+ MEDIA_ERROR_FORMAT,
+ MEDIA_ERROR_DECODE,
+ MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK,
+ MEDIA_ERROR_INVALID_CODE,
+ };
+
+ // Types of media source that this object will play.
+ enum SourceType {
+ SOURCE_TYPE_URL,
+ SOURCE_TYPE_MSE, // W3C Media Source Extensions
+ SOURCE_TYPE_STREAM, // W3C Media Stream, e.g. getUserMedia().
+ };
+
+ // Construct a MediaPlayerAndroid object with all the needed media player
+ // callbacks. This object needs to call |manager_|'s RequestMediaResources()
+ // before decoding the media stream. This allows |manager_| to track
+ // unused resources and free them when needed. On the other hand, it needs
+ // to call ReleaseMediaResources() when it is done with decoding.
+ static MediaPlayerAndroid* Create(int player_id,
+ const GURL& url,
+ SourceType source_type,
+ const GURL& first_party_for_cookies,
+ bool hide_url_log,
+ MediaPlayerManager* manager);
+
+ // Passing an external java surface object to the player.
+ virtual void SetVideoSurface(gfx::ScopedJavaSurface surface) = 0;
+
+ // Start playing the media.
+ virtual void Start() = 0;
+
+ // Pause the media.
+ virtual void Pause() = 0;
+
+ // Seek to a particular position. When succeeds, OnSeekComplete() will be
+ // called. Otherwise, nothing will happen.
+ virtual void SeekTo(base::TimeDelta time) = 0;
+
+ // Release the player resources.
+ virtual void Release() = 0;
+
+ // Set the player volume.
+ virtual void SetVolume(double volume) = 0;
+
+ // Get the media information from the player.
+ virtual int GetVideoWidth() = 0;
+ virtual int GetVideoHeight() = 0;
+ virtual base::TimeDelta GetDuration() = 0;
+ virtual base::TimeDelta GetCurrentTime() = 0;
+ virtual bool IsPlaying() = 0;
+ virtual bool IsPlayerReady() = 0;
+ virtual bool CanPause() = 0;
+ virtual bool CanSeekForward() = 0;
+ virtual bool CanSeekBackward() = 0;
+ virtual GURL GetUrl();
+ virtual GURL GetFirstPartyForCookies();
+
+ // Methods for DemuxerStreamPlayer.
+ // Informs DemuxerStreamPlayer that the demuxer is ready.
+ virtual void DemuxerReady(
+ const MediaPlayerHostMsg_DemuxerReady_Params& params);
+ // Called when the requested data is received from the demuxer.
+ virtual void ReadFromDemuxerAck(
+ const MediaPlayerHostMsg_ReadFromDemuxerAck_Params& params);
+
+ // Called when a seek request is acked by the render process.
+ virtual void OnSeekRequestAck(unsigned seek_request_id);
+
+ // Called when the demuxer has changed the duration.
+ virtual void DurationChanged(const base::TimeDelta& duration);
+
+ // Pass a drm bridge to a player.
+ virtual void SetDrmBridge(MediaDrmBridge* drm_bridge);
+
+ int player_id() { return player_id_; }
+
+ protected:
+ MediaPlayerAndroid(int player_id,
+ MediaPlayerManager* manager);
+
+ // Called when player status changes.
+ virtual void OnMediaError(int error_type);
+ virtual void OnVideoSizeChanged(int width, int height);
+ virtual void OnBufferingUpdate(int percent);
+ virtual void OnPlaybackComplete();
+ virtual void OnSeekComplete();
+ virtual void OnMediaMetadataChanged(
+ base::TimeDelta duration, int width, int height, bool success);
+ virtual void OnMediaInterrupted();
+ virtual void OnTimeUpdated();
+
+ // Request or release decoding resources from |manager_|.
+ virtual void RequestMediaResourcesFromManager();
+ virtual void ReleaseMediaResourcesFromManager();
+
+ MediaPlayerManager* manager() { return manager_; }
+
+ private:
+ // Player ID assigned to this player.
+ int player_id_;
+
+ // Resource manager for all the media players.
+ MediaPlayerManager* manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaPlayerAndroid);
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_