NuPlayerDriver.cpp revision 1aef211b4e5dc952081727bfd2318b2cb5ca4506
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17//#define LOG_NDEBUG 0 18#define LOG_TAG "NuPlayerDriver" 19#include <utils/Log.h> 20 21#include "NuPlayerDriver.h" 22 23#include "NuPlayer.h" 24 25#include <media/stagefright/foundation/ADebug.h> 26#include <media/stagefright/foundation/ALooper.h> 27 28namespace android { 29 30NuPlayerDriver::NuPlayerDriver() 31 : mResetInProgress(false), 32 mLooper(new ALooper), 33 mPlayer(false) { 34 mLooper->setName("NuPlayerDriver Looper"); 35 36 mLooper->start( 37 false, /* runOnCallingThread */ 38 true, /* canCallJava */ 39 PRIORITY_AUDIO); 40 41 mPlayer = new NuPlayer; 42 mLooper->registerHandler(mPlayer); 43 44 mPlayer->setListener(this); 45} 46 47NuPlayerDriver::~NuPlayerDriver() { 48 mLooper->stop(); 49} 50 51status_t NuPlayerDriver::initCheck() { 52 return OK; 53} 54 55status_t NuPlayerDriver::setDataSource( 56 const char *url, const KeyedVector<String8, String8> *headers) { 57 mPlayer->setDataSource(url, headers); 58 59 return OK; 60} 61 62status_t NuPlayerDriver::setDataSource(int fd, int64_t offset, int64_t length) { 63 return INVALID_OPERATION; 64} 65 66status_t NuPlayerDriver::setDataSource(const sp<IStreamSource> &source) { 67 mPlayer->setDataSource(source); 68 69 return OK; 70} 71 72status_t NuPlayerDriver::setVideoSurface(const sp<Surface> &surface) { 73 mPlayer->setVideoSurface(surface); 74 75 return OK; 76} 77 78status_t NuPlayerDriver::prepare() { 79 return OK; 80} 81 82status_t NuPlayerDriver::prepareAsync() { 83 sendEvent(MEDIA_PREPARED); 84 85 return OK; 86} 87 88status_t NuPlayerDriver::start() { 89 mPlayer->start(); 90 mPlaying = true; 91 92 return OK; 93} 94 95status_t NuPlayerDriver::stop() { 96 mPlaying = false; 97 return OK; 98} 99 100status_t NuPlayerDriver::pause() { 101 mPlaying = false; 102 return OK; 103} 104 105bool NuPlayerDriver::isPlaying() { 106 return mPlaying; 107} 108 109status_t NuPlayerDriver::seekTo(int msec) { 110 return INVALID_OPERATION; 111} 112 113status_t NuPlayerDriver::getCurrentPosition(int *msec) { 114 *msec = 0; 115 116 return OK; 117} 118 119status_t NuPlayerDriver::getDuration(int *msec) { 120 *msec = 0; 121 122 return OK; 123} 124 125status_t NuPlayerDriver::reset() { 126 Mutex::Autolock autoLock(mLock); 127 mResetInProgress = true; 128 129 mPlayer->resetAsync(); 130 131 while (mResetInProgress) { 132 mCondition.wait(mLock); 133 } 134 135 return OK; 136} 137 138status_t NuPlayerDriver::setLooping(int loop) { 139 return INVALID_OPERATION; 140} 141 142player_type NuPlayerDriver::playerType() { 143 return NU_PLAYER; 144} 145 146status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) { 147 return INVALID_OPERATION; 148} 149 150void NuPlayerDriver::setAudioSink(const sp<AudioSink> &audioSink) { 151 mPlayer->setAudioSink(audioSink); 152} 153 154status_t NuPlayerDriver::getMetadata( 155 const media::Metadata::Filter& ids, Parcel *records) { 156 return INVALID_OPERATION; 157} 158 159void NuPlayerDriver::sendEvent(int msg, int ext1, int ext2) { 160 if (msg != MEDIA_RESET_COMPLETE) { 161 MediaPlayerInterface::sendEvent(msg, ext1, ext2); 162 return; 163 } 164 165 Mutex::Autolock autoLock(mLock); 166 CHECK(mResetInProgress); 167 mResetInProgress = false; 168 mCondition.broadcast(); 169} 170 171} // namespace android 172