media_player_android.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_ 6#define MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_ 7 8#include <jni.h> 9#include <string> 10 11#include "base/callback.h" 12#include "base/time/time.h" 13#include "media/base/media_export.h" 14#include "ui/gl/android/scoped_java_surface.h" 15#include "url/gurl.h" 16 17namespace media { 18 19class MediaKeys; 20class MediaPlayerManager; 21 22// This class serves as the base class for different media player 23// implementations on Android. Subclasses need to provide their own 24// MediaPlayerAndroid::Create() implementation. 25class MEDIA_EXPORT MediaPlayerAndroid { 26 public: 27 virtual ~MediaPlayerAndroid(); 28 29 // Error types for MediaErrorCB. 30 enum MediaErrorType { 31 MEDIA_ERROR_FORMAT, 32 MEDIA_ERROR_DECODE, 33 MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK, 34 MEDIA_ERROR_INVALID_CODE, 35 }; 36 37 // Callback when the player needs decoding resources. 38 typedef base::Callback<void(int player_id)> RequestMediaResourcesCB; 39 40 // Callback when the player releases decoding resources. 41 typedef base::Callback<void(int player_id)> ReleaseMediaResourcesCB; 42 43 // Passing an external java surface object to the player. 44 virtual void SetVideoSurface(gfx::ScopedJavaSurface surface) = 0; 45 46 // Start playing the media. 47 virtual void Start() = 0; 48 49 // Pause the media. 50 virtual void Pause(bool is_media_related_action) = 0; 51 52 // Seek to a particular position, based on renderer signaling actual seek 53 // with MediaPlayerHostMsg_Seek. If eventual success, OnSeekComplete() will be 54 // called. 55 virtual void SeekTo(base::TimeDelta timestamp) = 0; 56 57 // Release the player resources. 58 virtual void Release() = 0; 59 60 // Set the player volume. 61 virtual void SetVolume(double volume) = 0; 62 63 // Get the media information from the player. 64 virtual int GetVideoWidth() = 0; 65 virtual int GetVideoHeight() = 0; 66 virtual base::TimeDelta GetDuration() = 0; 67 virtual base::TimeDelta GetCurrentTime() = 0; 68 virtual bool IsPlaying() = 0; 69 virtual bool IsPlayerReady() = 0; 70 virtual bool CanPause() = 0; 71 virtual bool CanSeekForward() = 0; 72 virtual bool CanSeekBackward() = 0; 73 virtual GURL GetUrl(); 74 virtual GURL GetFirstPartyForCookies(); 75 76 // Associates the |cdm| with this player. 77 virtual void SetCdm(MediaKeys* cdm); 78 79 // Notifies the player that a decryption key has been added. The player 80 // may want to start/resume playback if it is waiting for a key. 81 virtual void OnKeyAdded(); 82 83 // Check whether the player still uses the current surface. 84 virtual bool IsSurfaceInUse() const = 0; 85 86 int player_id() { return player_id_; } 87 88 protected: 89 MediaPlayerAndroid(int player_id, 90 MediaPlayerManager* manager, 91 const RequestMediaResourcesCB& request_media_resources_cb, 92 const ReleaseMediaResourcesCB& release_media_resources_cb); 93 94 MediaPlayerManager* manager() { return manager_; } 95 96 RequestMediaResourcesCB request_media_resources_cb_; 97 98 ReleaseMediaResourcesCB release_media_resources_cb_; 99 100 private: 101 // Player ID assigned to this player. 102 int player_id_; 103 104 // Resource manager for all the media players. 105 MediaPlayerManager* manager_; 106 107 DISALLOW_COPY_AND_ASSIGN(MediaPlayerAndroid); 108}; 109 110} // namespace media 111 112#endif // MEDIA_BASE_ANDROID_MEDIA_PLAYER_ANDROID_H_ 113