StagefrightPlayer.cpp revision bfa6b2d7a1be1832ac40ed90aece1834f720b5c6
1//#define LOG_NDEBUG 0 2#define LOG_TAG "StagefrightPlayer" 3#include <utils/Log.h> 4 5#include "StagefrightPlayer.h" 6 7#include "AwesomePlayer.h" 8 9namespace android { 10 11StagefrightPlayer::StagefrightPlayer() 12 : mPlayer(new AwesomePlayer) { 13 LOGV("StagefrightPlayer"); 14 15 mPlayer->setListener(this); 16} 17 18StagefrightPlayer::~StagefrightPlayer() { 19 LOGV("~StagefrightPlayer"); 20 reset(); 21 22 delete mPlayer; 23 mPlayer = NULL; 24} 25 26status_t StagefrightPlayer::initCheck() { 27 LOGV("initCheck"); 28 return OK; 29} 30 31status_t StagefrightPlayer::setDataSource(const char *url) { 32 LOGV("setDataSource('%s')", url); 33 return mPlayer->setDataSource(url); 34} 35 36// Warning: The filedescriptor passed into this method will only be valid until 37// the method returns, if you want to keep it, dup it! 38status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 39 LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); 40 return mPlayer->setDataSource(dup(fd), offset, length); 41} 42 43status_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) { 44 LOGV("setVideoSurface"); 45 46 mPlayer->setISurface(surface); 47 return OK; 48} 49 50status_t StagefrightPlayer::prepare() { 51 LOGV("prepare"); 52 53 int32_t width, height; 54 if (mPlayer->getVideoDimensions(&width, &height) != OK) { 55 width = height = 0; 56 } 57 58 sendEvent(MEDIA_SET_VIDEO_SIZE, width, height); 59 60 return OK; 61} 62 63status_t StagefrightPlayer::prepareAsync() { 64 LOGV("prepareAsync"); 65 66 status_t err = prepare(); 67 68 if (err != OK) { 69 return err; 70 } 71 72 sendEvent(MEDIA_PREPARED); 73 74 return OK; 75} 76 77status_t StagefrightPlayer::start() { 78 LOGV("start"); 79 80 return mPlayer->play(); 81} 82 83status_t StagefrightPlayer::stop() { 84 LOGV("stop"); 85 86 return pause(); // what's the difference? 87} 88 89status_t StagefrightPlayer::pause() { 90 LOGV("pause"); 91 92 return mPlayer->pause(); 93} 94 95bool StagefrightPlayer::isPlaying() { 96 LOGV("isPlaying"); 97 return mPlayer->isPlaying(); 98} 99 100status_t StagefrightPlayer::seekTo(int msec) { 101 LOGV("seekTo"); 102 103 status_t err = mPlayer->seekTo((int64_t)msec * 1000); 104 105 return err; 106} 107 108status_t StagefrightPlayer::getCurrentPosition(int *msec) { 109 LOGV("getCurrentPosition"); 110 111 int64_t positionUs; 112 status_t err = mPlayer->getPosition(&positionUs); 113 114 if (err != OK) { 115 return err; 116 } 117 118 *msec = (positionUs + 500) / 1000; 119 120 return OK; 121} 122 123status_t StagefrightPlayer::getDuration(int *msec) { 124 LOGV("getDuration"); 125 126 int64_t durationUs; 127 status_t err = mPlayer->getDuration(&durationUs); 128 129 if (err != OK) { 130 return err; 131 } 132 133 *msec = (durationUs + 500) / 1000; 134 135 return OK; 136} 137 138status_t StagefrightPlayer::reset() { 139 LOGV("reset"); 140 141 mPlayer->reset(); 142 143 return OK; 144} 145 146status_t StagefrightPlayer::setLooping(int loop) { 147 LOGV("setLooping"); 148 149 return mPlayer->setLooping(loop); 150} 151 152player_type StagefrightPlayer::playerType() { 153 LOGV("playerType"); 154 return STAGEFRIGHT_PLAYER; 155} 156 157status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) { 158 return INVALID_OPERATION; 159} 160 161void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) { 162 MediaPlayerInterface::setAudioSink(audioSink); 163 164 mPlayer->setAudioSink(audioSink); 165} 166 167} // namespace android 168