Loading include/media/IMediaPlayer.h +7 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <utils/KeyedVector.h> #include <system/audio.h> #include <media/IMediaSource.h> // Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is // global, and not in android:: struct sockaddr_in; Loading @@ -38,6 +40,8 @@ struct IMediaHTTPService; struct AudioPlaybackRate; struct AVSyncSettings; typedef IMediaSource::ReadOptions::SeekMode MediaPlayerSeekMode; class IMediaPlayer: public IInterface { public: Loading Loading @@ -65,14 +69,9 @@ public: virtual status_t setSyncSettings(const AVSyncSettings& sync, float videoFpsHint) = 0; virtual status_t getSyncSettings(AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) = 0; // When |precise| is true, it's required that the first rendered media position after seekTo // is precisely at |msec|, up to rounding error of granuality, e.g., video frame interval or // audio length of decoding buffer. In this case, it might take a little long time to finish // seekTo. // When |precise| is false, |msec| is a hint to the mediaplayer which will try its best to // fulfill the request, but it's not guaranteed. This option could result in fast finish of // seekTo. virtual status_t seekTo(int msec, bool precise = false) = 0; virtual status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) = 0; virtual status_t getCurrentPosition(int* msec) = 0; virtual status_t getDuration(int* msec) = 0; virtual status_t reset() = 0; Loading include/media/MediaPlayerInterface.h +2 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,8 @@ public: *videoFps = -1.f; return OK; } virtual status_t seekTo(int msec, bool precise = false) = 0; virtual status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) = 0; virtual status_t getCurrentPosition(int *msec) = 0; virtual status_t getDuration(int *msec) = 0; virtual status_t reset() = 0; Loading include/media/mediaplayer.h +6 −4 Original line number Diff line number Diff line Loading @@ -233,7 +233,9 @@ public: float* videoFps /* nonnull */); status_t getVideoWidth(int *w); status_t getVideoHeight(int *h); status_t seekTo(int msec, bool precise = false); status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC); status_t getCurrentPosition(int *msec); status_t getDuration(int *msec); status_t reset(); Loading @@ -257,7 +259,7 @@ public: private: void clear_l(); status_t seekTo_l(int msec, bool precise); status_t seekTo_l(int msec, MediaPlayerSeekMode mode); status_t prepareAsync_l(); status_t getDuration_l(int *msec); status_t attachNewPlayer(const sp<IMediaPlayer>& player); Loading @@ -274,9 +276,9 @@ private: void* mCookie; media_player_states mCurrentState; int mCurrentPosition; bool mCurrentSeekPrecise; MediaPlayerSeekMode mCurrentSeekMode; int mSeekPosition; int mSeekPrecise; MediaPlayerSeekMode mSeekMode; bool mPrepareSync; status_t mPrepareStatus; audio_stream_type_t mStreamType; Loading media/libmedia/IMediaPlayer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -246,12 +246,12 @@ public: return reply.readInt32(); } status_t seekTo(int msec, bool precise) status_t seekTo(int msec, MediaPlayerSeekMode mode) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); data.writeInt32(msec); data.writeBool(precise); data.writeInt32(mode); remote()->transact(SEEK_TO, data, &reply); return reply.readInt32(); } Loading Loading @@ -575,8 +575,8 @@ status_t BnMediaPlayer::onTransact( case SEEK_TO: { CHECK_INTERFACE(IMediaPlayer, data, reply); int msec = data.readInt32(); bool precise = data.readBool(); reply->writeInt32(seekTo(msec, precise)); MediaPlayerSeekMode mode = (MediaPlayerSeekMode)data.readInt32(); reply->writeInt32(seekTo(msec, mode)); return NO_ERROR; } break; case GET_CURRENT_POSITION: { Loading media/libmedia/mediaplayer.cpp +17 −17 Original line number Diff line number Diff line Loading @@ -55,9 +55,9 @@ MediaPlayer::MediaPlayer() mStreamType = AUDIO_STREAM_MUSIC; mAudioAttributesParcel = NULL; mCurrentPosition = -1; mCurrentSeekPrecise = false; mCurrentSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mSeekPosition = -1; mSeekPrecise = false; mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mCurrentState = MEDIA_PLAYER_IDLE; mPrepareSync = false; mPrepareStatus = NO_ERROR; Loading Loading @@ -102,9 +102,9 @@ void MediaPlayer::disconnect() void MediaPlayer::clear_l() { mCurrentPosition = -1; mCurrentSeekPrecise = false; mCurrentSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mSeekPosition = -1; mSeekPrecise = false; mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mVideoWidth = mVideoHeight = 0; mRetransmitEndpointValid = false; } Loading Loading @@ -512,9 +512,9 @@ status_t MediaPlayer::getDuration(int *msec) return getDuration_l(msec); } status_t MediaPlayer::seekTo_l(int msec, bool precise) status_t MediaPlayer::seekTo_l(int msec, MediaPlayerSeekMode mode) { ALOGV("seekTo (%d, %d)", msec, precise); ALOGV("seekTo (%d, %d)", msec, mode); if ((mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE) ) ) { if ( msec < 0 ) { Loading @@ -541,14 +541,14 @@ status_t MediaPlayer::seekTo_l(int msec, bool precise) // cache duration mCurrentPosition = msec; mCurrentSeekPrecise = precise; mCurrentSeekMode = mode; if (mSeekPosition < 0) { mSeekPosition = msec; mSeekPrecise = precise; return mPlayer->seekTo(msec, precise); mSeekMode = mode; return mPlayer->seekTo(msec, mode); } else { ALOGV("Seek in progress - queue up seekTo[%d, %d]", msec, precise); ALOGV("Seek in progress - queue up seekTo[%d, %d]", msec, mode); return NO_ERROR; } } Loading @@ -557,11 +557,11 @@ status_t MediaPlayer::seekTo_l(int msec, bool precise) return INVALID_OPERATION; } status_t MediaPlayer::seekTo(int msec, bool precise) status_t MediaPlayer::seekTo(int msec, MediaPlayerSeekMode mode) { mLockThreadId = getThreadId(); Mutex::Autolock _l(mLock); status_t result = seekTo_l(msec, precise); status_t result = seekTo_l(msec, mode); mLockThreadId = 0; return result; Loading Loading @@ -875,16 +875,16 @@ void MediaPlayer::notify(int msg, int ext1, int ext2, const Parcel *obj) break; case MEDIA_SEEK_COMPLETE: ALOGV("Received seek complete"); if (mSeekPosition != mCurrentPosition || (!mSeekPrecise && mCurrentSeekPrecise)) { ALOGV("Executing queued seekTo(%d, %d)", mCurrentPosition, mCurrentSeekPrecise); if (mSeekPosition != mCurrentPosition || (mSeekMode != mCurrentSeekMode)) { ALOGV("Executing queued seekTo(%d, %d)", mCurrentPosition, mCurrentSeekMode); mSeekPosition = -1; mSeekPrecise = false; seekTo_l(mCurrentPosition, mCurrentSeekPrecise); mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; seekTo_l(mCurrentPosition, mCurrentSeekMode); } else { ALOGV("All seeks complete - return to regularly scheduled program"); mCurrentPosition = mSeekPosition = -1; mCurrentSeekPrecise = mSeekPrecise = false; mCurrentSeekMode = mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; } break; case MEDIA_BUFFERING_UPDATE: Loading Loading
include/media/IMediaPlayer.h +7 −8 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <utils/KeyedVector.h> #include <system/audio.h> #include <media/IMediaSource.h> // Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is // global, and not in android:: struct sockaddr_in; Loading @@ -38,6 +40,8 @@ struct IMediaHTTPService; struct AudioPlaybackRate; struct AVSyncSettings; typedef IMediaSource::ReadOptions::SeekMode MediaPlayerSeekMode; class IMediaPlayer: public IInterface { public: Loading Loading @@ -65,14 +69,9 @@ public: virtual status_t setSyncSettings(const AVSyncSettings& sync, float videoFpsHint) = 0; virtual status_t getSyncSettings(AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) = 0; // When |precise| is true, it's required that the first rendered media position after seekTo // is precisely at |msec|, up to rounding error of granuality, e.g., video frame interval or // audio length of decoding buffer. In this case, it might take a little long time to finish // seekTo. // When |precise| is false, |msec| is a hint to the mediaplayer which will try its best to // fulfill the request, but it's not guaranteed. This option could result in fast finish of // seekTo. virtual status_t seekTo(int msec, bool precise = false) = 0; virtual status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) = 0; virtual status_t getCurrentPosition(int* msec) = 0; virtual status_t getDuration(int* msec) = 0; virtual status_t reset() = 0; Loading
include/media/MediaPlayerInterface.h +2 −1 Original line number Diff line number Diff line Loading @@ -205,7 +205,8 @@ public: *videoFps = -1.f; return OK; } virtual status_t seekTo(int msec, bool precise = false) = 0; virtual status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) = 0; virtual status_t getCurrentPosition(int *msec) = 0; virtual status_t getDuration(int *msec) = 0; virtual status_t reset() = 0; Loading
include/media/mediaplayer.h +6 −4 Original line number Diff line number Diff line Loading @@ -233,7 +233,9 @@ public: float* videoFps /* nonnull */); status_t getVideoWidth(int *w); status_t getVideoHeight(int *h); status_t seekTo(int msec, bool precise = false); status_t seekTo( int msec, MediaPlayerSeekMode mode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC); status_t getCurrentPosition(int *msec); status_t getDuration(int *msec); status_t reset(); Loading @@ -257,7 +259,7 @@ public: private: void clear_l(); status_t seekTo_l(int msec, bool precise); status_t seekTo_l(int msec, MediaPlayerSeekMode mode); status_t prepareAsync_l(); status_t getDuration_l(int *msec); status_t attachNewPlayer(const sp<IMediaPlayer>& player); Loading @@ -274,9 +276,9 @@ private: void* mCookie; media_player_states mCurrentState; int mCurrentPosition; bool mCurrentSeekPrecise; MediaPlayerSeekMode mCurrentSeekMode; int mSeekPosition; int mSeekPrecise; MediaPlayerSeekMode mSeekMode; bool mPrepareSync; status_t mPrepareStatus; audio_stream_type_t mStreamType; Loading
media/libmedia/IMediaPlayer.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -246,12 +246,12 @@ public: return reply.readInt32(); } status_t seekTo(int msec, bool precise) status_t seekTo(int msec, MediaPlayerSeekMode mode) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); data.writeInt32(msec); data.writeBool(precise); data.writeInt32(mode); remote()->transact(SEEK_TO, data, &reply); return reply.readInt32(); } Loading Loading @@ -575,8 +575,8 @@ status_t BnMediaPlayer::onTransact( case SEEK_TO: { CHECK_INTERFACE(IMediaPlayer, data, reply); int msec = data.readInt32(); bool precise = data.readBool(); reply->writeInt32(seekTo(msec, precise)); MediaPlayerSeekMode mode = (MediaPlayerSeekMode)data.readInt32(); reply->writeInt32(seekTo(msec, mode)); return NO_ERROR; } break; case GET_CURRENT_POSITION: { Loading
media/libmedia/mediaplayer.cpp +17 −17 Original line number Diff line number Diff line Loading @@ -55,9 +55,9 @@ MediaPlayer::MediaPlayer() mStreamType = AUDIO_STREAM_MUSIC; mAudioAttributesParcel = NULL; mCurrentPosition = -1; mCurrentSeekPrecise = false; mCurrentSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mSeekPosition = -1; mSeekPrecise = false; mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mCurrentState = MEDIA_PLAYER_IDLE; mPrepareSync = false; mPrepareStatus = NO_ERROR; Loading Loading @@ -102,9 +102,9 @@ void MediaPlayer::disconnect() void MediaPlayer::clear_l() { mCurrentPosition = -1; mCurrentSeekPrecise = false; mCurrentSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mSeekPosition = -1; mSeekPrecise = false; mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; mVideoWidth = mVideoHeight = 0; mRetransmitEndpointValid = false; } Loading Loading @@ -512,9 +512,9 @@ status_t MediaPlayer::getDuration(int *msec) return getDuration_l(msec); } status_t MediaPlayer::seekTo_l(int msec, bool precise) status_t MediaPlayer::seekTo_l(int msec, MediaPlayerSeekMode mode) { ALOGV("seekTo (%d, %d)", msec, precise); ALOGV("seekTo (%d, %d)", msec, mode); if ((mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER_STARTED | MEDIA_PLAYER_PREPARED | MEDIA_PLAYER_PAUSED | MEDIA_PLAYER_PLAYBACK_COMPLETE) ) ) { if ( msec < 0 ) { Loading @@ -541,14 +541,14 @@ status_t MediaPlayer::seekTo_l(int msec, bool precise) // cache duration mCurrentPosition = msec; mCurrentSeekPrecise = precise; mCurrentSeekMode = mode; if (mSeekPosition < 0) { mSeekPosition = msec; mSeekPrecise = precise; return mPlayer->seekTo(msec, precise); mSeekMode = mode; return mPlayer->seekTo(msec, mode); } else { ALOGV("Seek in progress - queue up seekTo[%d, %d]", msec, precise); ALOGV("Seek in progress - queue up seekTo[%d, %d]", msec, mode); return NO_ERROR; } } Loading @@ -557,11 +557,11 @@ status_t MediaPlayer::seekTo_l(int msec, bool precise) return INVALID_OPERATION; } status_t MediaPlayer::seekTo(int msec, bool precise) status_t MediaPlayer::seekTo(int msec, MediaPlayerSeekMode mode) { mLockThreadId = getThreadId(); Mutex::Autolock _l(mLock); status_t result = seekTo_l(msec, precise); status_t result = seekTo_l(msec, mode); mLockThreadId = 0; return result; Loading Loading @@ -875,16 +875,16 @@ void MediaPlayer::notify(int msg, int ext1, int ext2, const Parcel *obj) break; case MEDIA_SEEK_COMPLETE: ALOGV("Received seek complete"); if (mSeekPosition != mCurrentPosition || (!mSeekPrecise && mCurrentSeekPrecise)) { ALOGV("Executing queued seekTo(%d, %d)", mCurrentPosition, mCurrentSeekPrecise); if (mSeekPosition != mCurrentPosition || (mSeekMode != mCurrentSeekMode)) { ALOGV("Executing queued seekTo(%d, %d)", mCurrentPosition, mCurrentSeekMode); mSeekPosition = -1; mSeekPrecise = false; seekTo_l(mCurrentPosition, mCurrentSeekPrecise); mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; seekTo_l(mCurrentPosition, mCurrentSeekMode); } else { ALOGV("All seeks complete - return to regularly scheduled program"); mCurrentPosition = mSeekPosition = -1; mCurrentSeekPrecise = mSeekPrecise = false; mCurrentSeekMode = mSeekMode = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC; } break; case MEDIA_BUFFERING_UPDATE: Loading