StagefrightPlayer.cpp revision a75e9fb4876139fff4bb836fb0ebd5f80c8b20b3
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 8namespace android { 9 10StagefrightPlayer::StagefrightPlayer() 11 : mPlayer(NULL) { 12 LOGV("StagefrightPlayer"); 13} 14 15StagefrightPlayer::~StagefrightPlayer() { 16 LOGV("~StagefrightPlayer"); 17 reset(); 18 LOGV("~StagefrightPlayer done."); 19} 20 21status_t StagefrightPlayer::initCheck() { 22 LOGV("initCheck"); 23 return OK; 24} 25 26status_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! 45status_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 62status_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 74status_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 88status_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 102status_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 114status_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 126status_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 138bool StagefrightPlayer::isPlaying() { 139 LOGV("isPlaying"); 140 return mPlayer != NULL && mPlayer->isPlaying(); 141} 142 143status_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 157status_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 168status_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 179status_t StagefrightPlayer::reset() { 180 LOGV("reset"); 181 182 delete mPlayer; 183 mPlayer = NULL; 184 185 return OK; 186} 187 188status_t StagefrightPlayer::setLooping(int loop) { 189 LOGV("setLooping"); 190 return UNKNOWN_ERROR; 191} 192 193player_type StagefrightPlayer::playerType() { 194 LOGV("playerType"); 195 return STAGEFRIGHT_PLAYER; 196} 197 198status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) { 199 return INVALID_OPERATION; 200} 201 202void 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