diff options
author | Andreas Huber <andih@google.com> | 2009-11-20 09:32:46 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2009-11-23 10:44:30 -0800 |
commit | bfa6b2d7a1be1832ac40ed90aece1834f720b5c6 (patch) | |
tree | 5b4948c52fde583d593d088ffc4a7f772c904a86 /media/libmediaplayerservice | |
parent | bf89c099fc97717e3008a481aeddc76c1ac5e00d (diff) | |
download | frameworks_av-bfa6b2d7a1be1832ac40ed90aece1834f720b5c6.zip frameworks_av-bfa6b2d7a1be1832ac40ed90aece1834f720b5c6.tar.gz frameworks_av-bfa6b2d7a1be1832ac40ed90aece1834f720b5c6.tar.bz2 |
Squashed commit of the following:
commit 1efc38dc3c33fef57b759002db3965ed07a28cb0
Author: Andreas Huber <andih@google.com>
Date: Thu Nov 19 14:36:14 2009 -0800
Sending the SEEK-COMPLETE notification temporarily broke seeking backwards in time behaviour. This is now fixed.
Also, get rid of the semi-random delay after posting buffers to surface flinger in favour of delaying the buffer release until the next frame is displayed.
commit 51973062eb5ee63fd64b845d72bac517cc3369cf
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 18 14:01:43 2009 -0800
Fix one more unit test, properly send seek-complete notification only after seek actually completed.
commit cb22250b34b1fcfe1bf459723a761fd003950229
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 18 12:31:36 2009 -0800
Fix seek-while-paused in AwesomePlayer, revert to using FileSource if MmapSource fails.
commit 25eb9241138ddf7bb27ce90657116c5f8a94d880
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 18 12:30:40 2009 -0800
Support seeking and duration in AMRExtractor, assuming all frames are the same size.
commit 44192f2ebb7ea3bbd3ba5910025692dbc6a08faa
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 18 10:21:44 2009 -0800
MediaPlayerImpl is dead, long live AwesomePlayer.
commit c5b52d3c0674f5dc94db506afbce52401cceddac
Author: Andreas Huber <andih@google.com>
Date: Wed Nov 18 09:42:23 2009 -0800
New implementation of the stagefright mediaplayer.
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/StagefrightMetadataRetriever.cpp | 4 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightPlayer.cpp | 115 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightPlayer.h | 4 |
3 files changed, 40 insertions, 83 deletions
diff --git a/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp b/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp index 7a3aee8..42c1877 100644 --- a/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp +++ b/media/libmediaplayerservice/StagefrightMetadataRetriever.cpp @@ -24,11 +24,11 @@ #include <media/stagefright/CachingDataSource.h> #include <media/stagefright/ColorConverter.h> #include <media/stagefright/DataSource.h> +#include <media/stagefright/FileSource.h> #include <media/stagefright/HTTPDataSource.h> #include <media/stagefright/MediaDebug.h> #include <media/stagefright/MediaExtractor.h> #include <media/stagefright/MetaData.h> -#include <media/stagefright/MmapSource.h> #include <media/stagefright/OMXCodec.h> namespace android { @@ -58,7 +58,7 @@ status_t StagefrightMetadataRetriever::setDataSource( LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); mExtractor = MediaExtractor::Create( - new MmapSource(fd, offset, length)); + new FileSource(fd, offset, length)); return OK; } 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 diff --git a/media/libmediaplayerservice/StagefrightPlayer.h b/media/libmediaplayerservice/StagefrightPlayer.h index f214872..9d005cb 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.h +++ b/media/libmediaplayerservice/StagefrightPlayer.h @@ -22,7 +22,7 @@ namespace android { -class MediaPlayerImpl; +struct AwesomePlayer; class StagefrightPlayer : public MediaPlayerInterface { public: @@ -49,7 +49,7 @@ public: virtual void setAudioSink(const sp<AudioSink> &audioSink); private: - MediaPlayerImpl *mPlayer; + AwesomePlayer *mPlayer; StagefrightPlayer(const StagefrightPlayer &); StagefrightPlayer &operator=(const StagefrightPlayer &); |