• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //#define LOG_NDEBUG 0
2 #define LOG_TAG "StagefrightPlayer"
3 #include <utils/Log.h>
4 
5 #include "StagefrightPlayer.h"
6 #include <media/stagefright/MediaPlayerImpl.h>
7 
8 namespace android {
9 
StagefrightPlayer()10 StagefrightPlayer::StagefrightPlayer()
11     : mPlayer(NULL) {
12     LOGV("StagefrightPlayer");
13 }
14 
~StagefrightPlayer()15 StagefrightPlayer::~StagefrightPlayer() {
16     LOGV("~StagefrightPlayer");
17     reset();
18     LOGV("~StagefrightPlayer done.");
19 }
20 
initCheck()21 status_t StagefrightPlayer::initCheck() {
22     LOGV("initCheck");
23     return OK;
24 }
25 
setDataSource(const char * url)26 status_t StagefrightPlayer::setDataSource(const char *url) {
27     LOGV("setDataSource('%s')", url);
28 
29     reset();
30     mPlayer = new MediaPlayerImpl(url);
31 
32     status_t err = mPlayer->initCheck();
33     if (err != OK) {
34         delete mPlayer;
35         mPlayer = NULL;
36     } else {
37         mPlayer->setAudioSink(mAudioSink);
38     }
39 
40     return err;
41 }
42 
43 // Warning: The filedescriptor passed into this method will only be valid until
44 // the method returns, if you want to keep it, dup it!
setDataSource(int fd,int64_t offset,int64_t length)45 status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) {
46     LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length);
47 
48     reset();
49     mPlayer = new MediaPlayerImpl(dup(fd), offset, length);
50 
51     status_t err = mPlayer->initCheck();
52     if (err != OK) {
53         delete mPlayer;
54         mPlayer = NULL;
55     } else {
56         mPlayer->setAudioSink(mAudioSink);
57     }
58 
59     return err;
60 }
61 
setVideoSurface(const sp<ISurface> & surface)62 status_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) {
63     LOGV("setVideoSurface");
64 
65     if (mPlayer == NULL) {
66         return NO_INIT;
67     }
68 
69     mPlayer->setISurface(surface);
70 
71     return OK;
72 }
73 
prepare()74 status_t StagefrightPlayer::prepare() {
75     LOGV("prepare");
76 
77     if (mPlayer == NULL) {
78         return NO_INIT;
79     }
80 
81     sendEvent(
82             MEDIA_SET_VIDEO_SIZE,
83             mPlayer->getWidth(), mPlayer->getHeight());
84 
85     return OK;
86 }
87 
prepareAsync()88 status_t StagefrightPlayer::prepareAsync() {
89     LOGV("prepareAsync");
90 
91     status_t err = prepare();
92 
93     if (err != OK) {
94         return err;
95     }
96 
97     sendEvent(MEDIA_PREPARED);
98 
99     return OK;
100 }
101 
start()102 status_t StagefrightPlayer::start() {
103     LOGV("start");
104 
105     if (mPlayer == NULL) {
106         return NO_INIT;
107     }
108 
109     mPlayer->play();
110 
111     return OK;
112 }
113 
stop()114 status_t StagefrightPlayer::stop() {
115     LOGV("stop");
116 
117     if (mPlayer == NULL) {
118         return NO_INIT;
119     }
120 
121     reset();
122 
123     return OK;
124 }
125 
pause()126 status_t StagefrightPlayer::pause() {
127     LOGV("pause");
128 
129     if (mPlayer == NULL) {
130         return NO_INIT;
131     }
132 
133     mPlayer->pause();
134 
135     return OK;
136 }
137 
isPlaying()138 bool StagefrightPlayer::isPlaying() {
139     LOGV("isPlaying");
140     return mPlayer != NULL && mPlayer->isPlaying();
141 }
142 
seekTo(int msec)143 status_t StagefrightPlayer::seekTo(int msec) {
144     LOGV("seekTo");
145 
146     if (mPlayer == NULL) {
147         return NO_INIT;
148     }
149 
150     status_t err = mPlayer->seekTo((int64_t)msec * 1000);
151 
152     sendEvent(MEDIA_SEEK_COMPLETE);
153 
154     return err;
155 }
156 
getCurrentPosition(int * msec)157 status_t StagefrightPlayer::getCurrentPosition(int *msec) {
158     LOGV("getCurrentPosition");
159 
160     if (mPlayer == NULL) {
161         return NO_INIT;
162     }
163 
164     *msec = mPlayer->getPosition() / 1000;
165     return OK;
166 }
167 
getDuration(int * msec)168 status_t StagefrightPlayer::getDuration(int *msec) {
169     LOGV("getDuration");
170 
171     if (mPlayer == NULL) {
172         return NO_INIT;
173     }
174 
175     *msec = mPlayer->getDuration() / 1000;
176     return OK;
177 }
178 
reset()179 status_t StagefrightPlayer::reset() {
180     LOGV("reset");
181 
182     delete mPlayer;
183     mPlayer = NULL;
184 
185     return OK;
186 }
187 
setLooping(int loop)188 status_t StagefrightPlayer::setLooping(int loop) {
189     LOGV("setLooping");
190     return UNKNOWN_ERROR;
191 }
192 
playerType()193 player_type StagefrightPlayer::playerType() {
194     LOGV("playerType");
195     return STAGEFRIGHT_PLAYER;
196 }
197 
invoke(const Parcel & request,Parcel * reply)198 status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) {
199     return INVALID_OPERATION;
200 }
201 
setAudioSink(const sp<AudioSink> & audioSink)202 void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) {
203     MediaPlayerInterface::setAudioSink(audioSink);
204 
205     if (mPlayer != NULL) {
206         mPlayer->setAudioSink(audioSink);
207     }
208 }
209 
210 }  // namespace android
211