summaryrefslogtreecommitdiffstats
path: root/test/CameraHal/camera_test_bufferqueue.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/CameraHal/camera_test_bufferqueue.h')
-rw-r--r--test/CameraHal/camera_test_bufferqueue.h43
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 &params) {
+ {
+ 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 &params) {
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: