NuPlayerDriver.cpp revision 43c3e6ce02215ca99d506458f596cb1211639f29
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), 341aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mLooper(new ALooper), 3543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState(UNINITIALIZED), 3643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs(-1) { 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->setName("NuPlayerDriver Looper"); 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->start( 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber false, /* runOnCallingThread */ 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber true, /* canCallJava */ 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber PRIORITY_AUDIO); 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer = new NuPlayer; 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->registerHandler(mPlayer); 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 4743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->setDriver(this); 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 50f933441648ef6a71dee783d733aac17b9508b452Andreas HuberNuPlayerDriver::~NuPlayerDriver() { 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mLooper->stop(); 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::initCheck() { 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource( 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const char *url, const KeyedVector<String8, String8> *headers) { 6043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)UNINITIALIZED); 6143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 625bc087c573c70c84c6a39946457590b42d392a33Andreas Huber mPlayer->setDataSource(url, headers); 635bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 6443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = STOPPED; 6543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 665bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource(int fd, int64_t offset, int64_t length) { 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setDataSource(const sp<IStreamSource> &source) { 7443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)UNINITIALIZED); 7543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer->setDataSource(source); 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 7843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = STOPPED; 7943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 82f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 83f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setVideoSurface(const sp<Surface> &surface) { 84f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer->setVideoSurface(surface); 85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 88f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::prepare() { 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 91f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::prepareAsync() { 945bc087c573c70c84c6a39946457590b42d392a33Andreas Huber sendEvent(MEDIA_PREPARED); 955bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 99f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::start() { 10043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 10143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 10243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 10343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 10443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 10543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->start(); 10643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 10743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mStartupSeekTimeUs >= 0) { 10843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->seekToAsync(mStartupSeekTimeUs); 10943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = -1; 11043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 11143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 11243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 11343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 11443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 11543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 11643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 11743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)PAUSED); 11843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 11943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->resume(); 12043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 12143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 12243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 12343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 12443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = PLAYING; 125f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 126f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 127f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 128f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 129f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::stop() { 13043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return pause(); 131f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 132f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 133f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::pause() { 13443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 13543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 13643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 13743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 13843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 13943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 14043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->pause(); 14143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 14243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 14343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 14443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber CHECK_EQ((int)mState, (int)PAUSED); 14543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 14643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 14743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 14843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 14943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = PAUSED; 15043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 151f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 152f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 153f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 154f933441648ef6a71dee783d733aac17b9508b452Andreas Huberbool NuPlayerDriver::isPlaying() { 15543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return mState == PLAYING; 156f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 157f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 158f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::seekTo(int msec) { 15943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber int64_t seekTimeUs = msec * 1000ll; 16043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 16143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber switch (mState) { 16243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case UNINITIALIZED: 16343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return INVALID_OPERATION; 16443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case STOPPED: 16543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 16643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = seekTimeUs; 16743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 16843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 16943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PLAYING: 17043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber case PAUSED: 17143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber { 17243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPlayer->seekToAsync(seekTimeUs); 17343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 17443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 17543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 17643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber default: 17743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber TRESPASS(); 17843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber break; 17943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 18043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 18143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber return OK; 182f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 183f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 184f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getCurrentPosition(int *msec) { 18543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 18643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 18743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mPositionUs < 0) { 18843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = 0; 18943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } else { 19043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = (mPositionUs + 500ll) / 1000; 19143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 1925bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 1935bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 194f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 195f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 196f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getDuration(int *msec) { 19743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 19843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 19943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber if (mDurationUs < 0) { 20043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = 0; 20143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } else { 20243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber *msec = (mDurationUs + 500ll) / 1000; 20343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber } 2045bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 2055bc087c573c70c84c6a39946457590b42d392a33Andreas Huber return OK; 206f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 207f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 208f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::reset() { 2091aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber Mutex::Autolock autoLock(mLock); 2101aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mResetInProgress = true; 2111aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 2121aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mPlayer->resetAsync(); 2131aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 2141aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber while (mResetInProgress) { 2151aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mCondition.wait(mLock); 2161aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber } 2171aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 21843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mDurationUs = -1; 21943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPositionUs = -1; 22043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mState = UNINITIALIZED; 22143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mStartupSeekTimeUs = -1; 22243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 223f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return OK; 224f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 225f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 226f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::setLooping(int loop) { 227f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 228f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 229f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 230f933441648ef6a71dee783d733aac17b9508b452Andreas Huberplayer_type NuPlayerDriver::playerType() { 231f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return NU_PLAYER; 232f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 233f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 234f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) { 235f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 236f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 237f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 238f933441648ef6a71dee783d733aac17b9508b452Andreas Hubervoid NuPlayerDriver::setAudioSink(const sp<AudioSink> &audioSink) { 239f933441648ef6a71dee783d733aac17b9508b452Andreas Huber mPlayer->setAudioSink(audioSink); 240f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 241f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 242f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstatus_t NuPlayerDriver::getMetadata( 243f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const media::Metadata::Filter& ids, Parcel *records) { 244f933441648ef6a71dee783d733aac17b9508b452Andreas Huber return INVALID_OPERATION; 245f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} 246f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 24743c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyResetComplete() { 2481aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber Mutex::Autolock autoLock(mLock); 2491aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber CHECK(mResetInProgress); 2501aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mResetInProgress = false; 2511aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber mCondition.broadcast(); 2521aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber} 2531aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 25443c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyDuration(int64_t durationUs) { 25543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 25643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mDurationUs = durationUs; 25743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 25843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 25943c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifyPosition(int64_t positionUs) { 26043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber Mutex::Autolock autoLock(mLock); 26143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber mPositionUs = positionUs; 26243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 26343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 26443c3e6ce02215ca99d506458f596cb1211639f29Andreas Hubervoid NuPlayerDriver::notifySeekComplete() { 26543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber sendEvent(MEDIA_SEEK_COMPLETE); 26643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber} 26743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 268f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 269