android_GenericMediaPlayer.h revision 16ce39d96d41884c7b0d1676553ab8167baaab74
116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi/* 216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * Copyright (C) 2010 The Android Open Source Project 316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * 416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * you may not use this file except in compliance with the License. 616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * You may obtain a copy of the License at 716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * 816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * 1016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * See the License for the specific language governing permissions and 1416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi * limitations under the License. 1516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi */ 1616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 1716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 1816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi#include <binder/IServiceManager.h> 1916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 2016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 2116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 2216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivinamespace android { 2316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 2416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Triviclass MediaPlayerNotificationClient : public BnMediaPlayerClient 2516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi{ 2616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivipublic: 2716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi MediaPlayerNotificationClient(); 2816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual ~MediaPlayerNotificationClient(); 2916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 3016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi // IMediaPlayerClient implementation 3116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void notify(int msg, int ext1, int ext2); 3216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 3316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi void blockUntilPlayerPrepared(); 3416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 3516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Triviprivate: 3616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi Mutex mLock; 3716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi Condition mPlayerPreparedCondition; 3816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi bool mPlayerPrepared; 3916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi}; 4016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 4116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 4216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Triviclass AVPlayer : public AHandler 4316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi{ 4416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivipublic: 4516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi AVPlayer(AudioPlayback_Parameters* params); 4616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual ~AVPlayer(); 4716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 4816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void init(); 4916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 5016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void prepare(); 5116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void play(); 5216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void pause(); 5316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void stop(); 5416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 5516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Triviprotected: 5616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 5716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi enum { 5816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi kWhatPrepare = 'prep', 5916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi kWhatNotif = 'noti', 6016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi kWhatPlay = 'play', 6116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi kWhatPause = 'paus', 6216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi kWhatStop = 'stop' 6316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi }; 6416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 6516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi // AHandler implementation 6616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void onMessageReceived(const sp<AMessage> &msg); 6716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 6816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<ALooper> mLooper; 6916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 7016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi AudioPlayback_Parameters mPlaybackParams; 7116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 7216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<IMediaPlayer> mPlayer; 7316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<MediaPlayerNotificationClient> mPlayerClient; // receives events from mPlayer 7416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 7516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<IServiceManager> mServiceManager; 7616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<IBinder> mBinder; 7716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi sp<IMediaPlayerService> mMediaPlayerService; 7816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 7916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi Mutex mLock; 8016ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 8116ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi // Event handlers 8216ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void onPrepare(); 8316ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi //virtual void onNotif(const sp<AMessage> &msg); 8416ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void onPlay(); 8516ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void onPause(); 8616ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi virtual void onStop(); 8716ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi}; 8816ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi 8916ce39d96d41884c7b0d1676553ab8167baaab74Jean-Michel Trivi} // namespace android 90