MediaPlayer_to_android.cpp revision 97876858aa17c7f24c6a1d60be09a57bc1824ba3
1a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey/* 2a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * Copyright (C) 2010 The Android Open Source Project 3a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * 4a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * you may not use this file except in compliance with the License. 6a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * You may obtain a copy of the License at 7a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * 8a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * 10a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * See the License for the specific language governing permissions and 14a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey * limitations under the License. 15a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey */ 16a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 17a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey#include "sles_allinclusive.h" 18a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey#include "utils/RefBase.h" 19a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey#include "android_prompts.h" 2063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 21a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey//----------------------------------------------------------------------------- 22a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkeystatic void player_handleMediaPlayerEventNotifications(const int event, const int data1, void* user) 23a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey{ 24a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey if (NULL == user) { 25a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey return; 26a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 27a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 28a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey CMediaPlayer* mp = (CMediaPlayer*) user; 29a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey //SL_LOGV("received event %d, data %d from AVPlayer", event, data1); 306de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 316de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey switch(event) { 32a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 33a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case android::AVPlayer::kEventPrepared: { 346de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey if (PLAYER_SUCCESS == data1) { 35a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey object_lock_exclusive(&mp->mObject); 36a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey SL_LOGV("Received AVPlayer::kEventPrepared from AVPlayer for CMediaPlayer %p", mp); 37a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAndroidObjState = ANDROID_READY; 38a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey object_unlock_exclusive(&mp->mObject); 39a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 40a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 41a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 42a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 43a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey default: 44a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey SL_LOGE("Received unknown event %d, data %d from AVPlayer", event, data1); 4563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 46a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 47a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey} 48a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 49a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 50a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey//----------------------------------------------------------------------------- 5163abc37356728c0575d6a62a203102ae6d97953bJeff SharkeyXAresult android_Player_create(CMediaPlayer *mp) { 52e7bb71d26943fbb053139e1e34203df4c2afaa9bJeff Sharkey 5363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey XAresult result = XA_RESULT_SUCCESS; 54a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 55a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey // FIXME verify data source 56a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey const SLDataSource *pDataSrc = &mp->mDataSource.u.mSource; 57a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey // FIXME verify audio data sink 58a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey const SLDataSink *pAudioSnk = &mp->mAudioSink.u.mSink; 59a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey // FIXME verify image data sink 60a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey const SLDataSink *pVideoSnk = &mp->mImageVideoSink.u.mSink; 61a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 62a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey XAuint32 sourceLocator = *(XAuint32 *)pDataSrc->pLocator; 63a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey switch(sourceLocator) { 64a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey // FIXME support Android simple buffer queue as well 65a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case XA_DATALOCATOR_ANDROIDBUFFERQUEUE: 66a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAndroidObjType = AV_PLR_TS_ABQ; 67a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 68a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case XA_DATALOCATOR_URI: // intended fall-through 69a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case SL_DATALOCATOR_ANDROIDFD: 70a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAndroidObjType = AV_PLR_URI_FD; 71a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 72a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case XA_DATALOCATOR_ADDRESS: // intended fall-through 73a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey default: 74a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey SL_LOGE("Unable to create MediaPlayer for data source locator 0x%lx", sourceLocator); 75a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey result = XA_RESULT_PARAMETER_INVALID; 76a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 77a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 78a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 79a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAndroidObjState = ANDROID_UNINITIALIZED; 8063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mStreamType = ANDROID_DEFAULT_OUTPUT_STREAM_TYPE; 8163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mSessionId = android::AudioSystem::newAudioSessionId(); 8263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 8363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidAudioLevels.mAmplFromVolLevel = 1.0f; 8463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidAudioLevels.mAmplFromStereoPos[0] = 1.0f; 8563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidAudioLevels.mAmplFromStereoPos[1] = 1.0f; 8663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidAudioLevels.mAmplFromDirectLevel = 1.0f; // matches initial mDirectLevel value 8763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidAudioLevels.mAuxSendLevel = 0; 8863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mDirectLevel = 0; // no attenuation 89a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 90a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey return result; 91a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey} 92a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 93a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 94a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey//----------------------------------------------------------------------------- 95a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey// FIXME abstract out the diff between CMediaPlayer and CAudioPlayer 96a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff SharkeyXAresult android_Player_realize(CMediaPlayer *mp, SLboolean async) { 97a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey SL_LOGI("android_Player_realize_l(%p)", mp); 98a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey XAresult result = XA_RESULT_SUCCESS; 99a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 100a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey const SLDataSource *pDataSrc = &mp->mDataSource.u.mSource; 101a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey const SLuint32 sourceLocator = *(SLuint32 *)pDataSrc->pLocator; 102a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 103a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey AudioPlayback_Parameters ap_params; 104a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ap_params.sessionId = mp->mSessionId; 105a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ap_params.streamType = mp->mStreamType; 106a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ap_params.trackcb = NULL; 107a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ap_params.trackcbUser = NULL; 108a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 109a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey switch(mp->mAndroidObjType) { 110a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case AV_PLR_TS_ABQ: { 111a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAVPlayer = new android::StreamPlayer(&ap_params); 11263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAVPlayer->init(player_handleMediaPlayerEventNotifications, (void*)mp); 11363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 114a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 115a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case AV_PLR_URI_FD: { 116a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAVPlayer = new android::LocAVPlayer(&ap_params); 117a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mAVPlayer->init(player_handleMediaPlayerEventNotifications, (void*)mp); 118a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey switch (mp->mDataSource.mLocator.mLocatorType) { 119a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey case XA_DATALOCATOR_URI: 120a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ((android::LocAVPlayer*)mp->mAVPlayer.get())->setDataSource( 121a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey (const char*)mp->mDataSource.mLocator.mURI.URI); 12263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 12363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case XA_DATALOCATOR_ANDROIDFD: { 124a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey int64_t offset = (int64_t)mp->mDataSource.mLocator.mFD.offset; 125a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey ((android::LocAVPlayer*)mp->mAVPlayer.get())->setDataSource( 126a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey (int)mp->mDataSource.mLocator.mFD.fd, 127a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey offset == SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ? 128a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey (int64_t)PLAYER_FD_FIND_FILE_SIZE : offset, 129a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey (int64_t)mp->mDataSource.mLocator.mFD.length); 130a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey } 131a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey break; 132a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey default: 133a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey SL_LOGE("Invalid or unsupported data locator type %lu for data source", 134a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey mp->mDataSource.mLocator.mLocatorType); 135a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey result = XA_RESULT_PARAMETER_INVALID; 13663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 13763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 13863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 13963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case INVALID_TYPE: // intended fall-through 14063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey default: 1416de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey SL_LOGE("Unable to realize MediaPlayer, invalid internal Android object type"); 1426de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey result = XA_RESULT_PARAMETER_INVALID; 1436de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey break; 1446de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey } 1456de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1466de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey return result; 1476de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey} 1486de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1496de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey//----------------------------------------------------------------------------- 1506de357e4d10fa5977ab9a6c665dc858765e95d34Jeff SharkeyXAresult android_Player_destroy(CMediaPlayer *mp) { 1516de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey SL_LOGI("android_Player_destroy(%p)", mp); 1526de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey XAresult result = XA_RESULT_SUCCESS; 1536de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1546de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey if (mp->mAVPlayer != 0) { 1556de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey mp->mAVPlayer.clear(); 1566de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey } 1576de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1586de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey return result; 15963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey} 1606de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1616de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey//----------------------------------------------------------------------------- 1626de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey/** 1636de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey * pre-conditions: avp != NULL, surface != NULL 1646de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey */ 1656de357e4d10fa5977ab9a6c665dc858765e95d34Jeff SharkeyXAresult android_Player_setVideoSurface(android::AVPlayer *avp, void* surface) { 1666de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey XAresult result = XA_RESULT_SUCCESS; 1676de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1686de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey avp->setVideoSurface(surface); 1696de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 1706de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey return result; 1716de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey} 1726de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 17363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 17463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey//----------------------------------------------------------------------------- 17563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey/** 17663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * pre-condition: avp != NULL 17763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey */ 17863abc37356728c0575d6a62a203102ae6d97953bJeff SharkeyXAresult android_Player_setPlayState(android::AVPlayer *avp, SLuint32 playState, 17963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey AndroidObject_state* pObjState) 180a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey{ 18163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey XAresult result = XA_RESULT_SUCCESS; 182a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey AndroidObject_state objState = *pObjState; 183a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 18463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey switch (playState) { 18563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case SL_PLAYSTATE_STOPPED: { 18663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SL_LOGV("setting AVPlayer to SL_PLAYSTATE_STOPPED"); 18763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey avp->stop(); 18863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 18963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 19063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case SL_PLAYSTATE_PAUSED: { 1916de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey SL_LOGV("setting AVPlayer to SL_PLAYSTATE_PAUSED"); 19263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey switch(objState) { 19363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_UNINITIALIZED): 19463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey *pObjState = ANDROID_PREPARING; 19563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey avp->prepare(); 1966de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey break; 19763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_PREPARING): 19863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 19963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_READY): 200a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey avp->pause(); 2016de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey break; 20263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey default: 20363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SL_LOGE("Android object in invalid state"); 20463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 20563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 2066de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey } 20763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 20863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case SL_PLAYSTATE_PLAYING: { 20963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SL_LOGV("setting AVPlayer to SL_PLAYSTATE_PLAYING"); 21063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey switch(objState) { 21163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_UNINITIALIZED): 21263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey *pObjState = ANDROID_PREPARING; 21363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey avp->prepare(); 21463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // intended fall through 21563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_PREPARING): 21663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // intended fall through 21763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey case(ANDROID_READY): 21863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey avp->play(); 21963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 22063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey default: 22163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SL_LOGE("Android object in invalid state"); 22263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 22363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 22463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 22563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 22663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey default: 22763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // checked by caller, should not happen 22863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey break; 22963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 23063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 23163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey return result; 23263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey} 23363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 23463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 23563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey//----------------------------------------------------------------------------- 236a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey// FIXME abstract out the diff between CMediaPlayer and CAudioPlayer 237a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkeyvoid android_Player_androidBufferQueue_registerCallback_l(CMediaPlayer *mp) { 23863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey if (mp->mAVPlayer != 0) { 23963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SL_LOGI("android_Player_androidBufferQueue_registerCallback_l"); 240a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey android::StreamPlayer* splr = (android::StreamPlayer*)(mp->mAVPlayer.get()); 241a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey splr->registerQueueCallback(mp->mAndroidBufferQueue.mCallback, 24263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey mp->mAndroidBufferQueue.mContext, (const void*)&(mp->mAndroidBufferQueue.mItf)); 24363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 24463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey} 24563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 246a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey// FIXME abstract out the diff between CMediaPlayer and CAudioPlayer 247a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkeyvoid android_Player_androidBufferQueue_enqueue_l(CMediaPlayer *mp, 24863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey SLuint32 bufferId, SLuint32 length, SLAbufferQueueEvent event, void *pData) { 249a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey if (mp->mAVPlayer != 0) { 250a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey android::StreamPlayer* splr = (android::StreamPlayer*)(mp->mAVPlayer.get()); 251a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey splr->appEnqueue(bufferId, length, event, pData); 25263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 253a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey} 254a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 255a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey 2566de357e4d10fa5977ab9a6c665dc858765e95d34Jeff Sharkey 257a27a3e8ad7d20dea63ef2d5cb8b6ec7e56c20a89Jeff Sharkey