diff options
Diffstat (limited to 'media/libmediaplayerservice/StagefrightPlayer.cpp')
-rw-r--r-- | media/libmediaplayerservice/StagefrightPlayer.cpp | 115 |
1 files changed, 36 insertions, 79 deletions
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp index dbee451..5915105 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.cpp +++ b/media/libmediaplayerservice/StagefrightPlayer.cpp @@ -3,19 +3,24 @@ #include <utils/Log.h> #include "StagefrightPlayer.h" -#include <media/stagefright/MediaPlayerImpl.h> + +#include "AwesomePlayer.h" namespace android { StagefrightPlayer::StagefrightPlayer() - : mPlayer(NULL) { + : mPlayer(new AwesomePlayer) { LOGV("StagefrightPlayer"); + + mPlayer->setListener(this); } StagefrightPlayer::~StagefrightPlayer() { LOGV("~StagefrightPlayer"); reset(); - LOGV("~StagefrightPlayer done."); + + delete mPlayer; + mPlayer = NULL; } status_t StagefrightPlayer::initCheck() { @@ -25,62 +30,32 @@ status_t StagefrightPlayer::initCheck() { status_t StagefrightPlayer::setDataSource(const char *url) { LOGV("setDataSource('%s')", url); - - reset(); - mPlayer = new MediaPlayerImpl(url); - - status_t err = mPlayer->initCheck(); - if (err != OK) { - delete mPlayer; - mPlayer = NULL; - } else { - mPlayer->setAudioSink(mAudioSink); - } - - return err; + return mPlayer->setDataSource(url); } // Warning: The filedescriptor passed into this method will only be valid until // the method returns, if you want to keep it, dup it! status_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) { LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); - - reset(); - mPlayer = new MediaPlayerImpl(dup(fd), offset, length); - - status_t err = mPlayer->initCheck(); - if (err != OK) { - delete mPlayer; - mPlayer = NULL; - } else { - mPlayer->setAudioSink(mAudioSink); - } - - return err; + return mPlayer->setDataSource(dup(fd), offset, length); } status_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) { LOGV("setVideoSurface"); - if (mPlayer == NULL) { - return NO_INIT; - } - mPlayer->setISurface(surface); - return OK; } status_t StagefrightPlayer::prepare() { LOGV("prepare"); - if (mPlayer == NULL) { - return NO_INIT; + int32_t width, height; + if (mPlayer->getVideoDimensions(&width, &height) != OK) { + width = height = 0; } - sendEvent( - MEDIA_SET_VIDEO_SIZE, - mPlayer->getWidth(), mPlayer->getHeight()); + sendEvent(MEDIA_SET_VIDEO_SIZE, width, height); return OK; } @@ -102,92 +77,76 @@ status_t StagefrightPlayer::prepareAsync() { status_t StagefrightPlayer::start() { LOGV("start"); - if (mPlayer == NULL) { - return NO_INIT; - } - - mPlayer->play(); - - return OK; + return mPlayer->play(); } status_t StagefrightPlayer::stop() { LOGV("stop"); - if (mPlayer == NULL) { - return NO_INIT; - } - - reset(); - - return OK; + return pause(); // what's the difference? } status_t StagefrightPlayer::pause() { LOGV("pause"); - if (mPlayer == NULL) { - return NO_INIT; - } - - mPlayer->pause(); - - return OK; + return mPlayer->pause(); } bool StagefrightPlayer::isPlaying() { LOGV("isPlaying"); - return mPlayer != NULL && mPlayer->isPlaying(); + return mPlayer->isPlaying(); } status_t StagefrightPlayer::seekTo(int msec) { LOGV("seekTo"); - if (mPlayer == NULL) { - return NO_INIT; - } - status_t err = mPlayer->seekTo((int64_t)msec * 1000); - sendEvent(MEDIA_SEEK_COMPLETE); - return err; } status_t StagefrightPlayer::getCurrentPosition(int *msec) { LOGV("getCurrentPosition"); - if (mPlayer == NULL) { - return NO_INIT; + int64_t positionUs; + status_t err = mPlayer->getPosition(&positionUs); + + if (err != OK) { + return err; } - *msec = mPlayer->getPosition() / 1000; + *msec = (positionUs + 500) / 1000; + return OK; } status_t StagefrightPlayer::getDuration(int *msec) { LOGV("getDuration"); - if (mPlayer == NULL) { - return NO_INIT; + int64_t durationUs; + status_t err = mPlayer->getDuration(&durationUs); + + if (err != OK) { + return err; } - *msec = mPlayer->getDuration() / 1000; + *msec = (durationUs + 500) / 1000; + return OK; } status_t StagefrightPlayer::reset() { LOGV("reset"); - delete mPlayer; - mPlayer = NULL; + mPlayer->reset(); return OK; } status_t StagefrightPlayer::setLooping(int loop) { LOGV("setLooping"); - return UNKNOWN_ERROR; + + return mPlayer->setLooping(loop); } player_type StagefrightPlayer::playerType() { @@ -202,9 +161,7 @@ status_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) { void StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) { MediaPlayerInterface::setAudioSink(audioSink); - if (mPlayer != NULL) { - mPlayer->setAudioSink(audioSink); - } + mPlayer->setAudioSink(audioSink); } } // namespace android |