diff options
author | Jamie Gennis <jgennis@google.com> | 2012-06-13 16:29:51 -0700 |
---|---|---|
committer | Jesse Hall <jessehall@google.com> | 2012-06-21 16:54:43 -0700 |
commit | 1e5b2b3361ddd07259bf4b29820ca4aa5f3a861b (patch) | |
tree | 75bbec756f6a14bdcbd0d8100a2af5ca25d95074 | |
parent | 95e6e6efcac831874b3d08947d1751d8f65503f9 (diff) | |
download | frameworks_av-1e5b2b3361ddd07259bf4b29820ca4aa5f3a861b.zip frameworks_av-1e5b2b3361ddd07259bf4b29820ca4aa5f3a861b.tar.gz frameworks_av-1e5b2b3361ddd07259bf4b29820ca4aa5f3a861b.tar.bz2 |
Update ANativeWindow client code for sync
This change updates all the uses of ANativeWindow to use the new ANW functions
that accept and return Sync HAL fence file descriptors.
Change-Id: Id7db42d8d6380f8b440d88476ce9211c6225fb16
-rwxr-xr-x | libvideoeditor/lvpp/Android.mk | 1 | ||||
-rwxr-xr-x | libvideoeditor/lvpp/NativeWindowRenderer.cpp | 12 | ||||
-rwxr-xr-x | libvideoeditor/lvpp/PreviewRenderer.cpp | 9 | ||||
-rw-r--r-- | media/libstagefright/ACodec.cpp | 28 | ||||
-rw-r--r-- | media/libstagefright/Android.mk | 1 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 2 | ||||
-rwxr-xr-x | media/libstagefright/OMXCodec.cpp | 38 | ||||
-rw-r--r-- | media/libstagefright/colorconversion/SoftwareRenderer.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/tests/Android.mk | 3 | ||||
-rw-r--r-- | media/libstagefright/tests/SurfaceMediaSource_test.cpp | 18 | ||||
-rw-r--r-- | services/camera/libcameraservice/Android.mk | 1 | ||||
-rw-r--r-- | services/camera/libcameraservice/Camera2Device.cpp | 21 | ||||
-rw-r--r-- | services/camera/libcameraservice/CameraHardwareInterface.h | 9 |
13 files changed, 54 insertions, 97 deletions
diff --git a/libvideoeditor/lvpp/Android.mk b/libvideoeditor/lvpp/Android.mk index c018d74..0ed7e6c 100755 --- a/libvideoeditor/lvpp/Android.mk +++ b/libvideoeditor/lvpp/Android.mk @@ -59,6 +59,7 @@ LOCAL_SHARED_LIBRARIES := \ libstagefright \ libstagefright_foundation \ libstagefright_omx \ + libsync \ libui \ libutils \ libvideoeditor_osal \ diff --git a/libvideoeditor/lvpp/NativeWindowRenderer.cpp b/libvideoeditor/lvpp/NativeWindowRenderer.cpp index b2c2675..2e15ff9 100755 --- a/libvideoeditor/lvpp/NativeWindowRenderer.cpp +++ b/libvideoeditor/lvpp/NativeWindowRenderer.cpp @@ -22,9 +22,9 @@ #include <cutils/log.h> #include <gui/SurfaceTexture.h> #include <gui/SurfaceTextureClient.h> -#include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MetaData.h> +#include <media/stagefright/foundation/ADebug.h> #include "VideoEditorTools.h" #define CHECK_EGL_ERROR CHECK(EGL_SUCCESS == eglGetError()) @@ -382,7 +382,7 @@ void NativeWindowRenderer::queueInternalBuffer(ANativeWindow *anw, int64_t timeUs; CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs)); native_window_set_buffers_timestamp(anw, timeUs * 1000); - status_t err = anw->queueBuffer(anw, buffer->graphicBuffer().get()); + status_t err = anw->queueBuffer(anw, buffer->graphicBuffer().get(), -1); if (err != 0) { ALOGE("queueBuffer failed with error %s (%d)", strerror(-err), -err); return; @@ -399,18 +399,16 @@ void NativeWindowRenderer::queueExternalBuffer(ANativeWindow* anw, native_window_set_usage(anw, GRALLOC_USAGE_SW_WRITE_OFTEN); ANativeWindowBuffer* anb; - anw->dequeueBuffer(anw, &anb); + CHECK(NO_ERROR == native_window_dequeue_buffer_and_wait(anw, &anb)); CHECK(anb != NULL); - sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - CHECK(NO_ERROR == anw->lockBuffer(anw, buf->getNativeBuffer())); - // Copy the buffer uint8_t* img = NULL; + sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); buf->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, (void**)(&img)); copyI420Buffer(buffer, img, width, height, buf->getStride()); buf->unlock(); - CHECK(NO_ERROR == anw->queueBuffer(anw, buf->getNativeBuffer())); + CHECK(NO_ERROR == anw->queueBuffer(anw, buf->getNativeBuffer(), -1)); } void NativeWindowRenderer::copyI420Buffer(MediaBuffer* src, uint8_t* dst, diff --git a/libvideoeditor/lvpp/PreviewRenderer.cpp b/libvideoeditor/lvpp/PreviewRenderer.cpp index 4aa4eb3..b1cfc8e 100755 --- a/libvideoeditor/lvpp/PreviewRenderer.cpp +++ b/libvideoeditor/lvpp/PreviewRenderer.cpp @@ -97,13 +97,12 @@ PreviewRenderer::~PreviewRenderer() { void PreviewRenderer::getBufferYV12(uint8_t **data, size_t *stride) { int err = OK; - if ((err = mSurface->ANativeWindow::dequeueBuffer(mSurface.get(), &mBuf)) != 0) { - ALOGW("Surface::dequeueBuffer returned error %d", err); + if ((err = native_window_dequeue_buffer_and_wait(mSurface.get(), + &mBuf)) != 0) { + ALOGW("native_window_dequeue_buffer_and_wait returned error %d", err); return; } - CHECK_EQ(0, mSurface->ANativeWindow::lockBuffer(mSurface.get(), mBuf)); - GraphicBufferMapper &mapper = GraphicBufferMapper::get(); Rect bounds(mWidth, mHeight); @@ -131,7 +130,7 @@ void PreviewRenderer::renderYV12() { if (mBuf!= NULL) { CHECK_EQ(0, mapper.unlock(mBuf->handle)); - if ((err = mSurface->ANativeWindow::queueBuffer(mSurface.get(), mBuf)) != 0) { + if ((err = mSurface->ANativeWindow::queueBuffer(mSurface.get(), mBuf, -1)) != 0) { ALOGW("Surface::queueBuffer returned error %d", err); } } diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index c4743a1..b4894e9 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -595,7 +595,7 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() { // Dequeue buffers and send them to OMX for (OMX_U32 i = 0; i < def.nBufferCountActual; i++) { ANativeWindowBuffer *buf; - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err); break; @@ -653,7 +653,7 @@ status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) { mComponentName.c_str(), info->mBufferID); int err = mNativeWindow->cancelBuffer( - mNativeWindow.get(), info->mGraphicBuffer.get()); + mNativeWindow.get(), info->mGraphicBuffer.get(), -1); CHECK_EQ(err, 0); @@ -664,7 +664,8 @@ status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) { ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() { ANativeWindowBuffer *buf; - if (mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf) != 0) { + int fenceFd = -1; + if (native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf) != 0) { ALOGE("dequeueBuffer failed."); return NULL; } @@ -2188,7 +2189,8 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { // on the screen and then been replaced, so an previous video frames are // guaranteed NOT to be currently displayed. for (int i = 0; i < numBufs + 1; i++) { - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &anb); + int fenceFd = -1; + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &anb); if (err != NO_ERROR) { ALOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2196,13 +2198,6 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { } sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - err = mNativeWindow->lockBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); - if (err != NO_ERROR) { - ALOGE("error pushing blank frames: lockBuffer failed: %s (%d)", - strerror(-err), -err); - goto error; - } // Fill the buffer with the a 1x1 checkerboard pattern ;) uint32_t* img = NULL; @@ -2223,7 +2218,7 @@ status_t ACodec::pushBlankBuffersToNativeWindow() { } err = mNativeWindow->queueBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); + buf->getNativeBuffer(), -1); if (err != NO_ERROR) { ALOGE("error pushing blank frames: queueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2238,7 +2233,7 @@ error: if (err != NO_ERROR) { // Clean up after an error. if (anb != NULL) { - mNativeWindow->cancelBuffer(mNativeWindow.get(), anb); + mNativeWindow->cancelBuffer(mNativeWindow.get(), anb, -1); } native_window_api_disconnect(mNativeWindow.get(), @@ -2751,7 +2746,7 @@ void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) { status_t err; if ((err = mCodec->mNativeWindow->queueBuffer( mCodec->mNativeWindow.get(), - info->mGraphicBuffer.get())) == OK) { + info->mGraphicBuffer.get(), -1)) == OK) { info->mStatus = BufferInfo::OWNED_BY_NATIVE_WINDOW; } else { mCodec->signalError(OMX_ErrorUndefined, err); @@ -3253,11 +3248,6 @@ void ACodec::ExecutingState::submitOutputBuffers() { if (info->mStatus == BufferInfo::OWNED_BY_NATIVE_WINDOW) { continue; } - - status_t err = mCodec->mNativeWindow->lockBuffer( - mCodec->mNativeWindow.get(), - info->mGraphicBuffer.get()); - CHECK_EQ(err, (status_t)OK); } else { CHECK_EQ((int)info->mStatus, (int)BufferInfo::OWNED_BY_US); } diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk index 8a68036..e5b4d75 100644 --- a/media/libstagefright/Android.mk +++ b/media/libstagefright/Android.mk @@ -81,6 +81,7 @@ LOCAL_SHARED_LIBRARIES := \ libssl \ libstagefright_omx \ libstagefright_yuv \ + libsync \ libui \ libutils \ libvorbisidec \ diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 0f346d8..2c68075 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -130,7 +130,7 @@ struct AwesomeNativeWindowRenderer : public AwesomeRenderer { CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs)); native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000); status_t err = mNativeWindow->queueBuffer( - mNativeWindow.get(), buffer->graphicBuffer().get()); + mNativeWindow.get(), buffer->graphicBuffer().get(), -1); if (err != 0) { ALOGE("queueBuffer failed with error %s (%d)", strerror(-err), -err); diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index fde7ebf..1d4ab32 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -1776,7 +1776,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { // Dequeue buffers and send them to OMX for (OMX_U32 i = 0; i < def.nBufferCountActual; i++) { ANativeWindowBuffer* buf; - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { ALOGE("dequeueBuffer failed: %s (%d)", strerror(-err), -err); break; @@ -1832,7 +1832,7 @@ status_t OMXCodec::cancelBufferToNativeWindow(BufferInfo *info) { CHECK_EQ((int)info->mStatus, (int)OWNED_BY_US); CODEC_LOGV("Calling cancelBuffer on buffer %p", info->mBuffer); int err = mNativeWindow->cancelBuffer( - mNativeWindow.get(), info->mMediaBuffer->graphicBuffer().get()); + mNativeWindow.get(), info->mMediaBuffer->graphicBuffer().get(), -1); if (err != 0) { CODEC_LOGE("cancelBuffer failed w/ error 0x%08x", err); @@ -1846,7 +1846,8 @@ status_t OMXCodec::cancelBufferToNativeWindow(BufferInfo *info) { OMXCodec::BufferInfo* OMXCodec::dequeueBufferFromNativeWindow() { // Dequeue the next buffer from the native window. ANativeWindowBuffer* buf; - int err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf); + int fenceFd = -1; + int err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { CODEC_LOGE("dequeueBuffer failed w/ error 0x%08x", err); @@ -1950,7 +1951,8 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { // on the screen and then been replaced, so an previous video frames are // guaranteed NOT to be currently displayed. for (int i = 0; i < numBufs + 1; i++) { - err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &anb); + int fenceFd = -1; + err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &anb); if (err != NO_ERROR) { ALOGE("error pushing blank frames: dequeueBuffer failed: %s (%d)", strerror(-err), -err); @@ -1958,13 +1960,6 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { } sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - err = mNativeWindow->lockBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); - if (err != NO_ERROR) { - ALOGE("error pushing blank frames: lockBuffer failed: %s (%d)", - strerror(-err), -err); - goto error; - } // Fill the buffer with the a 1x1 checkerboard pattern ;) uint32_t* img = NULL; @@ -1985,7 +1980,7 @@ status_t OMXCodec::pushBlankBuffersToNativeWindow() { } err = mNativeWindow->queueBuffer(mNativeWindow.get(), - buf->getNativeBuffer()); + buf->getNativeBuffer(), -1); if (err != NO_ERROR) { ALOGE("error pushing blank frames: queueBuffer failed: %s (%d)", strerror(-err), -err); @@ -2000,7 +1995,7 @@ error: if (err != NO_ERROR) { // Clean up after an error. if (anb != NULL) { - mNativeWindow->cancelBuffer(mNativeWindow.get(), anb); + mNativeWindow->cancelBuffer(mNativeWindow.get(), anb, -1); } native_window_api_disconnect(mNativeWindow.get(), @@ -3199,23 +3194,6 @@ void OMXCodec::fillOutputBuffer(BufferInfo *info) { return; } - if (info->mMediaBuffer != NULL) { - sp<GraphicBuffer> graphicBuffer = info->mMediaBuffer->graphicBuffer(); - if (graphicBuffer != 0) { - // When using a native buffer we need to lock the buffer before - // giving it to OMX. - CODEC_LOGV("Calling lockBuffer on %p", info->mBuffer); - int err = mNativeWindow->lockBuffer(mNativeWindow.get(), - graphicBuffer.get()); - if (err != 0) { - CODEC_LOGE("lockBuffer failed w/ error 0x%08x", err); - - setState(ERROR); - return; - } - } - } - CODEC_LOGV("Calling fillBuffer on buffer %p", info->mBuffer); status_t err = mOMX->fillBuffer(mNode, info->mBuffer); diff --git a/media/libstagefright/colorconversion/SoftwareRenderer.cpp b/media/libstagefright/colorconversion/SoftwareRenderer.cpp index 8673bad..2704a37 100644 --- a/media/libstagefright/colorconversion/SoftwareRenderer.cpp +++ b/media/libstagefright/colorconversion/SoftwareRenderer.cpp @@ -141,13 +141,12 @@ void SoftwareRenderer::render( const void *data, size_t size, void *platformPrivate) { ANativeWindowBuffer *buf; int err; - if ((err = mNativeWindow->dequeueBuffer(mNativeWindow.get(), &buf)) != 0) { + if ((err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), + &buf)) != 0) { ALOGW("Surface::dequeueBuffer returned error %d", err); return; } - CHECK_EQ(0, mNativeWindow->lockBuffer(mNativeWindow.get(), buf)); - GraphicBufferMapper &mapper = GraphicBufferMapper::get(); Rect bounds(mCropWidth, mCropHeight); @@ -231,7 +230,8 @@ void SoftwareRenderer::render( CHECK_EQ(0, mapper.unlock(buf->handle)); - if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf)) != 0) { + if ((err = mNativeWindow->queueBuffer(mNativeWindow.get(), buf, + -1)) != 0) { ALOGW("Surface::queueBuffer returned error %d", err); } buf = NULL; diff --git a/media/libstagefright/tests/Android.mk b/media/libstagefright/tests/Android.mk index a1e6be7..57fff0b 100644 --- a/media/libstagefright/tests/Android.mk +++ b/media/libstagefright/tests/Android.mk @@ -20,9 +20,10 @@ LOCAL_SHARED_LIBRARIES := \ libgui \ libmedia \ libstagefright \ - libstagefright_omx \ libstagefright_foundation \ + libstagefright_omx \ libstlport \ + libsync \ libui \ libutils \ diff --git a/media/libstagefright/tests/SurfaceMediaSource_test.cpp b/media/libstagefright/tests/SurfaceMediaSource_test.cpp index 466f521..cc2aca7 100644 --- a/media/libstagefright/tests/SurfaceMediaSource_test.cpp +++ b/media/libstagefright/tests/SurfaceMediaSource_test.cpp @@ -509,31 +509,31 @@ void SurfaceMediaSourceGLTest::setUpEGLSurfaceFromMediaRecorder(sp<MediaRecorder // cpu YV12 buffer void SurfaceMediaSourceTest::oneBufferPass(int width, int height ) { ANativeWindowBuffer* anb; - ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_EQ(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); ASSERT_TRUE(anb != NULL); - sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - ASSERT_EQ(NO_ERROR, mANW->lockBuffer(mANW.get(), buf->getNativeBuffer())); // Fill the buffer with the a checkerboard pattern uint8_t* img = NULL; + sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); buf->lock(GRALLOC_USAGE_SW_WRITE_OFTEN, (void**)(&img)); SurfaceMediaSourceTest::fillYV12Buffer(img, width, height, buf->getStride()); buf->unlock(); - ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer())); + ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(), + -1)); } // Dequeuing and queuing the buffer without really filling it in. void SurfaceMediaSourceTest::oneBufferPassNoFill(int width, int height ) { ANativeWindowBuffer* anb; - ASSERT_EQ(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_EQ(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); ASSERT_TRUE(anb != NULL); - sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); - // ASSERT_EQ(NO_ERROR, mANW->lockBuffer(mANW.get(), buf->getNativeBuffer())); // We do not fill the buffer in. Just queue it back. - ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer())); + sp<GraphicBuffer> buf(new GraphicBuffer(anb, false)); + ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(), + -1)); } // Fill a YV12 buffer with a multi-colored checkerboard pattern @@ -652,7 +652,7 @@ TEST_F(SurfaceMediaSourceTest, DISABLED_DummyEncodingFromCpuFilledYV12BufferNpot ANativeWindowBuffer* anb; // Note: make sure we get an ERROR back when dequeuing! - ASSERT_NE(NO_ERROR, mANW->dequeueBuffer(mANW.get(), &anb)); + ASSERT_NE(NO_ERROR, native_window_dequeue_buffer_and_wait(mANW.get(), &anb)); } // pass multiple buffers from the native_window the SurfaceMediaSource diff --git a/services/camera/libcameraservice/Android.mk b/services/camera/libcameraservice/Android.mk index 9f713fa..8cccf49 100644 --- a/services/camera/libcameraservice/Android.mk +++ b/services/camera/libcameraservice/Android.mk @@ -22,6 +22,7 @@ LOCAL_SHARED_LIBRARIES:= \ libcamera_client \ libgui \ libhardware \ + libsync \ libcamera_metadata LOCAL_C_INCLUDES += \ diff --git a/services/camera/libcameraservice/Camera2Device.cpp b/services/camera/libcameraservice/Camera2Device.cpp index 5a37c8d..8d07eee 100644 --- a/services/camera/libcameraservice/Camera2Device.cpp +++ b/services/camera/libcameraservice/Camera2Device.cpp @@ -758,7 +758,7 @@ status_t Camera2Device::StreamAdapter::connectToDevice( ANativeWindowBuffer **anwBuffers = new ANativeWindowBuffer*[mTotalBuffers]; uint32_t bufferIdx = 0; for (; bufferIdx < mTotalBuffers; bufferIdx++) { - res = mConsumerInterface->dequeueBuffer(mConsumerInterface.get(), + res = native_window_dequeue_buffer_and_wait(mConsumerInterface.get(), &anwBuffers[bufferIdx]); if (res != OK) { ALOGE("%s: Unable to dequeue buffer %d for initial registration for" @@ -766,15 +766,6 @@ status_t Camera2Device::StreamAdapter::connectToDevice( goto cleanUpBuffers; } - res = mConsumerInterface->lockBuffer(mConsumerInterface.get(), - anwBuffers[bufferIdx]); - if (res != OK) { - ALOGE("%s: Unable to lock buffer %d for initial registration for" - "stream %d", __FUNCTION__, bufferIdx, mId); - bufferIdx++; - goto cleanUpBuffers; - } - buffers[bufferIdx] = anwBuffers[bufferIdx]->handle; } @@ -792,7 +783,7 @@ status_t Camera2Device::StreamAdapter::connectToDevice( cleanUpBuffers: for (uint32_t i = 0; i < bufferIdx; i++) { res = mConsumerInterface->cancelBuffer(mConsumerInterface.get(), - anwBuffers[i]); + anwBuffers[i], -1); if (res != OK) { ALOGE("%s: Unable to cancel buffer %d after registration", __FUNCTION__, i); @@ -878,9 +869,7 @@ int Camera2Device::StreamAdapter::dequeue_buffer(const camera2_stream_ops_t *w, ANativeWindow *a = toANW(w); ANativeWindowBuffer* anb; - res = a->dequeueBuffer(a, &anb); - if (res != OK) return res; - res = a->lockBuffer(a, anb); + res = native_window_dequeue_buffer_and_wait(a, &anb); if (res != OK) return res; *buffer = &(anb->handle); @@ -911,7 +900,7 @@ int Camera2Device::StreamAdapter::enqueue_buffer(const camera2_stream_ops_t* w, return err; } err = a->queueBuffer(a, - container_of(buffer, ANativeWindowBuffer, handle)); + container_of(buffer, ANativeWindowBuffer, handle), -1); if (err != OK) { ALOGE("%s: Error queueing buffer to native window: %s (%d)", __FUNCTION__, strerror(-err), err); @@ -933,7 +922,7 @@ int Camera2Device::StreamAdapter::cancel_buffer(const camera2_stream_ops_t* w, stream->mActiveBuffers--; ANativeWindow *a = toANW(w); return a->cancelBuffer(a, - container_of(buffer, ANativeWindowBuffer, handle)); + container_of(buffer, ANativeWindowBuffer, handle), -1); } int Camera2Device::StreamAdapter::set_crop(const camera2_stream_ops_t* w, diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h index 87a0802..05ac9fa 100644 --- a/services/camera/libcameraservice/CameraHardwareInterface.h +++ b/services/camera/libcameraservice/CameraHardwareInterface.h @@ -569,7 +569,7 @@ private: int rc; ANativeWindow *a = anw(w); ANativeWindowBuffer* anb; - rc = a->dequeueBuffer(a, &anb); + rc = native_window_dequeue_buffer_and_wait(a, &anb); if (!rc) { *buffer = &anb->handle; *stride = anb->stride; @@ -587,8 +587,7 @@ private: buffer_handle_t* buffer) { ANativeWindow *a = anw(w); - return a->lockBuffer(a, - container_of(buffer, ANativeWindowBuffer, handle)); + return 0; } static int __enqueue_buffer(struct preview_stream_ops* w, @@ -596,7 +595,7 @@ private: { ANativeWindow *a = anw(w); return a->queueBuffer(a, - container_of(buffer, ANativeWindowBuffer, handle)); + container_of(buffer, ANativeWindowBuffer, handle), -1); } static int __cancel_buffer(struct preview_stream_ops* w, @@ -604,7 +603,7 @@ private: { ANativeWindow *a = anw(w); return a->cancelBuffer(a, - container_of(buffer, ANativeWindowBuffer, handle)); + container_of(buffer, ANativeWindowBuffer, handle), -1); } static int __set_buffer_count(struct preview_stream_ops* w, int count) |