blob: 4988d244a9eba19e39b6242d91c7d705e7b86b65 [file] [log] [blame]
Andreas Huberf9334412010-12-15 15:17:42 -08001/*
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
Andreas Huber1aef2112011-01-04 14:01:29 -080025#include <media/stagefright/foundation/ADebug.h>
Andreas Huberf9334412010-12-15 15:17:42 -080026#include <media/stagefright/foundation/ALooper.h>
27
28namespace android {
29
30NuPlayerDriver::NuPlayerDriver()
Andreas Huber1aef2112011-01-04 14:01:29 -080031 : mResetInProgress(false),
32 mLooper(new ALooper),
Andreas Huber5bc087c2010-12-23 10:27:40 -080033 mPlayer(false) {
Andreas Huberf9334412010-12-15 15:17:42 -080034 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) {
Andreas Huber5bc087c2010-12-23 10:27:40 -080057 mPlayer->setDataSource(url, headers);
58
59 return OK;
Andreas Huberf9334412010-12-15 15:17:42 -080060}
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() {
Andreas Huber5bc087c2010-12-23 10:27:40 -080083 sendEvent(MEDIA_PREPARED);
84
Andreas Huberf9334412010-12-15 15:17:42 -080085 return OK;
86}
87
88status_t NuPlayerDriver::start() {
89 mPlayer->start();
Andreas Huber5bc087c2010-12-23 10:27:40 -080090 mPlaying = true;
Andreas Huberf9334412010-12-15 15:17:42 -080091
92 return OK;
93}
94
95status_t NuPlayerDriver::stop() {
Andreas Huber5bc087c2010-12-23 10:27:40 -080096 mPlaying = false;
Andreas Huberf9334412010-12-15 15:17:42 -080097 return OK;
98}
99
100status_t NuPlayerDriver::pause() {
Andreas Huber5bc087c2010-12-23 10:27:40 -0800101 mPlaying = false;
Andreas Huberf9334412010-12-15 15:17:42 -0800102 return OK;
103}
104
105bool NuPlayerDriver::isPlaying() {
Andreas Huber5bc087c2010-12-23 10:27:40 -0800106 return mPlaying;
Andreas Huberf9334412010-12-15 15:17:42 -0800107}
108
109status_t NuPlayerDriver::seekTo(int msec) {
110 return INVALID_OPERATION;
111}
112
113status_t NuPlayerDriver::getCurrentPosition(int *msec) {
Andreas Huber5bc087c2010-12-23 10:27:40 -0800114 *msec = 0;
115
116 return OK;
Andreas Huberf9334412010-12-15 15:17:42 -0800117}
118
119status_t NuPlayerDriver::getDuration(int *msec) {
Andreas Huber5bc087c2010-12-23 10:27:40 -0800120 *msec = 0;
121
122 return OK;
Andreas Huberf9334412010-12-15 15:17:42 -0800123}
124
125status_t NuPlayerDriver::reset() {
Andreas Huber1aef2112011-01-04 14:01:29 -0800126 Mutex::Autolock autoLock(mLock);
127 mResetInProgress = true;
128
129 mPlayer->resetAsync();
130
131 while (mResetInProgress) {
132 mCondition.wait(mLock);
133 }
134
Andreas Huberf9334412010-12-15 15:17:42 -0800135 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
Andreas Huber1aef2112011-01-04 14:01:29 -0800159void 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
Andreas Huberf9334412010-12-15 15:17:42 -0800171} // namespace android