summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2013-08-30 19:22:29 -0700
committerEric Laurent <elaurent@google.com>2013-08-30 19:26:54 -0700
commitb6209a3d4c29bbb88de5a77546f4d545883cc484 (patch)
treed8ba78a8d94ca3c0b205faa98e840303b346349c /media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
parentd656a4be3c3b6bc249b06599c2b02c2863d2c47f (diff)
downloadframeworks_av-b6209a3d4c29bbb88de5a77546f4d545883cc484.zip
frameworks_av-b6209a3d4c29bbb88de5a77546f4d545883cc484.tar.gz
frameworks_av-b6209a3d4c29bbb88de5a77546f4d545883cc484.tar.bz2
Revert "Fix decoder EOS handling"
This reverts commit 9da36a6c8df70a5c8179ac78fab33cfbb5078cb2. Bug: 10571297. Change-Id: I76f20fe34872ea54fce626077462fb86c8c3f02e
Diffstat (limited to 'media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp')
-rw-r--r--media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp73
1 files changed, 34 insertions, 39 deletions
diff --git a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
index a377b23..51bb958 100644
--- a/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
+++ b/media/libstagefright/codecs/vorbis/dec/SoftVorbis.cpp
@@ -54,8 +54,6 @@ SoftVorbis::SoftVorbis(
mAnchorTimeUs(0),
mNumFramesOutput(0),
mNumFramesLeftOnPage(-1),
- mSawInputEos(false),
- mSignalledOutputEos(false),
mOutputPortSettingsChange(NONE) {
initPorts();
CHECK_EQ(initDecoder(), (status_t)OK);
@@ -292,47 +290,48 @@ void SoftVorbis::onQueueFilled(OMX_U32 portIndex) {
return;
}
- while ((!inQueue.empty() || (mSawInputEos && !mSignalledOutputEos)) && !outQueue.empty()) {
- BufferInfo *inInfo = NULL;
- OMX_BUFFERHEADERTYPE *inHeader = NULL;
- if (!inQueue.empty()) {
- inInfo = *inQueue.begin();
- inHeader = inInfo->mHeader;
- }
+ while (!inQueue.empty() && !outQueue.empty()) {
+ BufferInfo *inInfo = *inQueue.begin();
+ OMX_BUFFERHEADERTYPE *inHeader = inInfo->mHeader;
BufferInfo *outInfo = *outQueue.begin();
OMX_BUFFERHEADERTYPE *outHeader = outInfo->mHeader;
- int32_t numPageSamples = 0;
-
- if (inHeader) {
- if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
- mSawInputEos = true;
- }
-
- if (inHeader->nFilledLen || !mSawInputEos) {
- CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples));
- memcpy(&numPageSamples,
- inHeader->pBuffer
- + inHeader->nOffset + inHeader->nFilledLen - 4,
- sizeof(numPageSamples));
+ if (inHeader->nFlags & OMX_BUFFERFLAG_EOS) {
+ inQueue.erase(inQueue.begin());
+ inInfo->mOwnedByUs = false;
+ notifyEmptyBufferDone(inHeader);
- if (inHeader->nOffset == 0) {
- mAnchorTimeUs = inHeader->nTimeStamp;
- mNumFramesOutput = 0;
- }
+ outHeader->nFilledLen = 0;
+ outHeader->nFlags = OMX_BUFFERFLAG_EOS;
- inHeader->nFilledLen -= sizeof(numPageSamples);;
- }
+ outQueue.erase(outQueue.begin());
+ outInfo->mOwnedByUs = false;
+ notifyFillBufferDone(outHeader);
+ return;
}
+ int32_t numPageSamples;
+ CHECK_GE(inHeader->nFilledLen, sizeof(numPageSamples));
+ memcpy(&numPageSamples,
+ inHeader->pBuffer
+ + inHeader->nOffset + inHeader->nFilledLen - 4,
+ sizeof(numPageSamples));
+
if (numPageSamples >= 0) {
mNumFramesLeftOnPage = numPageSamples;
}
+ if (inHeader->nOffset == 0) {
+ mAnchorTimeUs = inHeader->nTimeStamp;
+ mNumFramesOutput = 0;
+ }
+
+ inHeader->nFilledLen -= sizeof(numPageSamples);;
+
ogg_buffer buf;
- buf.data = inHeader ? inHeader->pBuffer + inHeader->nOffset : NULL;
- buf.size = inHeader ? inHeader->nFilledLen : 0;
+ buf.data = inHeader->pBuffer + inHeader->nOffset;
+ buf.size = inHeader->nFilledLen;
buf.refcount = 1;
buf.ptr.owner = NULL;
@@ -385,13 +384,11 @@ void SoftVorbis::onQueueFilled(OMX_U32 portIndex) {
mNumFramesOutput += numFrames;
- if (inHeader) {
- inInfo->mOwnedByUs = false;
- inQueue.erase(inQueue.begin());
- inInfo = NULL;
- notifyEmptyBufferDone(inHeader);
- inHeader = NULL;
- }
+ inInfo->mOwnedByUs = false;
+ inQueue.erase(inQueue.begin());
+ inInfo = NULL;
+ notifyEmptyBufferDone(inHeader);
+ inHeader = NULL;
outInfo->mOwnedByUs = false;
outQueue.erase(outQueue.begin());
@@ -428,8 +425,6 @@ void SoftVorbis::onReset() {
mVi = NULL;
}
- mSawInputEos = false;
- mSignalledOutputEos = false;
mOutputPortSettingsChange = NONE;
}