Loading media/libstagefright/omx/GraphicBufferSource.cpp +29 −13 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ bool GraphicBufferSource::fillCodecBuffer_l() { // to be handled and [pause, 1us], [resume 2us] will be discarded. bool dropped = false; bool done = false; bool seeStopAction = false; if (!mActionQueue.empty()) { // First scan to check if bufferTimestamp is smaller than first action's timestamp. ActionItem nextAction = *(mActionQueue.begin()); Loading Loading @@ -431,7 +432,7 @@ bool GraphicBufferSource::fillCodecBuffer_l() { dropped = true; // Clear the whole ActionQueue as recording is done mActionQueue.clear(); submitEndOfInputStream_l(); seeStopAction = true; break; } default: Loading @@ -443,6 +444,14 @@ bool GraphicBufferSource::fillCodecBuffer_l() { if (dropped) { releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); if (seeStopAction) { // Clear all the buffers before setting mEndOfStream and signal EndOfInputStream. if (!releaseAllBuffers()) { ALOGW("Failed to release all the buffers when handling STOP action"); } mEndOfStream = true; submitEndOfInputStream_l(); } return true; } Loading Loading @@ -922,18 +931,8 @@ status_t GraphicBufferSource::setSuspend(bool suspend, int64_t suspendStartTimeU if (suspend) { mSuspended = true; while (mNumFramesAvailable > 0) { BufferItem item; status_t err = acquireBuffer(&item); if (err != OK) { ALOGE("setSuspend: acquireBuffer returned err=%d", err); break; } --mNumFramesAvailable; releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); if (!releaseAllBuffers()) { ALOGW("Failed to release all the buffers during suspend"); } return OK; } else { Loading @@ -954,6 +953,23 @@ status_t GraphicBufferSource::setSuspend(bool suspend, int64_t suspendStartTimeU return OK; } bool GraphicBufferSource::releaseAllBuffers() { while (mNumFramesAvailable > 0) { BufferItem item; status_t err = acquireBuffer(&item); if (err != OK) { ALOGE("releaseAllBuffers: acquireBuffer fail returned err=%d", err); return false;; } --mNumFramesAvailable; releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); } return true; } status_t GraphicBufferSource::setRepeatPreviousFrameDelayUs(int64_t repeatAfterUs) { ALOGV("setRepeatPreviousFrameDelayUs: delayUs=%lld", (long long)repeatAfterUs); Loading media/libstagefright/omx/GraphicBufferSource.h +2 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,8 @@ private: // Acquire buffer from the consumer status_t acquireBuffer(BufferItem *bi); bool releaseAllBuffers(); // Release buffer to the consumer void releaseBuffer(int id, uint64_t frameNum, const sp<Fence> &fence); Loading Loading
media/libstagefright/omx/GraphicBufferSource.cpp +29 −13 Original line number Diff line number Diff line Loading @@ -384,6 +384,7 @@ bool GraphicBufferSource::fillCodecBuffer_l() { // to be handled and [pause, 1us], [resume 2us] will be discarded. bool dropped = false; bool done = false; bool seeStopAction = false; if (!mActionQueue.empty()) { // First scan to check if bufferTimestamp is smaller than first action's timestamp. ActionItem nextAction = *(mActionQueue.begin()); Loading Loading @@ -431,7 +432,7 @@ bool GraphicBufferSource::fillCodecBuffer_l() { dropped = true; // Clear the whole ActionQueue as recording is done mActionQueue.clear(); submitEndOfInputStream_l(); seeStopAction = true; break; } default: Loading @@ -443,6 +444,14 @@ bool GraphicBufferSource::fillCodecBuffer_l() { if (dropped) { releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); if (seeStopAction) { // Clear all the buffers before setting mEndOfStream and signal EndOfInputStream. if (!releaseAllBuffers()) { ALOGW("Failed to release all the buffers when handling STOP action"); } mEndOfStream = true; submitEndOfInputStream_l(); } return true; } Loading Loading @@ -922,18 +931,8 @@ status_t GraphicBufferSource::setSuspend(bool suspend, int64_t suspendStartTimeU if (suspend) { mSuspended = true; while (mNumFramesAvailable > 0) { BufferItem item; status_t err = acquireBuffer(&item); if (err != OK) { ALOGE("setSuspend: acquireBuffer returned err=%d", err); break; } --mNumFramesAvailable; releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); if (!releaseAllBuffers()) { ALOGW("Failed to release all the buffers during suspend"); } return OK; } else { Loading @@ -954,6 +953,23 @@ status_t GraphicBufferSource::setSuspend(bool suspend, int64_t suspendStartTimeU return OK; } bool GraphicBufferSource::releaseAllBuffers() { while (mNumFramesAvailable > 0) { BufferItem item; status_t err = acquireBuffer(&item); if (err != OK) { ALOGE("releaseAllBuffers: acquireBuffer fail returned err=%d", err); return false;; } --mNumFramesAvailable; releaseBuffer(item.mSlot, item.mFrameNumber, item.mFence); } return true; } status_t GraphicBufferSource::setRepeatPreviousFrameDelayUs(int64_t repeatAfterUs) { ALOGV("setRepeatPreviousFrameDelayUs: delayUs=%lld", (long long)repeatAfterUs); Loading
media/libstagefright/omx/GraphicBufferSource.h +2 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,8 @@ private: // Acquire buffer from the consumer status_t acquireBuffer(BufferItem *bi); bool releaseAllBuffers(); // Release buffer to the consumer void releaseBuffer(int id, uint64_t frameNum, const sp<Fence> &fence); Loading