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