NuPlayerDriver.cpp revision afed0e1fa37473a4cd30018577b560acc79d9a3f
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber//#define LOG_NDEBUG 0 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define LOG_TAG "NuPlayerDriver" 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <utils/Log.h> 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "NuPlayerDriver.h" 22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "NuPlayer.h" 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 251aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber#include <media/stagefright/foundation/ADebug.h> 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/ALooper.h> 27f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 28f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 30f933441648ef6a71dee783d733aac17b9508b452Andreas HuberNuPlayerDriver::NuPlayerDriver() 311aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber : mResetInProgress(false), 3243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mDurationUs(-1), 3343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPositionUs(-1), 343fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesTotal(0), 353fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesDropped(0), 361aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mLooper(new ALooper), 3743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState(UNINITIALIZED), 38a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber mAtEOS(false), 3943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs(-1) { 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->setName("NuPlayerDriver Looper"); 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->start( 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber false, /* runOnCallingThread */ 44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber true, /* canCallJava */ 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber PRIORITY_AUDIO); 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer = new NuPlayer; 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->registerHandler(mPlayer); 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 5043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->setDriver(this); 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 53f933441648ef6a71dee783d733aac17b9508b452Andreas HuberNuPlayerDriver::~NuPlayerDriver() { 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->stop(); 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::initCheck() { 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 619b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huberstatus_t NuPlayerDriver::setUID(uid_t uid) { 629b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber mPlayer->setUID(uid); 639b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 649b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber return OK; 659b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber} 669b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource( 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const char *url, const KeyedVector<String8, String8> *headers) { 6943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)UNINITIALIZED); 7043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 715bc087c573c70c84c6a39946457590b42d392a33Andreas Huber mPlayer->setDataSource(url, headers); 725bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 7343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = STOPPED; 7443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 755bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource(int fd, int64_t offset, int64_t length) { 79afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber CHECK_EQ((int)mState, (int)UNINITIALIZED); 80afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 81afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber mPlayer->setDataSource(fd, offset, length); 82afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 83afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber mState = STOPPED; 84afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 85afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber return OK; 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 88f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource(const sp<IStreamSource> &source) { 8943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)UNINITIALIZED); 9043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 91f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer->setDataSource(source); 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 9343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = STOPPED; 9443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 981173118eace0e9e347cb007f0da817cee87579edGlenn Kastenstatus_t NuPlayerDriver::setVideoSurfaceTexture( 991173118eace0e9e347cb007f0da817cee87579edGlenn Kasten const sp<ISurfaceTexture> &surfaceTexture) { 1001173118eace0e9e347cb007f0da817cee87579edGlenn Kasten mPlayer->setVideoSurfaceTexture(surfaceTexture); 1011173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 1021173118eace0e9e347cb007f0da817cee87579edGlenn Kasten return OK; 1031173118eace0e9e347cb007f0da817cee87579edGlenn Kasten} 1041173118eace0e9e347cb007f0da817cee87579edGlenn Kasten 105f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::prepare() { 106afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber sendEvent(MEDIA_SET_VIDEO_SIZE, 320, 240); 107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::prepareAsync() { 111afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber status_t err = prepare(); 112afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 113a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber notifyListener(MEDIA_PREPARED); 1145bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 115afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber return err; 116f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 117f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 118f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::start() { 11943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 12043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 12143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 12243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 12343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 124a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber mAtEOS = false; 12543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->start(); 12643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 12743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mStartupSeekTimeUs >= 0) { 1282048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber if (mStartupSeekTimeUs == 0) { 1292048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber notifySeekComplete(); 1302048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber } else { 1312048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber mPlayer->seekToAsync(mStartupSeekTimeUs); 1322048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber } 1332048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber 13443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = -1; 13543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 1362048d0cfccce48be26816dec8711a6691ebff71cAndreas Huber 13743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 13843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 13943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 14043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 14143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 14243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 14343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)PAUSED); 14443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 14543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->resume(); 14643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 14743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 14843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 14943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 15043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = PLAYING; 151f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 152f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 153f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 154f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 155f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::stop() { 15643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return pause(); 157f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 158f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 159f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::pause() { 16043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 16143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 16243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 16343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 16443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 16543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 16643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->pause(); 16743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 16843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 16943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 17043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)PAUSED); 17143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 17243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 17343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 17443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 17543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = PAUSED; 17643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 177f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 178f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 179f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 180f933441648ef6a71dee783d733aac17b9508b452Andreas Huberbool NuPlayerDriver::isPlaying() { 181a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber return mState == PLAYING && !mAtEOS; 182f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 183f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 184f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::seekTo(int msec) { 18543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber int64_t seekTimeUs = msec * 1000ll; 18643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 18743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 18843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 18943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 19043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 19143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 19243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = seekTimeUs; 19343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 19443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 19543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 19643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PAUSED: 19743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 198a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber mAtEOS = false; 19943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->seekToAsync(seekTimeUs); 20043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 20143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 20243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 20343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 20443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber TRESPASS(); 20543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 20643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 20743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 20843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 209f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 210f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 211f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getCurrentPosition(int *msec) { 21243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 21343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 21443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mPositionUs < 0) { 21543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = 0; 21643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } else { 21743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = (mPositionUs + 500ll) / 1000; 21843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 2195bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 2205bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 221f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 222f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 223f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getDuration(int *msec) { 22443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 22543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 22643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mDurationUs < 0) { 22743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = 0; 22843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } else { 22943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = (mDurationUs + 500ll) / 1000; 23043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 2315bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 2325bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 233f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 234f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 235f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::reset() { 2361aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber Mutex::Autolock autoLock(mLock); 2371aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mResetInProgress = true; 2381aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 2391aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mPlayer->resetAsync(); 2401aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 2411aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber while (mResetInProgress) { 2421aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mCondition.wait(mLock); 2431aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber } 2441aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 24543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mDurationUs = -1; 24643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPositionUs = -1; 24743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = UNINITIALIZED; 24843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = -1; 24943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 250f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 251f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 252f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 253f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setLooping(int loop) { 254f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 255f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 256f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 257f933441648ef6a71dee783d733aac17b9508b452Andreas Huberplayer_type NuPlayerDriver::playerType() { 258f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return NU_PLAYER; 259f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 260f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 261f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) { 262f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 263f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 264f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 265f933441648ef6a71dee783d733aac17b9508b452Andreas Hubervoid NuPlayerDriver::setAudioSink(const sp<AudioSink> &audioSink) { 266f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer->setAudioSink(audioSink); 267f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 268f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 2694f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wangstatus_t NuPlayerDriver::setParameter(int key, const Parcel &request) { 2704f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return INVALID_OPERATION; 2714f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang} 2724f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 2734f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wangstatus_t NuPlayerDriver::getParameter(int key, Parcel *reply) { 2744f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return INVALID_OPERATION; 2754f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang} 2764f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 277f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getMetadata( 278f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const media::Metadata::Filter& ids, Parcel *records) { 279f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 280f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 281f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 28243c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyResetComplete() { 2831aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber Mutex::Autolock autoLock(mLock); 2841aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber CHECK(mResetInProgress); 2851aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mResetInProgress = false; 2861aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mCondition.broadcast(); 2871aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber} 2881aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 28943c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyDuration(int64_t durationUs) { 29043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 29143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mDurationUs = durationUs; 29243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 29343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 29443c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyPosition(int64_t positionUs) { 29543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 29643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPositionUs = positionUs; 29743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 29843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 29943c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifySeekComplete() { 300a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber notifyListener(MEDIA_SEEK_COMPLETE); 30143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 30243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 3033fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Hubervoid NuPlayerDriver::notifyFrameStats( 3043fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber int64_t numFramesTotal, int64_t numFramesDropped) { 3053fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber Mutex::Autolock autoLock(mLock); 3063fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesTotal = numFramesTotal; 3073fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesDropped = numFramesDropped; 3083fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber} 3093fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 3103fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huberstatus_t NuPlayerDriver::dump(int fd, const Vector<String16> &args) const { 3113fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber Mutex::Autolock autoLock(mLock); 3123fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 3133fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber FILE *out = fdopen(dup(fd), "w"); 3143fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 3153fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber fprintf(out, " NuPlayer\n"); 3163fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber fprintf(out, " numFramesTotal(%lld), numFramesDropped(%lld), " 3173fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber "percentageDropped(%.2f)\n", 3183fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesTotal, 3193fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesDropped, 3203fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber mNumFramesTotal == 0 3213fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber ? 0.0 : (double)mNumFramesDropped / mNumFramesTotal); 3223fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 3233fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber fclose(out); 3243fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber out = NULL; 3253fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 3263fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber return OK; 3273fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber} 3283fe62150fa3dd6d25cb84aad80bc9e27ddd16c45Andreas Huber 329a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Hubervoid NuPlayerDriver::notifyListener(int msg, int ext1, int ext2) { 330a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber if (msg == MEDIA_PLAYBACK_COMPLETE || msg == MEDIA_ERROR) { 331a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber mAtEOS = true; 332a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber } 333a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber 334a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber sendEvent(msg, ext1, ext2); 335a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber} 336a4af2143ecbd630e946647c1b5f90fda8f61ebb3Andreas Huber 337f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 338