android_GenericMediaPlayer.h revision f096e77e6cbfc60263f42b435cb34fbab7be2e45
107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi/* 2e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi * Copyright (C) 2011 The Android Open Source Project 307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * 407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * you may not use this file except in compliance with the License. 607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * You may obtain a copy of the License at 707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * 807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * 1007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * See the License for the specific language governing permissions and 1407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * limitations under the License. 1507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi */ 1607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 17d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#ifndef __ANDROID_GENERICMEDIAPLAYER_H__ 18d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#define __ANDROID_GENERICMEDIAPLAYER_H__ 1907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 208ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi#include "android_GenericMediaPlayer.h" 218ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 2207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi#include <binder/IServiceManager.h> 2313a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten#include <surfaceflinger/Surface.h> 2413a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten#include <gui/ISurfaceTexture.h> 2507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 2607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 2707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 2807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivinamespace android { 2907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 30fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Triviclass GenericMediaPlayer; 3107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviclass MediaPlayerNotificationClient : public BnMediaPlayerClient 3207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi{ 3307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivipublic: 34fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi MediaPlayerNotificationClient(GenericMediaPlayer* gmp); 3507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi virtual ~MediaPlayerNotificationClient(); 3607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 3707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi // IMediaPlayerClient implementation 3807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi virtual void notify(int msg, int ext1, int ext2); 3907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 4007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi void blockUntilPlayerPrepared(); 4107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 4207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviprivate: 4307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi Mutex mLock; 44fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi GenericMediaPlayer* mGenericMediaPlayer; 4507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi Condition mPlayerPreparedCondition; 4607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi bool mPlayerPrepared; 4707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi}; 4807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 49e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi 5007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 51e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Triviclass GenericMediaPlayer : public GenericPlayer 5207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi{ 5307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivipublic: 5427a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi 55e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi GenericMediaPlayer(const AudioPlayback_Parameters* params, bool hasVideo); 56e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi virtual ~GenericMediaPlayer(); 5707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 5813a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten virtual void setVideoSurface(const sp<Surface> &surface); 5913a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten virtual void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 6007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 6107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviprotected: 62fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi friend class MediaPlayerNotificationClient; 6307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 64e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi // Async event handlers (called from GenericPlayer's event loop) 6527a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi virtual void onPrepare(); 6627a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi virtual void onPlay(); 6727a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi virtual void onPause(); 688ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi virtual void onSeek(const sp<AMessage> &msg); 698ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi virtual void onLoop(const sp<AMessage> &msg); 70fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi virtual void onVolumeUpdate(); 718ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi virtual void onBufferingUpdate(const sp<AMessage> &msg); 7227a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi 73e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi bool mHasVideo; 74f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi int32_t mSeekTimeMsec; 7527a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi 767f0e925e1a56ab80e60f2381105297184109dbc3Jean-Michel Trivi sp<Surface> mVideoSurface; 7713a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten sp<ISurfaceTexture> mVideoSurfaceTexture; 7807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 7907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi sp<IMediaPlayer> mPlayer; 8027a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi // Receives Android MediaPlayer events from mPlayer 8127a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi sp<MediaPlayerNotificationClient> mPlayerClient; 8207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 8307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi sp<IServiceManager> mServiceManager; 8407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi sp<IBinder> mBinder; 8507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi sp<IMediaPlayerService> mMediaPlayerService; 8607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 878ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi Parcel metadatafilter; 888ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 89e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Triviprivate: 90e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi DISALLOW_EVIL_CONSTRUCTORS(GenericMediaPlayer); 918ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi void onAfterMediaPlayerPrepared(); 9207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi}; 9307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi 9407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi} // namespace android 95d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi 96d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#endif /* __ANDROID_GENERICMEDIAPLAYER_H__ */ 97