diff options
Diffstat (limited to 'media/libstagefright/mpeg2ts/ESQueue.cpp')
-rw-r--r-- | media/libstagefright/mpeg2ts/ESQueue.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/media/libstagefright/mpeg2ts/ESQueue.cpp b/media/libstagefright/mpeg2ts/ESQueue.cpp index a279049..55262ff 100644 --- a/media/libstagefright/mpeg2ts/ESQueue.cpp +++ b/media/libstagefright/mpeg2ts/ESQueue.cpp @@ -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() { @@ -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: @@ -1274,4 +1280,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 |