android_GenericPlayer.cpp revision 7ef5526a7bd12eccfa777cc8bc167794634f405a
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), 344ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mChannelCount(1), 354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mDurationMsec(ANDROID_UNKNOWN_TIME), 364ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mPositionMsec(ANDROID_UNKNOWN_TIME), 374ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheStatus(kStatusEmpty), 384ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFill(0), 394ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mLastNotifiedCacheFill(0), 404ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFillNotifThreshold(100) 4113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi{ 42e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::GenericPlayer()"); 4313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 4413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper = new android::ALooper(); 4513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 4637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mMute = false; 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 mLooper->stop(); 5613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper->unregisterHandler(id()); 5713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mLooper.clear(); 5813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 5913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 6013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::init(const notif_cbf_t cbf, void* notifUser) { 63e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::init()"); 6413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 6513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mNotifyClient = cbf; 6613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mNotifyUser = notifUser; 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 7313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(const char *uri) { 7413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 7513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 7613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.uriRef = uri; 7713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 7813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorUri; 7913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 8013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 8313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi resetDataLocator(); 8413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.fd = fd; 8613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 8713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi struct stat sb; 8813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi int ret = fstat(fd, &sb); 8913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (ret != 0) { 9013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("GenericPlayer::setDataSource: fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); 9113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 9213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 9313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 9413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (offset >= sb.st_size) { 9513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGE("SfPlayer::setDataSource: invalid offset"); 9613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 9713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 9813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.offset = offset; 9913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (PLAYER_FD_FIND_FILE_SIZE == length) { 10113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size; 10213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else if (offset + length > sb.st_size) { 10313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = sb.st_size - offset; 10413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 10513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocator.fdi.length = length; 10613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 10713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 10813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorFd; 10913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 11013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::prepare() { 113e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::prepare()"); 11413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPrepare, id()); 11513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 11613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 11713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 11913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::play() { 120e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::play()"); 12113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPlay, id()); 12213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 12313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 12413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 12613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::pause() { 127e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::pause()"); 12813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatPause, id()); 12913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 13013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 13113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::stop() { 134e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::stop()"); 13513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi (new AMessage(kWhatPause, id()))->post(); 13613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 13713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi // after a stop, playback should resume from the start. 13813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi seek(0); 13913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 14013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 14213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::seek(int64_t timeMsec) { 14313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::seek %lld", timeMsec); 1447ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi if (timeMsec < 0) { 1457ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi SL_LOGE("GenericPlayer::seek error, can't seek to negative time %lldms", timeMsec); 1467ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi return; 1477ef5526a7bd12eccfa777cc8bc167794634f405aJean-Michel Trivi } 14813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeek, id()); 14913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt64(WHATPARAM_SEEK_SEEKTIME_MS, timeMsec); 15013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 15113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 15213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 15413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::loop(bool loop) { 15513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatLoop, id()); 15613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(WHATPARAM_LOOP_LOOPING, (int32_t)loop); 15713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 15813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 15913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 16013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 1614ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::setBufferingUpdateThreshold(int16_t thresholdPercent) { 1624ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBuffUpdateThres, id()); 1634ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, (int32_t)thresholdPercent); 1644ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 1654ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1664ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1674ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 16813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 16970c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivivoid GenericPlayer::getDurationMsec(int* msec) { 1704ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mDurationMsec; 1714ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 1724ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 1734ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::getPositionMsec(int* msec) { 1744ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi *msec = mPositionMsec; 17570c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi} 17670c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 17737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi//-------------------------------------------------- 1784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::setVolume(bool mute, bool useStereoPos, 17937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi XApermille stereoPos, XAmillibel volume) { 18037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 18137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // compute amplification as the combination of volume level and stereo position 18237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi float leftVol = 1.0f, rightVol = 1.0f; 18337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from volume level 18437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= sles_to_android_amplification(volume); 18537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol = leftVol; 18637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 18737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from direct level (changed in SLEffectSendtItf and SLAndroidEffectSendItf) 18837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // FIXME use calculation below when supporting effects 18937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi //leftVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 19037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi //rightVol *= mAndroidAudioLevels.mAmplFromDirectLevel; 19137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 19237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // amplification from stereo position 19337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (useStereoPos) { 19437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // panning law depends on number of channels of content: stereo panning vs 2ch. balance 19537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (1 == mChannelCount) { 19637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // stereo panning 19737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi double theta = (1000 + stereoPos) * M_PI_4 / 1000.0f; // 0 <= theta <= Pi/2 19837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= cos(theta); 19937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= sin(theta); 20037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 20137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // stereo balance 20237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (stereoPos > 0) { 20337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= (1000 - stereoPos) / 1000.0f; 20437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= 1.0f; 20537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 20637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi leftVol *= 1.0f; 20737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi rightVol *= (1000 + stereoPos) / 1000.0f; 20837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 20937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 21037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 21137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 21237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi { 21337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 21437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mMute = mute; 21537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[0] = leftVol; 21637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mAndroidAudioLevels.mFinalVolume[1] = rightVol; 21737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 21837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 21937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi // send a message for the volume to be updated by the object which implements the volume 22037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi (new AMessage(kWhatVolumeUpdate, id()))->post(); 22137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 22237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 22370c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi 22470c49ae2867094072a4365423417ea452bf82231Jean-Michel Trivi//-------------------------------------------------- 22513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi/* 22613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * post-condition: mDataLocatorType == kDataLocatorNone 22713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi * 22813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi */ 22913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::resetDataLocator() { 23013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mDataLocatorType = kDataLocatorNone; 23113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 23213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 23313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 23413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data, bool async) { 23513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 23613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->setInt32(event, (int32_t)data); 23713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (async) { 23813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi msg->post(); 23913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 24013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi this->onNotify(msg); 24113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 24213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 24313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 24413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 24537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::notify(const char* event, int data1, int data2, bool async) { 24637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatNotif, id()); 24737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->setRect(event, 0, 0, (int32_t)data1, (int32_t)data2); 24837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi if (async) { 24937dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi msg->post(); 25037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else { 25137dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi this->onNotify(msg); 25237dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } 25337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 25437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 25537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 25613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 25713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// AHandler implementation 25813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onMessageReceived(const sp<AMessage> &msg) { 25913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi switch (msg->what()) { 26013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPrepare: 26113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPrepare(); 26213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 26313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 26413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatNotif: 26513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onNotify(msg); 26613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 26713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 26813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPlay: 26913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPlay(); 27013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 27113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 27213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatPause: 27313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onPause(); 27413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 27513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 27613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatSeek: 27713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onSeek(msg); 27813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 27913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 28013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi case kWhatLoop: 28113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi onLoop(msg); 28213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi break; 28313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 28437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi case kWhatVolumeUpdate: 28537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi onVolumeUpdate(); 28637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi break; 28737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 2884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatSeekComplete: 2894ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSeekComplete(); 2904ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 2914ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 2924ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBufferingUpdate: 2934ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onBufferingUpdate(msg); 2944ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 2954ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 2964ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi case kWhatBuffUpdateThres: 2974ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi onSetBufferingUpdateThreshold(msg); 2984ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi break; 2994ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 30013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi default: 30113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi TRESPASS(); 30213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 30313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 30413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 30513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 30613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi//-------------------------------------------------- 30713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi// Event handlers 3084ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi// it is strictly verboten to call those methods outside of the event loop 3094ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 31013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPrepare() { 311e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare()"); 31213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (!(mStateFlags & kFlagPrepared)) { 31313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags |= kFlagPrepared; 31413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi notify(PLAYEREVENT_PREPARED, PLAYER_SUCCESS, false /*async*/); 31513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 316e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPrepare() done, mStateFlags=0x%x", mStateFlags); 31713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 31813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 31913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 32013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onNotify(const sp<AMessage> &msg) { 32113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if (NULL == mNotifyClient) { 32213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi return; 32313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 32413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 32537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi int32_t val1, val2; 3264ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(PLAYEREVENT_PREFETCHSTATUSCHANGE, &val1)) { 3274ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHSTATUSCHANGE, val1); 3284ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mNotifyClient(kEventPrefetchStatusChange, val1, 0, mNotifyUser); 3294ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, &val1)) { 3304ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREFETCHFILLLEVELUPDATE, val1); 3314ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mNotifyClient(kEventPrefetchFillLevelUpdate, val1, 0, mNotifyUser); 3324ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_ENDOFSTREAM, &val1)) { 3334ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_ENDOFSTREAM, val1); 3344ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mNotifyClient(kEventEndOfStream, val1, 0, mNotifyUser); 3354ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } else if (msg->findInt32(PLAYEREVENT_PREPARED, &val1)) { 33637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d", PLAYEREVENT_PREPARED, val1); 33737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mNotifyClient(kEventPrepared, val1, 0, mNotifyUser); 33837dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi } else if (msg->findRect(PLAYEREVENT_VIDEO_SIZE_UPDATE, &val1, &val2, &val1, &val2)) { 3394ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGV("GenericPlayer notifying %s = %d, %d", PLAYEREVENT_VIDEO_SIZE_UPDATE, val1, val2); 34037dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi mNotifyClient(kEventHasVideoSize, val1, val2, mNotifyUser); 34113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 34213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 34313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 34413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 34513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPlay() { 346e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPlay()"); 34713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 348e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("starting player"); 34913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags |= kFlagPlaying; 35013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } else { 35113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("NOT starting player mStateFlags=0x%x", mStateFlags); 35213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 35313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 35413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 35513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 35613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onPause() { 357e9236d046fdb5cac0696c42e03443a2439188146Jean-Michel Trivi SL_LOGD("GenericPlayer::onPause()"); 35813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi if ((mStateFlags & kFlagPrepared)) { 35913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi mStateFlags &= ~kFlagPlaying; 36013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi } 36113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 36213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36413837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onSeek(const sp<AMessage> &msg) { 36513837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onSeek"); 36613837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 36713837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36813837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 36913837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivivoid GenericPlayer::onLoop(const sp<AMessage> &msg) { 37013837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi SL_LOGV("GenericPlayer::onLoop"); 37113837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} 37213837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi 37337dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 37437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivivoid GenericPlayer::onVolumeUpdate() { 37537dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 37637dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi} 37737dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi 3784ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3794ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSeekComplete() { 3804ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi SL_LOGD("GenericPlayer::onSeekComplete()"); 3814ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mStateFlags &= ~kFlagSeeking; 3824ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 3834ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3844ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3854ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onBufferingUpdate(const sp<AMessage> &msg) { 3864ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3874ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 3884ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3894ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3904ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::onSetBufferingUpdateThreshold(const sp<AMessage> &msg) { 3914ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi int32_t thresholdPercent = 0; 3924ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi if (msg->findInt32(WHATPARAM_BUFFERING_UPDATETHRESHOLD_PERCENT, &thresholdPercent)) { 3934ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi Mutex::Autolock _l(mSettingsLock); 3944ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mCacheFillNotifThreshold = (int16_t)thresholdPercent; 3954ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi } 3964ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 3974ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3984ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 3994ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi//------------------------------------------------- 4004ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyStatus() { 4014ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHSTATUSCHANGE, (int32_t)mCacheStatus, true /*async*/); 4024ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4034ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4044ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4054ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::notifyCacheFill() { 4064ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi mLastNotifiedCacheFill = mCacheFill; 4074ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi notify(PLAYEREVENT_PREFETCHFILLLEVELUPDATE, (int32_t)mLastNotifiedCacheFill, true/*async*/); 4084ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4094ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4104ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4114ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::seekComplete() { 4124ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatSeekComplete, id()); 4134ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4144ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4154ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4164ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 4174ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivivoid GenericPlayer::bufferingUpdate(int16_t fillLevelPerMille) { 4184ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi sp<AMessage> msg = new AMessage(kWhatBufferingUpdate, id()); 4194ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->setInt32(WHATPARAM_BUFFERING_UPDATE, fillLevelPerMille); 4204ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi msg->post(); 4214ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi} 4224ee246c55533bdab8ab5fa0f0581744fe58e7c91Jean-Michel Trivi 42313837cf3f7be0eb8b1a9552bd99a89f98c987720Jean-Michel Trivi} // namespace android 424