Loading media/libstagefright/AwesomePlayer.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ AwesomePlayer::AwesomePlayer() mExtractorFlags(0), mLastVideoBuffer(NULL), mVideoBuffer(NULL), mRTSPTimeOffset(0), mSuspensionState(NULL) { CHECK_EQ(mClient.connect(), OK); Loading Loading @@ -393,7 +394,11 @@ void AwesomePlayer::reset_l() { mVideoBuffer = NULL; } if (mRTSPController != NULL) { mRTSPController->disconnect(); mRTSPController.clear(); } mRTPPusher.clear(); mRTCPPusher.clear(); mRTPSession.clear(); Loading Loading @@ -738,6 +743,10 @@ status_t AwesomePlayer::getPosition(int64_t *positionUs) { *positionUs = 0; } if (mRTSPController != NULL) { *positionUs += mRTSPTimeOffset; } return OK; } Loading @@ -753,6 +762,17 @@ status_t AwesomePlayer::seekTo(int64_t timeUs) { } status_t AwesomePlayer::seekTo_l(int64_t timeUs) { if (mRTSPController != NULL) { pause_l(); mRTSPController->seek(timeUs); play_l(); notifyListener_l(MEDIA_SEEK_COMPLETE); mSeekNotificationSent = true; mRTSPTimeOffset = timeUs; return OK; } if (mFlags & CACHE_UNDERRUN) { mFlags &= ~CACHE_UNDERRUN; play_l(); Loading media/libstagefright/include/ARTSPController.h +2 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ struct ARTSPController : public MediaExtractor { status_t connect(const char *url); void disconnect(); void seek(int64_t timeUs); virtual size_t countTracks(); virtual sp<MediaSource> getTrack(size_t index); Loading media/libstagefright/include/AwesomePlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ private: sp<ALooper> mLooper; sp<ARTSPController> mRTSPController; int64_t mRTSPTimeOffset; sp<ARTPSession> mRTPSession; sp<UDPPusher> mRTPPusher, mRTCPPusher; Loading media/libstagefright/rtsp/APacketSource.cpp +3 −49 Original line number Diff line number Diff line Loading @@ -406,9 +406,7 @@ APacketSource::APacketSource( const sp<ASessionDescription> &sessionDesc, size_t index) : mInitCheck(NO_INIT), mFormat(new MetaData), mEOSResult(OK), mFirstAccessUnit(true), mFirstAccessUnitNTP(0) { mEOSResult(OK) { unsigned long PT; AString desc; AString params; Loading Loading @@ -550,9 +548,6 @@ status_t APacketSource::initCheck() const { } status_t APacketSource::start(MetaData *params) { mFirstAccessUnit = true; mFirstAccessUnitNTP = 0; return OK; } Loading Loading @@ -600,25 +595,6 @@ void APacketSource::queueAccessUnit(const sp<ABuffer> &buffer) { return; } uint64_t ntpTime; CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); if (mFirstAccessUnit) { mFirstAccessUnit = false; mFirstAccessUnitNTP = ntpTime; } if (ntpTime > mFirstAccessUnitNTP) { ntpTime -= mFirstAccessUnitNTP; } else { ntpTime = 0; } int64_t timeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); buffer->meta()->setInt64("timeUs", timeUs); Mutex::Autolock autoLock(mLock); mBuffers.push_back(buffer); mCondition.signal(); Loading @@ -632,31 +608,9 @@ void APacketSource::signalEOS(status_t result) { mCondition.signal(); } int64_t APacketSource::getQueuedDuration(bool *eos) { void APacketSource::flushQueue() { Mutex::Autolock autoLock(mLock); *eos = (mEOSResult != OK); if (mBuffers.empty()) { return 0; } sp<ABuffer> buffer = *mBuffers.begin(); uint64_t ntpTime; CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); int64_t firstTimeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); buffer = *--mBuffers.end(); CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); int64_t lastTimeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); return lastTimeUs - firstTimeUs; mBuffers.clear(); } } // namespace android media/libstagefright/rtsp/APacketSource.h +1 −4 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ struct APacketSource : public MediaSource { void queueAccessUnit(const sp<ABuffer> &buffer); void signalEOS(status_t result); int64_t getQueuedDuration(bool *eos); void flushQueue(); protected: virtual ~APacketSource(); Loading @@ -58,9 +58,6 @@ private: List<sp<ABuffer> > mBuffers; status_t mEOSResult; bool mFirstAccessUnit; uint64_t mFirstAccessUnitNTP; DISALLOW_EVIL_CONSTRUCTORS(APacketSource); }; Loading Loading
media/libstagefright/AwesomePlayer.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ AwesomePlayer::AwesomePlayer() mExtractorFlags(0), mLastVideoBuffer(NULL), mVideoBuffer(NULL), mRTSPTimeOffset(0), mSuspensionState(NULL) { CHECK_EQ(mClient.connect(), OK); Loading Loading @@ -393,7 +394,11 @@ void AwesomePlayer::reset_l() { mVideoBuffer = NULL; } if (mRTSPController != NULL) { mRTSPController->disconnect(); mRTSPController.clear(); } mRTPPusher.clear(); mRTCPPusher.clear(); mRTPSession.clear(); Loading Loading @@ -738,6 +743,10 @@ status_t AwesomePlayer::getPosition(int64_t *positionUs) { *positionUs = 0; } if (mRTSPController != NULL) { *positionUs += mRTSPTimeOffset; } return OK; } Loading @@ -753,6 +762,17 @@ status_t AwesomePlayer::seekTo(int64_t timeUs) { } status_t AwesomePlayer::seekTo_l(int64_t timeUs) { if (mRTSPController != NULL) { pause_l(); mRTSPController->seek(timeUs); play_l(); notifyListener_l(MEDIA_SEEK_COMPLETE); mSeekNotificationSent = true; mRTSPTimeOffset = timeUs; return OK; } if (mFlags & CACHE_UNDERRUN) { mFlags &= ~CACHE_UNDERRUN; play_l(); Loading
media/libstagefright/include/ARTSPController.h +2 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ struct ARTSPController : public MediaExtractor { status_t connect(const char *url); void disconnect(); void seek(int64_t timeUs); virtual size_t countTracks(); virtual sp<MediaSource> getTrack(size_t index); Loading
media/libstagefright/include/AwesomePlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -180,6 +180,7 @@ private: sp<ALooper> mLooper; sp<ARTSPController> mRTSPController; int64_t mRTSPTimeOffset; sp<ARTPSession> mRTPSession; sp<UDPPusher> mRTPPusher, mRTCPPusher; Loading
media/libstagefright/rtsp/APacketSource.cpp +3 −49 Original line number Diff line number Diff line Loading @@ -406,9 +406,7 @@ APacketSource::APacketSource( const sp<ASessionDescription> &sessionDesc, size_t index) : mInitCheck(NO_INIT), mFormat(new MetaData), mEOSResult(OK), mFirstAccessUnit(true), mFirstAccessUnitNTP(0) { mEOSResult(OK) { unsigned long PT; AString desc; AString params; Loading Loading @@ -550,9 +548,6 @@ status_t APacketSource::initCheck() const { } status_t APacketSource::start(MetaData *params) { mFirstAccessUnit = true; mFirstAccessUnitNTP = 0; return OK; } Loading Loading @@ -600,25 +595,6 @@ void APacketSource::queueAccessUnit(const sp<ABuffer> &buffer) { return; } uint64_t ntpTime; CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); if (mFirstAccessUnit) { mFirstAccessUnit = false; mFirstAccessUnitNTP = ntpTime; } if (ntpTime > mFirstAccessUnitNTP) { ntpTime -= mFirstAccessUnitNTP; } else { ntpTime = 0; } int64_t timeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); buffer->meta()->setInt64("timeUs", timeUs); Mutex::Autolock autoLock(mLock); mBuffers.push_back(buffer); mCondition.signal(); Loading @@ -632,31 +608,9 @@ void APacketSource::signalEOS(status_t result) { mCondition.signal(); } int64_t APacketSource::getQueuedDuration(bool *eos) { void APacketSource::flushQueue() { Mutex::Autolock autoLock(mLock); *eos = (mEOSResult != OK); if (mBuffers.empty()) { return 0; } sp<ABuffer> buffer = *mBuffers.begin(); uint64_t ntpTime; CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); int64_t firstTimeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); buffer = *--mBuffers.end(); CHECK(buffer->meta()->findInt64( "ntp-time", (int64_t *)&ntpTime)); int64_t lastTimeUs = (int64_t)(ntpTime * 1E6 / (1ll << 32)); return lastTimeUs - firstTimeUs; mBuffers.clear(); } } // namespace android
media/libstagefright/rtsp/APacketSource.h +1 −4 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ struct APacketSource : public MediaSource { void queueAccessUnit(const sp<ABuffer> &buffer); void signalEOS(status_t result); int64_t getQueuedDuration(bool *eos); void flushQueue(); protected: virtual ~APacketSource(); Loading @@ -58,9 +58,6 @@ private: List<sp<ABuffer> > mBuffers; status_t mEOSResult; bool mFirstAccessUnit; uint64_t mFirstAccessUnitNTP; DISALLOW_EVIL_CONSTRUCTORS(APacketSource); }; Loading