StagefrightPlayer.cpp revision bfa6b2d7a1be1832ac40ed90aece1834f720b5c6
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber//#define LOG_NDEBUG 0 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define LOG_TAG "StagefrightPlayer" 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/Log.h> 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include "StagefrightPlayer.h" 6bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 7bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber#include "AwesomePlayer.h" 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberStagefrightPlayer::StagefrightPlayer() 12bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber : mPlayer(new AwesomePlayer) { 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("StagefrightPlayer"); 14bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 15bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber mPlayer->setListener(this); 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberStagefrightPlayer::~StagefrightPlayer() { 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("~StagefrightPlayer"); 2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber reset(); 21bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 22bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber delete mPlayer; 23bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber mPlayer = NULL; 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::initCheck() { 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("initCheck"); 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::setDataSource(const char *url) { 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("setDataSource('%s')", url); 33bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->setDataSource(url); 3420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 36a75e9fb4876139fff4bb836fb0ebd5f80c8b20b3Andreas Huber// Warning: The filedescriptor passed into this method will only be valid until 37a75e9fb4876139fff4bb836fb0ebd5f80c8b20b3Andreas Huber// the method returns, if you want to keep it, dup it! 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::setDataSource(int fd, int64_t offset, int64_t length) { 3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); 40bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->setDataSource(dup(fd), offset, length); 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::setVideoSurface(const sp<ISurface> &surface) { 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("setVideoSurface"); 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mPlayer->setISurface(surface); 4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::prepare() { 5120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("prepare"); 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 53bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber int32_t width, height; 54bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber if (mPlayer->getVideoDimensions(&width, &height) != OK) { 55bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber width = height = 0; 5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 58bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber sendEvent(MEDIA_SET_VIDEO_SIZE, width, height); 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 6120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 6220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::prepareAsync() { 6420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("prepareAsync"); 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t err = prepare(); 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (err != OK) { 6920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return err; 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 7120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber sendEvent(MEDIA_PREPARED); 7320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 7520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 7620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::start() { 7820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("start"); 7920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 80bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->play(); 8120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 8220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::stop() { 8420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("stop"); 8520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 86bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return pause(); // what's the difference? 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 8820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::pause() { 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("pause"); 9120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 92bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->pause(); 9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool StagefrightPlayer::isPlaying() { 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("isPlaying"); 97bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->isPlaying(); 9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::seekTo(int msec) { 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("seekTo"); 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber status_t err = mPlayer->seekTo((int64_t)msec * 1000); 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return err; 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 10720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::getCurrentPosition(int *msec) { 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("getCurrentPosition"); 11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 111bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber int64_t positionUs; 112bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber status_t err = mPlayer->getPosition(&positionUs); 113bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 114bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber if (err != OK) { 115bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return err; 11620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 11720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 118bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber *msec = (positionUs + 500) / 1000; 119bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 12020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 12120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 12220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 12320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::getDuration(int *msec) { 12420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("getDuration"); 12520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 126bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber int64_t durationUs; 127bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber status_t err = mPlayer->getDuration(&durationUs); 128bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 129bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber if (err != OK) { 130bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return err; 13120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 13220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 133bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber *msec = (durationUs + 500) / 1000; 134bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 13520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 13620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 13720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 13820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::reset() { 13920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("reset"); 14020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 141bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber mPlayer->reset(); 14220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return OK; 14420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::setLooping(int loop) { 14720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("setLooping"); 148bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber 149bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber return mPlayer->setLooping(loop); 15020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberplayer_type StagefrightPlayer::playerType() { 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber LOGV("playerType"); 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return STAGEFRIGHT_PLAYER; 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstatus_t StagefrightPlayer::invoke(const Parcel &request, Parcel *reply) { 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return INVALID_OPERATION; 15920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16120111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid StagefrightPlayer::setAudioSink(const sp<AudioSink> &audioSink) { 16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MediaPlayerInterface::setAudioSink(audioSink); 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 164bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber mPlayer->setAudioSink(audioSink); 16520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 16620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 168