stagefright: Fix buffer handle retrieval in signalBufferReturned
In commit 3e32878 the stagefright code was restructured to fix
the logic for native handle source, but the change in the
function SurfaceMediaSource::signalBufferReturned was probably
missed.
Try to compare the media buffer handle also to the current native
buffer handle in this function when searching for correspondance.
Change-Id: I352293e525f75dde500ac8e71ee49209710030c3
Signed-off-by: DennySPb <dennyspb@gmail.com>
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp
index 3ba18b6..d737055 100644
--- a/media/libstagefright/SurfaceMediaSource.cpp
+++ b/media/libstagefright/SurfaceMediaSource.cpp
@@ -389,9 +389,12 @@
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 @@
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);