android_GenericPlayer.cpp revision b2549c73290f1955f3a7731bf98446a45f295dfa
113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* 213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Copyright (C) 2011 The Android Open Source Project 313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * you may not use this file except in compliance with the License. 613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * You may obtain a copy of the License at 713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 1013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 1113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 1213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * See the License for the specific language governing permissions and 1413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * limitations under the License. 1513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 1613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//#define USE_LOG SLAndroidLogLevel_Verbose 1813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi#include "sles_allinclusive.h" 2013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 214ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <media/stagefright/foundation/ADebug.h> 224ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi#include <sys/stat.h> 234ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 2413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivinamespace android { 2513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 2613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------------------------------------------------------- 2713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel TriviGenericPlayer::GenericPlayer(const AudioPlayback_Parameters* params) : 2813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType(kDataLocatorNone), 2913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mNotifyClient(NULL), 3013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mNotifyUser(NULL), 3113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags(0), 3213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooperPriority(PRIORITY_DEFAULT), 3337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mPlaybackParams(*params), 341a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten mChannelCount(UNKNOWN_NUMCHANNELS), 354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mDurationMsec(ANDROID_UNKNOWN_TIME), 364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mPositionMsec(ANDROID_UNKNOWN_TIME), 371a9c2615d0933d183fcb1b9e34ec8f0da2a85153Glenn Kasten mSampleRateHz(UNKNOWN_SAMPLERATE), 384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheStatus(kStatusEmpty), 394ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFill(0), 404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mLastNotifiedCacheFill(0), 414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFillNotifThreshold(100) 4213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi{ 43e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::GenericPlayer()"); 4413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 4513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper = new android::ALooper(); 4613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 4737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mMute = false; 4837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = 1.0f; 4937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = 1.0f; 5013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 5113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel TriviGenericPlayer::~GenericPlayer() { 54e31a69fcbe27894a597176d05a08e04c06092021Glenn Kasten SL_LOGV("GenericPlayer::~GenericPlayer()"); 5513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 5713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::init(const notif_cbf_t cbf, void* notifUser) { 60e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::init()"); 6113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 62e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 63e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 64e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyClient = cbf; 65e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyUser = notifUser; 66e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 6713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper->registerHandler(this); 6913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper->start(false /*runOnCallingThread*/, false /*canCallJava*/, mLooperPriority); 7013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 7113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 7213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 73e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivivoid GenericPlayer::preDestroy() { 74e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi SL_LOGD("GenericPlayer::preDestroy()"); 75e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 76e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 77e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyClient = NULL; 78e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyUser = NULL; 79e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 80e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 81e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mLooper->stop(); 82e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mLooper->unregisterHandler(id()); 83e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi} 84e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 85e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 8613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(const char *uri) { 87b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setDataSource(uri=%s)", uri); 8813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 8913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.uriRef = uri; 9113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorUri; 9313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 9413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 97b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setDataSource(fd=%d, offset=%lld, length=%lld)", fd, offset, length); 9813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 9913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.fd = fd; 10113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct stat sb; 10313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi int ret = fstat(fd, &sb); 10413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (ret != 0) { 10513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("GenericPlayer::setDataSource: fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); 10613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 10713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 10813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (offset >= sb.st_size) { 11013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("SfPlayer::setDataSource: invalid offset"); 11113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 11213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 11313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.offset = offset; 11413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (PLAYER_FD_FIND_FILE_SIZE == length) { 11613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size; 11713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else if (offset + length > sb.st_size) { 11813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size - offset; 11913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 12013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = length; 12113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 12213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorFd; 12413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 12513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::prepare() { 128e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::prepare()"); 12913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPrepare, id()); 13013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 13113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 13213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::play() { 135e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::play()"); 13613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPlay, id()); 13713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 13813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 13913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::pause() { 142e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::pause()"); 14313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPause, id()); 14413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 14513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 14613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::stop() { 149e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::stop()"); 15013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi (new AMessage(kWhatPause, id()))->post(); 15113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi // after a stop, playback should resume from the start. 15313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi seek(0); 15413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 15513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::seek(int64_t timeMsec) { 15813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::seek %lld", timeMsec); 1597ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi if (timeMsec < 0) { 1607ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi SL_LOGE("GenericPlayer::seek error, can't seek to negative time %lldms", timeMsec); 1617ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi return; 1627ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi } 16313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeek, id()); 16413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt64(WHATPARAM_SEEK_SEEKTIME_MS, timeMsec); 16513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 16613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 16713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 16813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 16913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::loop(bool loop) { 170b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::loop %s", loop ? "true" : "false"); 17113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatLoop, id()); 17213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(WHATPARAM_LOOP_LOOPING, (int32_t)loop); 17313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 17413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 17513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 17613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1774ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::setBufferingUpdateThreshold(int16_t thresholdPercent) { 178b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setBufferingUpdateThreshold %d", thresholdPercent); 1794ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBuffUpdateThres, id()); 1804ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, (int32_t)thresholdPercent); 1814ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 1824ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1834ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1844ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 18513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 18670c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivivoid GenericPlayer::getDurationMsec(int* msec) { 1874ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mDurationMsec; 1884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1894ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1904ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::getPositionMsec(int* msec) { 1914ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mPositionMsec; 19270c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi} 19370c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 1947f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivivoid GenericPlayer::getSampleRate(uint* hz) { 1957f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi *hz = mSampleRateHz; 1967f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi} 1977f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi 19837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi//-------------------------------------------------- 1994ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::setVolume(bool mute, bool useStereoPos, 20037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi XApermille stereoPos, XAmillibel volume) { 201b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setVolume mute=%s, useStereoPos=%s, stereoPos=%d, volume=%d", 202b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten mute ? "true" : "false", useStereoPos ? "true" : "false", stereoPos, volume); 20337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 20437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // compute amplification as the combination of volume level and stereo position 20537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi float leftVol = 1.0f, rightVol = 1.0f; 20637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from volume level 20737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= sles_to_android_amplification(volume); 20837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol = leftVol; 20937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 21037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from direct level (changed in SLEffectSendtItf and SLAndroidEffectSendItf) 21137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // FIXME use calculation below when supporting effects 21237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi //leftVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 21337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi //rightVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 21437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 21537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from stereo position 21637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (useStereoPos) { 21737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // panning law depends on number of channels of content: stereo panning vs 2ch. balance 21837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (1 == mChannelCount) { 21937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // stereo panning 22037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi double theta = (1000 + stereoPos) * M_PI_4 / 1000.0f; // 0 <= theta <= Pi/2 22137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= cos(theta); 22237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= sin(theta); 22337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 22437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // stereo balance 22537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (stereoPos > 0) { 22637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= (1000 - stereoPos) / 1000.0f; 22737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= 1.0f; 22837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 22937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= 1.0f; 23037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= (1000 + stereoPos) / 1000.0f; 23137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 23237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 23337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 23437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 23537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi { 23637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 23737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mMute = mute; 23837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = leftVol; 23937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = rightVol; 24037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 24137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 24237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // send a message for the volume to be updated by the object which implements the volume 24337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi (new AMessage(kWhatVolumeUpdate, id()))->post(); 24437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 24537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 24670c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 24770c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi//-------------------------------------------------- 24813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* 24913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * post-condition: mDataLocatorType == kDataLocatorNone 25013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 25113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 25213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::resetDataLocator() { 253b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::resetDataLocator()"); 25413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorNone; 25513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 25613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 25713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 25813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data, bool async) { 259b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data=%d, async=%s)", event, data, 260b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten async ? "true" : "false"); 26113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 26213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(event, (int32_t)data); 26313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (async) { 26413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 26513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 26613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi this->onNotify(msg); 26713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 26813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 26913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 27013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 27137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data1, int data2, bool async) { 272b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data1=%d, data2=%d, async=%s)", event, data1, data2, 273b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten async ? "true" : "false"); 27437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 27537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->setRect(event, 0, 0, (int32_t)data1, (int32_t)data2); 27637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (async) { 27737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->post(); 27837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 27937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi this->onNotify(msg); 28037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 28137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 28237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 28337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 28413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 28513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// AHandler implementation 28613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onMessageReceived(const sp<AMessage> &msg) { 287b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onMessageReceived()"); 28813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi switch (msg->what()) { 28913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPrepare: 290b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGD("kWhatPrepare"); 29113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPrepare(); 29213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 29313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 29413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatNotif: 295b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGI("kWhatNotif"); 29613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onNotify(msg); 29713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 29813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 29913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPlay: 300b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPlay"); 30113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPlay(); 30213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 30313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 30413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPause: 305b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPause"); 30613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPause(); 30713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 30813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 30913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatSeek: 310b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatSeek"); 31113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onSeek(msg); 31213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 31313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 31413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatLoop: 315b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatLoop"); 31613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onLoop(msg); 31713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 31813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 31937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi case kWhatVolumeUpdate: 320b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatVolumeUpdate"); 32137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi onVolumeUpdate(); 32237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi break; 32337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 3244ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatSeekComplete: 325b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatSeekComplete"); 3264ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSeekComplete(); 3274ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3284ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3294ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBufferingUpdate: 330b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatBufferingUpdate"); 3314ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onBufferingUpdate(msg); 3324ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3334ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3344ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBuffUpdateThres: 335b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatBuffUpdateThres"); 3364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSetBufferingUpdateThreshold(msg); 3374ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 33913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi default: 340b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPlay"); 34113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi TRESPASS(); 34213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 34313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 34413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 34513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 34613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 34713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// Event handlers 3484ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi// it is strictly verboten to call those methods outside of the event loop 3494ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 35013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPrepare() { 351e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare()"); 35213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (!(mStateFlags & kFlagPrepared)) { 35313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags |= kFlagPrepared; 35413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi notify(PLAYEREVENT_PREPARED, PLAYER_SUCCESS, false /*async*/); 35513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 356e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare() done, mStateFlags=0x%x", mStateFlags); 35713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 35813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 35913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onNotify(const sp<AMessage> &msg) { 361b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onNotify()"); 362e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notif_cbf_t notifClient; 363e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi void* notifUser; 364e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 365e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 366e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi if (NULL == mNotifyClient) { 367e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi return; 368e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } else { 369e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient = mNotifyClient; 370e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifUser = mNotifyUser; 371e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 37213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 37313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 37437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi int32_t val1, val2; 3754ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(PLAYEREVENT_PREFETCHSTATUSCHANGE, &val1)) { 3764ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHSTATUSCHANGE, val1); 377e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrefetchStatusChange, val1, 0, notifUser); 3784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, &val1)) { 3794ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHFILLLEVELUPDATE, val1); 380e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrefetchFillLevelUpdate, val1, 0, notifUser); 3814ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_ENDOFSTREAM, &val1)) { 3824ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_ENDOFSTREAM, val1); 383e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventEndOfStream, val1, 0, notifUser); 3844ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREPARED, &val1)) { 38537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREPARED, val1); 386e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrepared, val1, 0, notifUser); 38737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else if (msg->findRect(PLAYEREVENT_VIDEO_SIZE_UPDATE, &val1, &val2, &val1, &val2)) { 3884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d, %d", PLAYEREVENT_VIDEO_SIZE_UPDATE, val1, val2); 389e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventHasVideoSize, val1, val2, notifUser); 390b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten } else { 391b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer notifying unknown"); 39213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 39313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 39413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 39513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 39613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPlay() { 397e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPlay()"); 39813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 399e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("starting player"); 40013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags |= kFlagPlaying; 40113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 40213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("NOT starting player mStateFlags=0x%x", mStateFlags); 40313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 40413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 40513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 40613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 40713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPause() { 408e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPause()"); 40913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 41013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags &= ~kFlagPlaying; 41113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 41213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 41313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onSeek(const sp<AMessage> &msg) { 41613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onSeek"); 41713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 41813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 42013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onLoop(const sp<AMessage> &msg) { 42113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onLoop"); 42213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 42313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 42437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 42537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::onVolumeUpdate() { 426b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onVolumeUpdate"); 42737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 42837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 4294ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4304ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSeekComplete() { 4314ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGD("GenericPlayer::onSeekComplete()"); 4324ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mStateFlags &= ~kFlagSeeking; 4334ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4344ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onBufferingUpdate(const sp<AMessage> &msg) { 437b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onBufferingUpdate"); 4384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4394ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSetBufferingUpdateThreshold(const sp<AMessage> &msg) { 442b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onSetBufferingUpdateThreshold"); 4434ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t thresholdPercent = 0; 4444ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, &thresholdPercent)) { 4454ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 4464ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFillNotifThreshold = (int16_t)thresholdPercent; 4474ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } 4484ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4494ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4504ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4514ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi//------------------------------------------------- 4524ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyStatus() { 453b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notifyStatus"); 4544ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHSTATUSCHANGE, (int32_t)mCacheStatus, true /*async*/); 4554ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4564ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4574ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4584ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyCacheFill() { 459b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notifyCacheFill"); 4604ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mLastNotifiedCacheFill = mCacheFill; 4614ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, (int32_t)mLastNotifiedCacheFill, true/*async*/); 4624ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4634ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4644ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4654ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::seekComplete() { 466b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::seekComplete"); 4674ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeekComplete, id()); 4684ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4694ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4704ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4714ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4724ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::bufferingUpdate(int16_t fillLevelPerMille) { 473b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::bufferingUpdate"); 4744ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBufferingUpdate, id()); 4754ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATE, fillLevelPerMille); 4764ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4774ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 47913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} // namespace android 480