diff options
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/httplive/LiveSession.cpp | 20 | ||||
-rw-r--r-- | media/libstagefright/mpeg2ts/ATSParser.cpp | 1 | ||||
-rw-r--r-- | media/libstagefright/mpeg2ts/AnotherPacketSource.cpp | 19 | ||||
-rw-r--r-- | media/libstagefright/mpeg2ts/AnotherPacketSource.h | 2 |
4 files changed, 30 insertions, 12 deletions
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp index 51ab7a1..6fd0171 100644 --- a/media/libstagefright/httplive/LiveSession.cpp +++ b/media/libstagefright/httplive/LiveSession.cpp @@ -385,6 +385,7 @@ void LiveSession::onDownloadNext() { } bool explicitDiscontinuity = false; + bool bandwidthChanged = false; if (mSeekTimeUs >= 0) { int32_t targetDuration; @@ -404,7 +405,14 @@ void LiveSession::onDownloadNext() { mDataSource->reset(); + // reseting the data source will have had the + // side effect of discarding any previously queued + // bandwidth change discontinuity. + // Therefore we'll need to treat these explicit + // discontinuities as involving a bandwidth change + // even if they aren't directly. explicitDiscontinuity = true; + bandwidthChanged = true; } } } @@ -484,9 +492,15 @@ void LiveSession::onDownloadNext() { return; } - bool bandwidthChanged = - mPrevBandwidthIndex >= 0 - && (size_t)mPrevBandwidthIndex != bandwidthIndex; + if ((size_t)mPrevBandwidthIndex != bandwidthIndex) { + bandwidthChanged = true; + } + + if (mPrevBandwidthIndex < 0) { + // Don't signal a bandwidth change at the very beginning of + // playback. + bandwidthChanged = false; + } if (explicitDiscontinuity || bandwidthChanged) { // Signal discontinuity. diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp index 84a3860..d8ab080 100644 --- a/media/libstagefright/mpeg2ts/ATSParser.cpp +++ b/media/libstagefright/mpeg2ts/ATSParser.cpp @@ -351,7 +351,6 @@ void ATSParser::Stream::signalDiscontinuity(DiscontinuityType type) { mQueue.clear(!isASeek); if (mSource != NULL) { - mSource->clear(); mSource->queueDiscontinuity(type); } break; diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp index c6edf0a..0ad883b 100644 --- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp +++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp @@ -142,16 +142,23 @@ void AnotherPacketSource::queueDiscontinuity( Mutex::Autolock autoLock(mLock); +#if 0 + if (type == ATSParser::DISCONTINUITY_SEEK + || type == ATSParser::DISCONTINUITY_FORMATCHANGE) { + // XXX Fix this: This will also clear any pending discontinuities, + // If there's a pending DISCONTINUITY_FORMATCHANGE and the new + // discontinuity is "just" a DISCONTINUITY_SEEK, this will effectively + // downgrade the type of discontinuity received by the client. + + mBuffers.clear(); + mEOSResult = OK; + } +#endif + mBuffers.push_back(buffer); mCondition.signal(); } -void AnotherPacketSource::clear() { - Mutex::Autolock autoLock(mLock); - mBuffers.clear(); - mEOSResult = OK; -} - void AnotherPacketSource::signalEOS(status_t result) { CHECK(result != OK); diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.h b/media/libstagefright/mpeg2ts/AnotherPacketSource.h index c20fca3..6fe93f8 100644 --- a/media/libstagefright/mpeg2ts/AnotherPacketSource.h +++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.h @@ -49,8 +49,6 @@ struct AnotherPacketSource : public MediaSource { void queueDiscontinuity(ATSParser::DiscontinuityType type); void signalEOS(status_t result); - void clear(); - status_t dequeueAccessUnit(sp<ABuffer> *buffer); protected: |