android_GenericPlayer.cpp revision fa2bd93c3a9852a1f879663eeff598d13cf8fa81
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.mFinalVolume[0] = 1.0f; 4837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = 1.0f; 4913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 5013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel TriviGenericPlayer::~GenericPlayer() { 53e31a69fcbe27894a597176d05a08e04c06092021Glenn Kasten SL_LOGV("GenericPlayer::~GenericPlayer()"); 5413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 5613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::init(const notif_cbf_t cbf, void* notifUser) { 59e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::init()"); 6013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 61e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 62e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 63e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyClient = cbf; 64e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyUser = notifUser; 65e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 6613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper->registerHandler(this); 6813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper->start(false /*runOnCallingThread*/, false /*canCallJava*/, mLooperPriority); 6913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 7013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 7113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 72e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivivoid GenericPlayer::preDestroy() { 73e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi SL_LOGD("GenericPlayer::preDestroy()"); 74e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 75e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 76e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyClient = NULL; 77e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mNotifyUser = NULL; 78e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 79e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 80e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mLooper->stop(); 81e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi mLooper->unregisterHandler(id()); 82e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi} 83e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 84e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi 8513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(const char *uri) { 86b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setDataSource(uri=%s)", uri); 8713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 8813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.uriRef = uri; 9013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorUri; 9213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 9313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 96b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setDataSource(fd=%d, offset=%lld, length=%lld)", fd, offset, length); 9713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 9813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.fd = fd; 10013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct stat sb; 10213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi int ret = fstat(fd, &sb); 10313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (ret != 0) { 10413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("GenericPlayer::setDataSource: fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); 10513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 10613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 10713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (offset >= sb.st_size) { 10913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("SfPlayer::setDataSource: invalid offset"); 11013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 11113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 11213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.offset = offset; 11313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (PLAYER_FD_FIND_FILE_SIZE == length) { 11513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size; 11613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else if (offset + length > sb.st_size) { 11713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size - offset; 11813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 11913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = length; 12013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 12113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorFd; 12313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 12413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::prepare() { 127e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::prepare()"); 12813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPrepare, id()); 12913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 13013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 13113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::play() { 134e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::play()"); 13513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPlay, id()); 13613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 13713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 13813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::pause() { 141e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::pause()"); 14213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPause, id()); 14313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 14413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 14513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::stop() { 148e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::stop()"); 14913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi (new AMessage(kWhatPause, id()))->post(); 15013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi // after a stop, playback should resume from the start. 15213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi seek(0); 15313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 15413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::seek(int64_t timeMsec) { 15713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::seek %lld", timeMsec); 1587ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi if (timeMsec < 0) { 1597ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi SL_LOGE("GenericPlayer::seek error, can't seek to negative time %lldms", timeMsec); 1607ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi return; 1617ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi } 16213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeek, id()); 16313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt64(WHATPARAM_SEEK_SEEKTIME_MS, timeMsec); 16413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 16513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 16613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 16713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 16813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::loop(bool loop) { 169b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::loop %s", loop ? "true" : "false"); 17013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatLoop, id()); 17113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(WHATPARAM_LOOP_LOOPING, (int32_t)loop); 17213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 17313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 17413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 17513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1764ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::setBufferingUpdateThreshold(int16_t thresholdPercent) { 177b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::setBufferingUpdateThreshold %d", thresholdPercent); 1784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBuffUpdateThres, id()); 1794ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, (int32_t)thresholdPercent); 1804ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 1814ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1824ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1834ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 18413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 18570c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivivoid GenericPlayer::getDurationMsec(int* msec) { 1864ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mDurationMsec; 1874ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1894ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::getPositionMsec(int* msec) { 1904ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mPositionMsec; 19170c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi} 19270c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 1937f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivivoid GenericPlayer::getSampleRate(uint* hz) { 1947f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi *hz = mSampleRateHz; 1957f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi} 1967f5cc1afe49395fefaad9b2bbd728a45d1bfda6aJean-Michel Trivi 19737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi//-------------------------------------------------- 198fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kastenvoid GenericPlayer::setVolume(float leftVol, float rightVol) 199fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten{ 20037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi { 20137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 20237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = leftVol; 20337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = rightVol; 20437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 20537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // send a message for the volume to be updated by the object which implements the volume 20637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi (new AMessage(kWhatVolumeUpdate, id()))->post(); 20737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 20837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 20970c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 21070c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi//-------------------------------------------------- 2113610785fa93586ce84a27a27530feb77b8035229Glenn Kastenvoid GenericPlayer::attachAuxEffect(int32_t effectId) 2123610785fa93586ce84a27a27530feb77b8035229Glenn Kasten{ 2133610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("GenericPlayer::attachAuxEffect(id=%d)", effectId); 2143610785fa93586ce84a27a27530feb77b8035229Glenn Kasten sp<AMessage> msg = new AMessage(kWhatAttachAuxEffect, id()); 2153610785fa93586ce84a27a27530feb77b8035229Glenn Kasten msg->setInt32(WHATPARAM_ATTACHAUXEFFECT, effectId); 2163610785fa93586ce84a27a27530feb77b8035229Glenn Kasten msg->post(); 2173610785fa93586ce84a27a27530feb77b8035229Glenn Kasten} 2183610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 2193610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 2203610785fa93586ce84a27a27530feb77b8035229Glenn Kasten//-------------------------------------------------- 2213610785fa93586ce84a27a27530feb77b8035229Glenn Kastenvoid GenericPlayer::setAuxEffectSendLevel(float level) 2223610785fa93586ce84a27a27530feb77b8035229Glenn Kasten{ 2233610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("GenericPlayer::setAuxEffectSendLevel(level=%g)", level); 2243610785fa93586ce84a27a27530feb77b8035229Glenn Kasten sp<AMessage> msg = new AMessage(kWhatSetAuxEffectSendLevel, id()); 2253610785fa93586ce84a27a27530feb77b8035229Glenn Kasten msg->setFloat(WHATPARAM_SETAUXEFFECTSENDLEVEL, level); 2263610785fa93586ce84a27a27530feb77b8035229Glenn Kasten msg->post(); 2273610785fa93586ce84a27a27530feb77b8035229Glenn Kasten} 2283610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 2293610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 2303610785fa93586ce84a27a27530feb77b8035229Glenn Kasten//-------------------------------------------------- 23113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* 23213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * post-condition: mDataLocatorType == kDataLocatorNone 23313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 23413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 23513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::resetDataLocator() { 236b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::resetDataLocator()"); 23713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorNone; 23813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 23913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 24013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 24113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data, bool async) { 242b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data=%d, async=%s)", event, data, 243b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten async ? "true" : "false"); 24413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 24513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(event, (int32_t)data); 24613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (async) { 24713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 24813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 24913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi this->onNotify(msg); 25013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 25113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 25213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 25313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 25437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data1, int data2, bool async) { 255b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notify(event=%s, data1=%d, data2=%d, async=%s)", event, data1, data2, 256b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten async ? "true" : "false"); 25737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 25837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->setRect(event, 0, 0, (int32_t)data1, (int32_t)data2); 25937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (async) { 26037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->post(); 26137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 26237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi this->onNotify(msg); 26337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 26437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 26537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 26637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 26713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 26813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// AHandler implementation 26913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onMessageReceived(const sp<AMessage> &msg) { 270b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onMessageReceived()"); 27113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi switch (msg->what()) { 27213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPrepare: 273fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten SL_LOGV("kWhatPrepare"); 27413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPrepare(); 27513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 27613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 27713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatNotif: 278fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten SL_LOGV("kWhatNotif"); 27913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onNotify(msg); 28013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 28113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 28213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPlay: 283b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPlay"); 28413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPlay(); 28513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 28613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 28713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPause: 288b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPause"); 28913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPause(); 29013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 29113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 29213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatSeek: 293b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatSeek"); 29413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onSeek(msg); 29513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 29613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 29713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatLoop: 298b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatLoop"); 29913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onLoop(msg); 30013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 30113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 30237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi case kWhatVolumeUpdate: 303b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatVolumeUpdate"); 30437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi onVolumeUpdate(); 30537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi break; 30637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 3074ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatSeekComplete: 308b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatSeekComplete"); 3094ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSeekComplete(); 3104ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3114ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3124ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBufferingUpdate: 313b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatBufferingUpdate"); 3144ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onBufferingUpdate(msg); 3154ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3164ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3174ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBuffUpdateThres: 318b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatBuffUpdateThres"); 3194ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSetBufferingUpdateThreshold(msg); 3204ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 3214ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3223610785fa93586ce84a27a27530feb77b8035229Glenn Kasten case kWhatAttachAuxEffect: 3233610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("kWhatAttachAuxEffect"); 3243610785fa93586ce84a27a27530feb77b8035229Glenn Kasten onAttachAuxEffect(msg); 3253610785fa93586ce84a27a27530feb77b8035229Glenn Kasten break; 3263610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 3273610785fa93586ce84a27a27530feb77b8035229Glenn Kasten case kWhatSetAuxEffectSendLevel: 3283610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("kWhatSetAuxEffectSendLevel"); 3293610785fa93586ce84a27a27530feb77b8035229Glenn Kasten onSetAuxEffectSendLevel(msg); 3303610785fa93586ce84a27a27530feb77b8035229Glenn Kasten break; 3313610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 33213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi default: 333b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("kWhatPlay"); 33413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi TRESPASS(); 33513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 33613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 33713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 33813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 33913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 34013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// Event handlers 3414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi// it is strictly verboten to call those methods outside of the event loop 3424ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 34313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPrepare() { 344fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten SL_LOGV("GenericPlayer::onPrepare()"); 34549935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten // Subclass is responsible for indicating whether prepare was successful or unsuccessful 34649935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten // by updating mStateFlags accordingly. It must set exactly one of these two flags. 34749935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten assert(!(mStateFlags & kFlagPrepared) != !(mStateFlags & kFlagPreparedUnsuccessfully)); 34849935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten notify(PLAYEREVENT_PREPARED, mStateFlags & kFlagPrepared ? PLAYER_SUCCESS : PLAYER_FAILURE, 34949935c51fddcd0caa0030e2aac0c3a7ba3339e3dGlenn Kasten false /*async*/); 350e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare() done, mStateFlags=0x%x", mStateFlags); 35113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 35213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 35313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 35413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onNotify(const sp<AMessage> &msg) { 355b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onNotify()"); 356e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notif_cbf_t notifClient; 357e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi void* notifUser; 358e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi { 359e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi android::Mutex::Autolock autoLock(mNotifyClientLock); 360e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi if (NULL == mNotifyClient) { 361e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi return; 362e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } else { 363e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient = mNotifyClient; 364e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifUser = mNotifyUser; 365e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi } 36613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 36713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi int32_t val1, val2; 3694ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(PLAYEREVENT_PREFETCHSTATUSCHANGE, &val1)) { 3704ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHSTATUSCHANGE, val1); 371e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrefetchStatusChange, val1, 0, notifUser); 3724ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, &val1)) { 3734ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHFILLLEVELUPDATE, val1); 374e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrefetchFillLevelUpdate, val1, 0, notifUser); 3754ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_ENDOFSTREAM, &val1)) { 3764ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_ENDOFSTREAM, val1); 377e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventEndOfStream, val1, 0, notifUser); 3784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREPARED, &val1)) { 37937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREPARED, val1); 380e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventPrepared, val1, 0, notifUser); 381fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten } else if (msg->findInt32(PLAYEREVENT_CHANNEL_COUNT, &val1)) { 382fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_CHANNEL_COUNT, val1); 383fa2bd93c3a9852a1f879663eeff598d13cf8fa81Glenn Kasten notifClient(kEventChannelCount, val1, 0, notifUser); 38437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else if (msg->findRect(PLAYEREVENT_VIDEO_SIZE_UPDATE, &val1, &val2, &val1, &val2)) { 3854ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d, %d", PLAYEREVENT_VIDEO_SIZE_UPDATE, val1, val2); 386e6ded5c61944a87fa9e472dec3a6929855d42aebJean-Michel Trivi notifClient(kEventHasVideoSize, val1, val2, notifUser); 387b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten } else { 388b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer notifying unknown"); 38913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 39013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 39113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 39213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 39313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPlay() { 394e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPlay()"); 39513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 396e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("starting player"); 39713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags |= kFlagPlaying; 39813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 39913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("NOT starting player mStateFlags=0x%x", mStateFlags); 40013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 40113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 40213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 40313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 40413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPause() { 405e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPause()"); 40613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 40713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags &= ~kFlagPlaying; 40813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 40913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 41013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onSeek(const sp<AMessage> &msg) { 41313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onSeek"); 41413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 41513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 41713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onLoop(const sp<AMessage> &msg) { 41813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onLoop"); 41913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 42013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 42137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 42237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::onVolumeUpdate() { 423b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onVolumeUpdate"); 42437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 42537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 4264ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4274ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSeekComplete() { 4284ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGD("GenericPlayer::onSeekComplete()"); 4294ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mStateFlags &= ~kFlagSeeking; 4304ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4314ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4324ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4334ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onBufferingUpdate(const sp<AMessage> &msg) { 434b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onBufferingUpdate"); 4354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4374ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSetBufferingUpdateThreshold(const sp<AMessage> &msg) { 439b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::onSetBufferingUpdateThreshold"); 4404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t thresholdPercent = 0; 4414ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, &thresholdPercent)) { 4424ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 4434ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFillNotifThreshold = (int16_t)thresholdPercent; 4444ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } 4454ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4464ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4474ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4483610785fa93586ce84a27a27530feb77b8035229Glenn Kastenvoid GenericPlayer::onAttachAuxEffect(const sp<AMessage> &msg) { 4493610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("GenericPlayer::onAttachAuxEffect()"); 4503610785fa93586ce84a27a27530feb77b8035229Glenn Kasten} 4513610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 4523610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 4533610785fa93586ce84a27a27530feb77b8035229Glenn Kastenvoid GenericPlayer::onSetAuxEffectSendLevel(const sp<AMessage> &msg) { 4543610785fa93586ce84a27a27530feb77b8035229Glenn Kasten SL_LOGV("GenericPlayer::onSetAuxEffectSendLevel()"); 4553610785fa93586ce84a27a27530feb77b8035229Glenn Kasten} 4563610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 4573610785fa93586ce84a27a27530feb77b8035229Glenn Kasten 4584ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi//------------------------------------------------- 4594ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyStatus() { 460b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notifyStatus"); 4614ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHSTATUSCHANGE, (int32_t)mCacheStatus, true /*async*/); 4624ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4634ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4644ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4654ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyCacheFill() { 466b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::notifyCacheFill"); 4674ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mLastNotifiedCacheFill = mCacheFill; 4684ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, (int32_t)mLastNotifiedCacheFill, true/*async*/); 4694ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4704ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4714ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4724ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::seekComplete() { 473b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::seekComplete"); 4744ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeekComplete, id()); 4754ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4764ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4774ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4794ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::bufferingUpdate(int16_t fillLevelPerMille) { 480b2549c73290f1955f3a7731bf98446a45f295dfaGlenn Kasten SL_LOGV("GenericPlayer::bufferingUpdate"); 4814ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBufferingUpdate, id()); 4824ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATE, fillLevelPerMille); 4834ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4844ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4854ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 48613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} // namespace android 487