Loading media/libstagefright/mpeg2ts/ATSParser.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ private: sp<ABuffer> mBuffer; sp<AnotherPacketSource> mSource; bool mPayloadStarted; bool mEOSReached; uint64_t mPrevPTS; Loading Loading @@ -493,6 +494,7 @@ ATSParser::Stream::Stream( mPCR_PID(PCR_PID), mExpectedContinuityCounter(-1), mPayloadStarted(false), mEOSReached(false), mPrevPTS(0), mQueue(NULL) { switch (mStreamType) { Loading Loading @@ -692,6 +694,8 @@ void ATSParser::Stream::signalEOS(status_t finalResult) { if (mSource != NULL) { mSource->signalEOS(finalResult); } mEOSReached = true; flush(); } status_t ATSParser::Stream::parsePES(ABitReader *br) { Loading Loading @@ -902,6 +906,10 @@ void ATSParser::Stream::onPayloadData( status_t err = mQueue->appendData(data, size, timeUs); if (mEOSReached) { mQueue->signalEOS(); } if (err != OK) { return; } Loading media/libstagefright/mpeg2ts/ESQueue.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ namespace android { ElementaryStreamQueue::ElementaryStreamQueue(Mode mode, uint32_t flags) : mMode(mode), mFlags(flags) { mFlags(flags), mEOSReached(false) { } sp<MetaData> ElementaryStreamQueue::getFormat() { Loading Loading @@ -244,6 +245,11 @@ static bool IsSeeminglyValidMPEGAudioHeader(const uint8_t *ptr, size_t size) { status_t ElementaryStreamQueue::appendData( const void *data, size_t size, int64_t timeUs) { if (mEOSReached) { ALOGE("appending data after EOS"); return ERROR_MALFORMED; } if (mBuffer == NULL || mBuffer->size() == 0) { switch (mMode) { case H264: Loading Loading @@ -1282,4 +1288,17 @@ sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEG4Video() { return NULL; } void ElementaryStreamQueue::signalEOS() { if (!mEOSReached) { if (mMode == MPEG_VIDEO) { const char *theEnd = "\x00\x00\x01\x00"; appendData(theEnd, 4, 0); } mEOSReached = true; } else { ALOGW("EOS already signaled"); } } } // namespace android media/libstagefright/mpeg2ts/ESQueue.h +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ struct ElementaryStreamQueue { ElementaryStreamQueue(Mode mode, uint32_t flags = 0); status_t appendData(const void *data, size_t size, int64_t timeUs); void signalEOS(); void clear(bool clearFormat); sp<ABuffer> dequeueAccessUnit(); Loading @@ -60,6 +61,7 @@ private: Mode mMode; uint32_t mFlags; bool mEOSReached; sp<ABuffer> mBuffer; List<RangeInfo> mRangeInfos; Loading media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,9 @@ status_t MPEG2TSExtractor::feedMore() { ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize); if (n < (ssize_t)kTSPacketSize) { if (n >= 0) { mParser->signalEOS(ERROR_END_OF_STREAM); } return (n < 0) ? (status_t)n : ERROR_END_OF_STREAM; } Loading Loading
media/libstagefright/mpeg2ts/ATSParser.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -136,6 +136,7 @@ private: sp<ABuffer> mBuffer; sp<AnotherPacketSource> mSource; bool mPayloadStarted; bool mEOSReached; uint64_t mPrevPTS; Loading Loading @@ -493,6 +494,7 @@ ATSParser::Stream::Stream( mPCR_PID(PCR_PID), mExpectedContinuityCounter(-1), mPayloadStarted(false), mEOSReached(false), mPrevPTS(0), mQueue(NULL) { switch (mStreamType) { Loading Loading @@ -692,6 +694,8 @@ void ATSParser::Stream::signalEOS(status_t finalResult) { if (mSource != NULL) { mSource->signalEOS(finalResult); } mEOSReached = true; flush(); } status_t ATSParser::Stream::parsePES(ABitReader *br) { Loading Loading @@ -902,6 +906,10 @@ void ATSParser::Stream::onPayloadData( status_t err = mQueue->appendData(data, size, timeUs); if (mEOSReached) { mQueue->signalEOS(); } if (err != OK) { return; } Loading
media/libstagefright/mpeg2ts/ESQueue.cpp +20 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ namespace android { ElementaryStreamQueue::ElementaryStreamQueue(Mode mode, uint32_t flags) : mMode(mode), mFlags(flags) { mFlags(flags), mEOSReached(false) { } sp<MetaData> ElementaryStreamQueue::getFormat() { Loading Loading @@ -244,6 +245,11 @@ static bool IsSeeminglyValidMPEGAudioHeader(const uint8_t *ptr, size_t size) { status_t ElementaryStreamQueue::appendData( const void *data, size_t size, int64_t timeUs) { if (mEOSReached) { ALOGE("appending data after EOS"); return ERROR_MALFORMED; } if (mBuffer == NULL || mBuffer->size() == 0) { switch (mMode) { case H264: Loading Loading @@ -1282,4 +1288,17 @@ sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEG4Video() { return NULL; } void ElementaryStreamQueue::signalEOS() { if (!mEOSReached) { if (mMode == MPEG_VIDEO) { const char *theEnd = "\x00\x00\x01\x00"; appendData(theEnd, 4, 0); } mEOSReached = true; } else { ALOGW("EOS already signaled"); } } } // namespace android
media/libstagefright/mpeg2ts/ESQueue.h +2 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ struct ElementaryStreamQueue { ElementaryStreamQueue(Mode mode, uint32_t flags = 0); status_t appendData(const void *data, size_t size, int64_t timeUs); void signalEOS(); void clear(bool clearFormat); sp<ABuffer> dequeueAccessUnit(); Loading @@ -60,6 +61,7 @@ private: Mode mMode; uint32_t mFlags; bool mEOSReached; sp<ABuffer> mBuffer; List<RangeInfo> mRangeInfos; Loading
media/libstagefright/mpeg2ts/MPEG2TSExtractor.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,9 @@ status_t MPEG2TSExtractor::feedMore() { ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize); if (n < (ssize_t)kTSPacketSize) { if (n >= 0) { mParser->signalEOS(ERROR_END_OF_STREAM); } return (n < 0) ? (status_t)n : ERROR_END_OF_STREAM; } Loading