android_GenericPlayer.cpp revision 41562990ca46e5d6c4aadde6c2469b8007bb980c
1dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi/* 2dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * Copyright (C) 2011 The Android Open Source Project 3dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * 4dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * you may not use this file except in compliance with the License. 6dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * You may obtain a copy of the License at 7dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * 8dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * 10dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * See the License for the specific language governing permissions and 14dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * limitations under the License. 15dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi */ 16dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 17dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi//#define USE_LOG SLAndroidLogLevel_Verbose 18dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 19dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi#include "sles_allinclusive.h" 20dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 218ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi#include <media/stagefright/foundation/ADebug.h> 228ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi#include <sys/stat.h> 238ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 24dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivinamespace android { 25dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 26dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 27dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel TriviGenericPlayer::GenericPlayer(const AudioPlayback_Parameters* params) : 28dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocatorType(kDataLocatorNone), 29dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mNotifyClient(NULL), 30dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mNotifyUser(NULL), 31dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mStateFlags(0), 32dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mLooperPriority(PRIORITY_DEFAULT), 33fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mPlaybackParams(*params), 34463a7641944e4a3613f5d76aa8450070ef56b9ffGlenn Kasten mChannelCount(UNKNOWN_NUMCHANNELS), 358ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mDurationMsec(ANDROID_UNKNOWN_TIME), 368ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mPositionMsec(ANDROID_UNKNOWN_TIME), 37463a7641944e4a3613f5d76aa8450070ef56b9ffGlenn Kasten mSampleRateHz(UNKNOWN_SAMPLERATE), 388ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mCacheStatus(kStatusEmpty), 398ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mCacheFill(0), 408ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mLastNotifiedCacheFill(0), 418ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mCacheFillNotifThreshold(100) 42dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi{ 4330ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::GenericPlayer()"); 44dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 45dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mLooper = new android::ALooper(); 46dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 47fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mMute = false; 48fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = 1.0f; 49fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = 1.0f; 50dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 51dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 52dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 53dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel TriviGenericPlayer::~GenericPlayer() { 543f324661dd8bf33dd3fb2afeb84fbb05262a0d08Glenn Kasten SL_LOGV("GenericPlayer::~GenericPlayer()"); 55dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 56dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 57dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 58dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 59dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::init(const notif_cbf_t cbf, void* notifUser) { 6030ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::init()"); 61dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 621209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi { 631209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 641209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mNotifyClient = cbf; 651209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mNotifyUser = notifUser; 661209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi } 67dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 68dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mLooper->registerHandler(this); 69dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mLooper->start(false /*runOnCallingThread*/, false /*canCallJava*/, mLooperPriority); 70dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 71dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 72dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 731209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivivoid GenericPlayer::preDestroy() { 741209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi SL_LOGD("GenericPlayer::preDestroy()"); 751209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi { 761209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 771209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mNotifyClient = NULL; 781209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mNotifyUser = NULL; 791209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi } 801209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi 811209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mLooper->stop(); 821209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi mLooper->unregisterHandler(id()); 831209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi} 841209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi 851209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi 86dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::setDataSource(const char *uri) { 876e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::setDataSource(uri=%s)", uri); 88dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi resetDataLocator(); 89dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 90dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.uriRef = uri; 91dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 92dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocatorType = kDataLocatorUri; 93dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 94dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 95dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 96dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 976e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::setDataSource(fd=%d, offset=%lld, length=%lld)", fd, offset, length); 98dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi resetDataLocator(); 99dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 100dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.fdi.fd = fd; 101dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 102dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi struct stat sb; 103dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi int ret = fstat(fd, &sb); 104dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if (ret != 0) { 105dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGE("GenericPlayer::setDataSource: fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); 106dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi return; 107dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 108dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 109dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if (offset >= sb.st_size) { 110dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGE("SfPlayer::setDataSource: invalid offset"); 111dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi return; 112dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 113dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.fdi.offset = offset; 114dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 115dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if (PLAYER_FD_FIND_FILE_SIZE == length) { 116dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size; 117dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } else if (offset + length > sb.st_size) { 118dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size - offset; 119dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } else { 120dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocator.fdi.length = length; 121dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 122dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 123dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocatorType = kDataLocatorFd; 124dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 125dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 126dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 127dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::prepare() { 12830ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::prepare()"); 129dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPrepare, id()); 130dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 131dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 132dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 133dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 134dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::play() { 13530ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::play()"); 136dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPlay, id()); 137dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 138dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 139dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 140dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 141dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::pause() { 14230ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::pause()"); 143dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPause, id()); 144dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 145dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 146dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 147dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 148dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::stop() { 14930ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::stop()"); 150dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi (new AMessage(kWhatPause, id()))->post(); 151dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 152dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi // after a stop, playback should resume from the start. 153dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi seek(0); 154dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 155dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 156dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 157dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::seek(int64_t timeMsec) { 158dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGV("GenericPlayer::seek %lld", timeMsec); 159f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi if (timeMsec < 0) { 160f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi SL_LOGE("GenericPlayer::seek error, can't seek to negative time %lldms", timeMsec); 161f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi return; 162f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi } 163dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeek, id()); 164dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->setInt64(WHATPARAM_SEEK_SEEKTIME_MS, timeMsec); 165dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 166dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 167dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 168dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 169dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::loop(bool loop) { 1706e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::loop %s", loop ? "true" : "false"); 171dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatLoop, id()); 172dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->setInt32(WHATPARAM_LOOP_LOOPING, (int32_t)loop); 173dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 174dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 175dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 176dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 1778ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::setBufferingUpdateThreshold(int16_t thresholdPercent) { 1786e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::setBufferingUpdateThreshold %d", thresholdPercent); 1798ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBuffUpdateThres, id()); 1808ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, (int32_t)thresholdPercent); 1818ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi msg->post(); 1828ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 1838ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 1848ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 185dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi//-------------------------------------------------- 1865b21a0626e173d407aa3835e5cffcaa9b582016dJean-Michel Trivivoid GenericPlayer::getDurationMsec(int* msec) { 1878ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi *msec = mDurationMsec; 1888ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 1898ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 1908ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::getPositionMsec(int* msec) { 1918ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi *msec = mPositionMsec; 1925b21a0626e173d407aa3835e5cffcaa9b582016dJean-Michel Trivi} 1935b21a0626e173d407aa3835e5cffcaa9b582016dJean-Michel Trivi 194be91f6328a084475e1cf58b54b8b732e088940b5Jean-Michel Trivivoid GenericPlayer::getSampleRate(uint* hz) { 195be91f6328a084475e1cf58b54b8b732e088940b5Jean-Michel Trivi *hz = mSampleRateHz; 196be91f6328a084475e1cf58b54b8b732e088940b5Jean-Michel Trivi} 197be91f6328a084475e1cf58b54b8b732e088940b5Jean-Michel Trivi 198fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi//-------------------------------------------------- 1998ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::setVolume(bool mute, bool useStereoPos, 200fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi XApermille stereoPos, XAmillibel volume) { 2016e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::setVolume mute=%s, useStereoPos=%s, stereoPos=%d, volume=%d", 2026e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten mute ? "true" : "false", useStereoPos ? "true" : "false", stereoPos, volume); 203fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 204fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // compute amplification as the combination of volume level and stereo position 205fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi float leftVol = 1.0f, rightVol = 1.0f; 206fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // amplification from volume level 207fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi leftVol *= sles_to_android_amplification(volume); 208fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi rightVol = leftVol; 209fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 210fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // amplification from direct level (changed in SLEffectSendtItf and SLAndroidEffectSendItf) 211fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // FIXME use calculation below when supporting effects 212fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi //leftVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 213fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi //rightVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 214fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 215fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // amplification from stereo position 216fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (useStereoPos) { 217fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // panning law depends on number of channels of content: stereo panning vs 2ch. balance 218fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (1 == mChannelCount) { 219fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // stereo panning 220fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi double theta = (1000 + stereoPos) * M_PI_4 / 1000.0f; // 0 <= theta <= Pi/2 221fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi leftVol *= cos(theta); 222fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi rightVol *= sin(theta); 223fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else { 224fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // stereo balance 225fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (stereoPos > 0) { 226fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi leftVol *= (1000 - stereoPos) / 1000.0f; 227fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi rightVol *= 1.0f; 228fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else { 229fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi leftVol *= 1.0f; 230fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi rightVol *= (1000 + stereoPos) / 1000.0f; 231fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 232fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 233fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 234fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 235fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi { 236fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 237fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mMute = mute; 238fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = leftVol; 239fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = rightVol; 240fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 241fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 242fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi // send a message for the volume to be updated by the object which implements the volume 243fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi (new AMessage(kWhatVolumeUpdate, id()))->post(); 244fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi} 245fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 2465b21a0626e173d407aa3835e5cffcaa9b582016dJean-Michel Trivi 2475b21a0626e173d407aa3835e5cffcaa9b582016dJean-Michel Trivi//-------------------------------------------------- 24841562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kastenvoid GenericPlayer::attachAuxEffect(int32_t effectId) 24941562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten{ 25041562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("GenericPlayer::attachAuxEffect(id=%d)", effectId); 25141562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten sp<AMessage> msg = new AMessage(kWhatAttachAuxEffect, id()); 25241562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten msg->setInt32(WHATPARAM_ATTACHAUXEFFECT, effectId); 25341562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten msg->post(); 25441562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten} 25541562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 25641562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 25741562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten//-------------------------------------------------- 25841562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kastenvoid GenericPlayer::setAuxEffectSendLevel(float level) 25941562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten{ 26041562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("GenericPlayer::setAuxEffectSendLevel(level=%g)", level); 26141562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten sp<AMessage> msg = new AMessage(kWhatSetAuxEffectSendLevel, id()); 26241562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten msg->setFloat(WHATPARAM_SETAUXEFFECTSENDLEVEL, level); 26341562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten msg->post(); 26441562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten} 26541562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 26641562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 26741562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten//-------------------------------------------------- 268dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi/* 269dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * post-condition: mDataLocatorType == kDataLocatorNone 270dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi * 271dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi */ 272dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::resetDataLocator() { 2736e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::resetDataLocator()"); 274dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mDataLocatorType = kDataLocatorNone; 275dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 276dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 277dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 278dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data, bool async) { 2796e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data=%d, async=%s)", event, data, 2806e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten async ? "true" : "false"); 281dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 282dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->setInt32(event, (int32_t)data); 283dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if (async) { 284dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi msg->post(); 285dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } else { 286dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi this->onNotify(msg); 287dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 288dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 289dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 290dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 291fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data1, int data2, bool async) { 2926e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data1=%d, data2=%d, async=%s)", event, data1, data2, 2936e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten async ? "true" : "false"); 294fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 295fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi msg->setRect(event, 0, 0, (int32_t)data1, (int32_t)data2); 296fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi if (async) { 297fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi msg->post(); 298fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else { 299fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi this->onNotify(msg); 300fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } 301fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi} 302fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 303fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 304dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi//-------------------------------------------------- 305dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi// AHandler implementation 306dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onMessageReceived(const sp<AMessage> &msg) { 3076e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::onMessageReceived()"); 308dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi switch (msg->what()) { 309dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatPrepare: 3106e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGD("kWhatPrepare"); 311dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onPrepare(); 312dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 313dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 314dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatNotif: 3156e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGI("kWhatNotif"); 316dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onNotify(msg); 317dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 318dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 319dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatPlay: 3206e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatPlay"); 321dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onPlay(); 322dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 323dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 324dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatPause: 3256e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatPause"); 326dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onPause(); 327dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 328dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 329dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatSeek: 3306e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatSeek"); 331dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onSeek(msg); 332dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 333dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 334dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi case kWhatLoop: 3356e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatLoop"); 336dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi onLoop(msg); 337dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi break; 338dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 339fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi case kWhatVolumeUpdate: 3406e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatVolumeUpdate"); 341fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi onVolumeUpdate(); 342fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi break; 343fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 3448ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi case kWhatSeekComplete: 3456e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatSeekComplete"); 3468ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi onSeekComplete(); 3478ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi break; 3488ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 3498ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi case kWhatBufferingUpdate: 3506e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatBufferingUpdate"); 3518ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi onBufferingUpdate(msg); 3528ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi break; 3538ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 3548ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi case kWhatBuffUpdateThres: 3556e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatBuffUpdateThres"); 3568ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi onSetBufferingUpdateThreshold(msg); 3578ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi break; 3588ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 35941562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten case kWhatAttachAuxEffect: 36041562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("kWhatAttachAuxEffect"); 36141562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten onAttachAuxEffect(msg); 36241562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten break; 36341562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 36441562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten case kWhatSetAuxEffectSendLevel: 36541562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("kWhatSetAuxEffectSendLevel"); 36641562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten onSetAuxEffectSendLevel(msg); 36741562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten break; 36841562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 369dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi default: 3706e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("kWhatPlay"); 371dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi TRESPASS(); 372dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 373dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 374dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 375dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 376dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi//-------------------------------------------------- 377dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi// Event handlers 3788ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi// it is strictly verboten to call those methods outside of the event loop 3798ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 380dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onPrepare() { 381e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten SL_LOGI("GenericPlayer::onPrepare()"); 382e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten // Subclass is responsible for indicating whether prepare was successful or unsuccessful 383e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten // by updating mStateFlags accordingly. It must set exactly one of these two flags. 384e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten assert(!(mStateFlags & kFlagPrepared) != !(mStateFlags & kFlagPreparedUnsuccessfully)); 385e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten notify(PLAYEREVENT_PREPARED, mStateFlags & kFlagPrepared ? PLAYER_SUCCESS : PLAYER_FAILURE, 386e1c913c670ee6f38940555b4247bc4a572eaa798Glenn Kasten false /*async*/); 38730ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare() done, mStateFlags=0x%x", mStateFlags); 388dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 389dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 390dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 391dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onNotify(const sp<AMessage> &msg) { 3926e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::onNotify()"); 3931209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notif_cbf_t notifClient; 3941209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi void* notifUser; 3951209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi { 3961209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 3971209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi if (NULL == mNotifyClient) { 3981209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi return; 3991209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi } else { 4001209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient = mNotifyClient; 4011209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifUser = mNotifyUser; 4021209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi } 403dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 404dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 405fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi int32_t val1, val2; 4068ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi if (msg->findInt32(PLAYEREVENT_PREFETCHSTATUSCHANGE, &val1)) { 4078ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHSTATUSCHANGE, val1); 4081209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient(kEventPrefetchStatusChange, val1, 0, notifUser); 4098ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, &val1)) { 4108ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHFILLLEVELUPDATE, val1); 4111209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient(kEventPrefetchFillLevelUpdate, val1, 0, notifUser); 4128ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_ENDOFSTREAM, &val1)) { 4138ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_ENDOFSTREAM, val1); 4141209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient(kEventEndOfStream, val1, 0, notifUser); 4158ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREPARED, &val1)) { 416fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREPARED, val1); 4171209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient(kEventPrepared, val1, 0, notifUser); 418fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi } else if (msg->findRect(PLAYEREVENT_VIDEO_SIZE_UPDATE, &val1, &val2, &val1, &val2)) { 4198ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d, %d", PLAYEREVENT_VIDEO_SIZE_UPDATE, val1, val2); 4201209c173a13a62d0f7d9f1d605e3665a5818fa90Jean-Michel Trivi notifClient(kEventHasVideoSize, val1, val2, notifUser); 4216e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten } else { 4226e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer notifying unknown"); 423dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 424dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 425dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 426dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 427dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onPlay() { 42830ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::onPlay()"); 429dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 43030ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("starting player"); 431dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mStateFlags |= kFlagPlaying; 432dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } else { 433dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGV("NOT starting player mStateFlags=0x%x", mStateFlags); 434dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 435dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 436dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 437dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 438dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onPause() { 43930ebe675beff91283cc72d4ee5e94e56ab7e107fJean-Michel Trivi SL_LOGD("GenericPlayer::onPause()"); 440dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 441dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi mStateFlags &= ~kFlagPlaying; 442dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi } 443dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 444dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 445dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 446dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onSeek(const sp<AMessage> &msg) { 447dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGV("GenericPlayer::onSeek"); 448dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 449dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 450dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 451dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivivoid GenericPlayer::onLoop(const sp<AMessage> &msg) { 452dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi SL_LOGV("GenericPlayer::onLoop"); 453dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} 454dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi 455fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 456fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivivoid GenericPlayer::onVolumeUpdate() { 4576e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::onVolumeUpdate"); 458fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi} 459fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi 4608ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4618ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::onSeekComplete() { 4628ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi SL_LOGD("GenericPlayer::onSeekComplete()"); 4638ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mStateFlags &= ~kFlagSeeking; 4648ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 4658ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4668ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4678ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::onBufferingUpdate(const sp<AMessage> &msg) { 4686e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::onBufferingUpdate"); 4698ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 4708ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4718ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4728ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::onSetBufferingUpdateThreshold(const sp<AMessage> &msg) { 4736e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::onSetBufferingUpdateThreshold"); 4748ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi int32_t thresholdPercent = 0; 4758ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi if (msg->findInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, &thresholdPercent)) { 4768ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 4778ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mCacheFillNotifThreshold = (int16_t)thresholdPercent; 4788ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi } 4798ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 4808ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4818ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 48241562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kastenvoid GenericPlayer::onAttachAuxEffect(const sp<AMessage> &msg) { 48341562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("GenericPlayer::onAttachAuxEffect()"); 48441562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten} 48541562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 48641562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 48741562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kastenvoid GenericPlayer::onSetAuxEffectSendLevel(const sp<AMessage> &msg) { 48841562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten SL_LOGV("GenericPlayer::onSetAuxEffectSendLevel()"); 48941562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten} 49041562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 49141562990ca46e5d6c4aadde6c2469b8007bb980cGlenn Kasten 4928ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi//------------------------------------------------- 4938ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::notifyStatus() { 4946e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::notifyStatus"); 4958ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHSTATUSCHANGE, (int32_t)mCacheStatus, true /*async*/); 4968ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 4978ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4988ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 4998ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::notifyCacheFill() { 5006e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::notifyCacheFill"); 5018ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi mLastNotifiedCacheFill = mCacheFill; 5028ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, (int32_t)mLastNotifiedCacheFill, true/*async*/); 5038ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 5048ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 5058ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 5068ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::seekComplete() { 5076e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::seekComplete"); 5088ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeekComplete, id()); 5098ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi msg->post(); 5108ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 5118ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 5128ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 5138ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivivoid GenericPlayer::bufferingUpdate(int16_t fillLevelPerMille) { 5146e00efb769f780bc46c2ccda92688ba890623fb4Glenn Kasten SL_LOGV("GenericPlayer::bufferingUpdate"); 5158ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBufferingUpdate, id()); 5168ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATE, fillLevelPerMille); 5178ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi msg->post(); 5188ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi} 5198ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi 520dff1b1fc1f687c544e19df56bef225c45f7256a9Jean-Michel Trivi} // namespace android 521