Loading media/libmediaplayerservice/nuplayer/GenericSource.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -272,7 +272,9 @@ void NuPlayer::GenericSource::readBuffer( if (seeking) { track->mPackets->queueDiscontinuity( ATSParser::DISCONTINUITY_SEEK, NULL); ATSParser::DISCONTINUITY_SEEK, NULL, true /* discard */); } track->mPackets->queueAccessUnit(buffer); Loading @@ -280,7 +282,9 @@ void NuPlayer::GenericSource::readBuffer( } else if (err == INFO_FORMAT_CHANGED) { #if 0 track->mPackets->queueDiscontinuity( ATSParser::DISCONTINUITY_FORMATCHANGE, NULL); ATSParser::DISCONTINUITY_FORMATCHANGE, NULL, false /* discard */); #endif } else { track->mPackets->signalEOS(err); Loading media/libmediaplayerservice/nuplayer/RTSPSource.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -505,7 +505,10 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) { TrackInfo *info = &mTracks.editItemAt(trackIndex); sp<AnotherPacketSource> source = info->mSource; if (source != NULL) { source->queueDiscontinuity(ATSParser::DISCONTINUITY_SEEK, NULL); source->queueDiscontinuity( ATSParser::DISCONTINUITY_SEEK, NULL, true /* discard */); } break; Loading media/libstagefright/httplive/PlaylistFetcher.cpp +12 −14 Original line number Diff line number Diff line Loading @@ -588,7 +588,10 @@ void PlaylistFetcher::notifyError(status_t err) { void PlaylistFetcher::queueDiscontinuity( ATSParser::DiscontinuityType type, const sp<AMessage> &extra) { for (size_t i = 0; i < mPacketSources.size(); ++i) { mPacketSources.valueAt(i)->queueDiscontinuity(type, extra); // do not discard buffer upon #EXT-X-DISCONTINUITY tag // (seek will discard buffer by abandoning old fetchers) mPacketSources.valueAt(i)->queueDiscontinuity( type, extra, false /* discard */); } } Loading Loading @@ -723,8 +726,7 @@ void PlaylistFetcher::onDownloadNext() { firstSeqNumberInPlaylist = 0; } bool seekDiscontinuity = false; bool explicitDiscontinuity = false; bool discontinuity = false; const int32_t lastSeqNumberInPlaylist = firstSeqNumberInPlaylist + (int32_t)mPlaylist->size() - 1; Loading Loading @@ -792,7 +794,7 @@ void PlaylistFetcher::onDownloadNext() { if (mSeqNumber < firstSeqNumberInPlaylist) { mSeqNumber = firstSeqNumberInPlaylist; } explicitDiscontinuity = true; discontinuity = true; // fall through } else { Loading @@ -817,7 +819,7 @@ void PlaylistFetcher::onDownloadNext() { int32_t val; if (itemMeta->findInt32("discontinuity", &val) && val != 0) { explicitDiscontinuity = true; discontinuity = true; } int64_t range_offset, range_length; Loading Loading @@ -877,7 +879,7 @@ void PlaylistFetcher::onDownloadNext() { return; } if (mStartup || seekDiscontinuity || explicitDiscontinuity) { if (mStartup || discontinuity) { // Signal discontinuity. if (mPlaylist->isComplete() || mPlaylist->isEvent()) { Loading @@ -887,18 +889,14 @@ void PlaylistFetcher::onDownloadNext() { mNextPTSTimeUs = getSegmentStartTimeUs(mSeqNumber); } if (seekDiscontinuity || explicitDiscontinuity) { ALOGI("queueing discontinuity (seek=%d, explicit=%d)", seekDiscontinuity, explicitDiscontinuity); if (discontinuity) { ALOGI("queueing discontinuity (explicit=%d)", discontinuity); queueDiscontinuity( explicitDiscontinuity ? ATSParser::DISCONTINUITY_FORMATCHANGE : ATSParser::DISCONTINUITY_SEEK, ATSParser::DISCONTINUITY_FORMATCHANGE, NULL /* extra */); seekDiscontinuity = false; explicitDiscontinuity = false; discontinuity = false; } } Loading media/libstagefright/mpeg2ts/ATSParser.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -669,7 +669,7 @@ void ATSParser::Stream::signalDiscontinuity( } if (mSource != NULL) { mSource->queueDiscontinuity(type, extra); mSource->queueDiscontinuity(type, extra, true); } } Loading media/libstagefright/mpeg2ts/AnotherPacketSource.cpp +15 −12 Original line number Diff line number Diff line Loading @@ -217,9 +217,11 @@ void AnotherPacketSource::clear() { void AnotherPacketSource::queueDiscontinuity( ATSParser::DiscontinuityType type, const sp<AMessage> &extra) { const sp<AMessage> &extra, bool discard) { Mutex::Autolock autoLock(mLock); if (discard) { // Leave only discontinuities in the queue. List<sp<ABuffer> >::iterator it = mBuffers.begin(); while (it != mBuffers.end()) { Loading @@ -234,6 +236,7 @@ void AnotherPacketSource::queueDiscontinuity( ++it; } } mEOSResult = OK; mLastQueuedTimeUs = 0; Loading Loading
media/libmediaplayerservice/nuplayer/GenericSource.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -272,7 +272,9 @@ void NuPlayer::GenericSource::readBuffer( if (seeking) { track->mPackets->queueDiscontinuity( ATSParser::DISCONTINUITY_SEEK, NULL); ATSParser::DISCONTINUITY_SEEK, NULL, true /* discard */); } track->mPackets->queueAccessUnit(buffer); Loading @@ -280,7 +282,9 @@ void NuPlayer::GenericSource::readBuffer( } else if (err == INFO_FORMAT_CHANGED) { #if 0 track->mPackets->queueDiscontinuity( ATSParser::DISCONTINUITY_FORMATCHANGE, NULL); ATSParser::DISCONTINUITY_FORMATCHANGE, NULL, false /* discard */); #endif } else { track->mPackets->signalEOS(err); Loading
media/libmediaplayerservice/nuplayer/RTSPSource.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -505,7 +505,10 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) { TrackInfo *info = &mTracks.editItemAt(trackIndex); sp<AnotherPacketSource> source = info->mSource; if (source != NULL) { source->queueDiscontinuity(ATSParser::DISCONTINUITY_SEEK, NULL); source->queueDiscontinuity( ATSParser::DISCONTINUITY_SEEK, NULL, true /* discard */); } break; Loading
media/libstagefright/httplive/PlaylistFetcher.cpp +12 −14 Original line number Diff line number Diff line Loading @@ -588,7 +588,10 @@ void PlaylistFetcher::notifyError(status_t err) { void PlaylistFetcher::queueDiscontinuity( ATSParser::DiscontinuityType type, const sp<AMessage> &extra) { for (size_t i = 0; i < mPacketSources.size(); ++i) { mPacketSources.valueAt(i)->queueDiscontinuity(type, extra); // do not discard buffer upon #EXT-X-DISCONTINUITY tag // (seek will discard buffer by abandoning old fetchers) mPacketSources.valueAt(i)->queueDiscontinuity( type, extra, false /* discard */); } } Loading Loading @@ -723,8 +726,7 @@ void PlaylistFetcher::onDownloadNext() { firstSeqNumberInPlaylist = 0; } bool seekDiscontinuity = false; bool explicitDiscontinuity = false; bool discontinuity = false; const int32_t lastSeqNumberInPlaylist = firstSeqNumberInPlaylist + (int32_t)mPlaylist->size() - 1; Loading Loading @@ -792,7 +794,7 @@ void PlaylistFetcher::onDownloadNext() { if (mSeqNumber < firstSeqNumberInPlaylist) { mSeqNumber = firstSeqNumberInPlaylist; } explicitDiscontinuity = true; discontinuity = true; // fall through } else { Loading @@ -817,7 +819,7 @@ void PlaylistFetcher::onDownloadNext() { int32_t val; if (itemMeta->findInt32("discontinuity", &val) && val != 0) { explicitDiscontinuity = true; discontinuity = true; } int64_t range_offset, range_length; Loading Loading @@ -877,7 +879,7 @@ void PlaylistFetcher::onDownloadNext() { return; } if (mStartup || seekDiscontinuity || explicitDiscontinuity) { if (mStartup || discontinuity) { // Signal discontinuity. if (mPlaylist->isComplete() || mPlaylist->isEvent()) { Loading @@ -887,18 +889,14 @@ void PlaylistFetcher::onDownloadNext() { mNextPTSTimeUs = getSegmentStartTimeUs(mSeqNumber); } if (seekDiscontinuity || explicitDiscontinuity) { ALOGI("queueing discontinuity (seek=%d, explicit=%d)", seekDiscontinuity, explicitDiscontinuity); if (discontinuity) { ALOGI("queueing discontinuity (explicit=%d)", discontinuity); queueDiscontinuity( explicitDiscontinuity ? ATSParser::DISCONTINUITY_FORMATCHANGE : ATSParser::DISCONTINUITY_SEEK, ATSParser::DISCONTINUITY_FORMATCHANGE, NULL /* extra */); seekDiscontinuity = false; explicitDiscontinuity = false; discontinuity = false; } } Loading
media/libstagefright/mpeg2ts/ATSParser.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -669,7 +669,7 @@ void ATSParser::Stream::signalDiscontinuity( } if (mSource != NULL) { mSource->queueDiscontinuity(type, extra); mSource->queueDiscontinuity(type, extra, true); } } Loading
media/libstagefright/mpeg2ts/AnotherPacketSource.cpp +15 −12 Original line number Diff line number Diff line Loading @@ -217,9 +217,11 @@ void AnotherPacketSource::clear() { void AnotherPacketSource::queueDiscontinuity( ATSParser::DiscontinuityType type, const sp<AMessage> &extra) { const sp<AMessage> &extra, bool discard) { Mutex::Autolock autoLock(mLock); if (discard) { // Leave only discontinuities in the queue. List<sp<ABuffer> >::iterator it = mBuffers.begin(); while (it != mBuffers.end()) { Loading @@ -234,6 +236,7 @@ void AnotherPacketSource::queueDiscontinuity( ++it; } } mEOSResult = OK; mLastQueuedTimeUs = 0; Loading