diff options
-rw-r--r-- | media/libstagefright/SurfaceMediaSource.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp index 3ba18b6631..d7370551e0 100644 --- a/media/libstagefright/SurfaceMediaSource.cpp +++ b/media/libstagefright/SurfaceMediaSource.cpp @@ -389,9 +389,12 @@ void SurfaceMediaSource::signalBufferReturned(MediaBufferBase *buffer) { Mutex::Autolock lock(mMutex); buffer_handle_t bufferHandle = getMediaBufferHandle(buffer); + ANativeWindowBuffer* curNativeHandle = NULL; for (size_t i = 0; i < mCurrentBuffers.size(); i++) { - if (mCurrentBuffers[i]->handle == bufferHandle) { + curNativeHandle = mCurrentBuffers[i]->getNativeBuffer(); + if ((mCurrentBuffers[i]->handle == bufferHandle) || + ((buffer_handle_t)curNativeHandle == bufferHandle)) { mCurrentBuffers.removeAt(i); foundBuffer = true; break; @@ -407,7 +410,10 @@ void SurfaceMediaSource::signalBufferReturned(MediaBufferBase *buffer) { continue; } - if (bufferHandle == mSlots[id].mGraphicBuffer->handle) { + curNativeHandle = mSlots[id].mGraphicBuffer->getNativeBuffer(); + + if ((bufferHandle == mSlots[id].mGraphicBuffer->handle) || + (bufferHandle == (buffer_handle_t)curNativeHandle)) { ALOGV("Slot %d returned, matches handle = %p", id, mSlots[id].mGraphicBuffer->handle); |