diff options
Diffstat (limited to 'test/CameraHal/camera_test_bufferqueue.h')
-rw-r--r-- | test/CameraHal/camera_test_bufferqueue.h | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/test/CameraHal/camera_test_bufferqueue.h b/test/CameraHal/camera_test_bufferqueue.h index c81b1ee..e0542fa 100644 --- a/test/CameraHal/camera_test_bufferqueue.h +++ b/test/CameraHal/camera_test_bufferqueue.h @@ -60,8 +60,10 @@ public: mFW = new FrameConsumer(); mBufferQueue->setSynchronousMode(true); mBufferQueue->consumerConnect(mFW); + mCamera->setBufferSource(NULL, mBufferQueue); } virtual ~BQ_BufferSourceThread() { + mCamera->releaseBufferSource(NULL, mBufferQueue); } virtual bool threadLoop() { @@ -83,11 +85,12 @@ public: // the first time we acquire it. We are expected to hold a reference to // it there after... mBufferSlots[slot].mGraphicBuffer = item.mGraphicBuffer; + mBufferSlots[slot].mCrop = item.mCrop; } showMetadata(item.mMetadata); printf("\n"); graphic_buffer = mBufferSlots[item.mBuf].mGraphicBuffer; - mDeferThread->add(graphic_buffer, mCounter++, item.mBuf); + mDeferThread->add(graphic_buffer, item.mCrop, mCounter++, item.mBuf); restartCapture(); return true; } @@ -101,8 +104,16 @@ public: mFW->onFrameAvailable(); } - virtual void setBuffer() { - mCamera->setBufferSource(NULL, mBufferQueue); + virtual void setBuffer(android::ShotParameters ¶ms) { + { + String8 id = mBufferQueue->getId(); + + if (!id.isEmpty()) { + params.set(KEY_TAP_OUT_SURFACES, id); + } else { + params.remove(KEY_TAP_OUT_SURFACES); + } + } } virtual void onHandled(sp<GraphicBuffer> &gbuf, unsigned int slot) { @@ -129,19 +140,29 @@ public: #else mBufferQueue = new BufferQueue(true, 1); #endif - } - virtual ~BQ_BufferSourceInput() { - } - - virtual void init() { sp<ISurfaceTexture> surfaceTexture = mBufferQueue; mWindowTapIn = new SurfaceTextureClient(surfaceTexture); + mCamera->setBufferSource(mBufferQueue, NULL); + } + virtual ~BQ_BufferSourceInput() { + mCamera->releaseBufferSource(mBufferQueue, NULL); } - virtual void setInput(buffer_info_t bufinfo, const char *format) { + virtual void setInput(buffer_info_t bufinfo, const char *format, android::ShotParameters ¶ms) { mBufferQueue->setDefaultBufferSize(bufinfo.width, bufinfo.height); - BufferSourceInput::setInput(bufinfo, format); - mCamera->setBufferSource(mBufferQueue, NULL); + // Reset buffer slots, any remaining buffers slots that were + // previously added should get flushed. + mBufferQueue->setBufferCount(android::BufferQueue::NUM_BUFFER_SLOTS); + BufferSourceInput::setInput(bufinfo, format, params); + { + String8 id = mBufferQueue->getId(); + + if (!id.isEmpty()) { + params.set(KEY_TAP_IN_SURFACE, id); + } else { + params.remove(KEY_TAP_IN_SURFACE); + } + } } private: |