From 2de5412b5a9ba7af4d18381e0c9b516e4a06fffe Mon Sep 17 00:00:00 2001 From: Vladimir Petrov Date: Tue, 14 Aug 2012 19:06:24 +0300 Subject: Camera_test: Re-arrange creation of buffer sources - The buffer source adapters should be re-created if changed some parameters. Change-Id: Ifd9e2c406adf8fbab11dcb530b87a8d01e490341 Signed-off-by: Vladimir Petrov --- test/CameraHal/camera_test.h | 2 + test/CameraHal/camera_test_menu.cpp | 69 +++++++++++++++++++++++------------ test/CameraHal/camera_test_script.cpp | 25 +++++++------ 3 files changed, 60 insertions(+), 36 deletions(-) diff --git a/test/CameraHal/camera_test.h b/test/CameraHal/camera_test.h index 6dc1a7c..f5d7faf 100644 --- a/test/CameraHal/camera_test.h +++ b/test/CameraHal/camera_test.h @@ -237,6 +237,8 @@ status_t dump_mem_status(); int openCamera(); int closeCamera(); void createBufferOutputSource(); +void createBufferInputSource(); +void requestBufferSourceReset(); void initDefaults(); void setDefaultExpGainPreset(ShotParameters ¶ms, int idx); void setSingleExpGainPreset(ShotParameters ¶ms, int idx, int exp, int gain); diff --git a/test/CameraHal/camera_test_menu.cpp b/test/CameraHal/camera_test_menu.cpp index c286e74..b5f2293 100644 --- a/test/CameraHal/camera_test_menu.cpp +++ b/test/CameraHal/camera_test_menu.cpp @@ -534,6 +534,10 @@ int algoSharpeningIDX = 1; int algoThreeLinColorMapIDX = 1; int algoGICIDX = 1; +/** Buffer source reset */ +bool bufferSourceInputReset = false; +bool bufferSourceOutputReset = false; + /** Calculate delay from a reference time */ unsigned long long timeval_delay(const timeval *ref) { unsigned long long st, end, delay; @@ -1183,6 +1187,8 @@ int openCamera() { layoutstr = new char[256]; capturelayoutstr = new char[256]; + requestBufferSourceReset(); + printf("openCamera(camera_index=%d)\n", camera_index); camera = Camera::connect(camera_index); @@ -1231,6 +1237,10 @@ int closeCamera() { } void createBufferOutputSource() { + if(bufferSourceOutputThread.get() && bufferSourceOutputReset) { + bufferSourceOutputThread->requestExit(); + bufferSourceOutputThread.clear(); + } if(!bufferSourceOutputThread.get()) { #ifdef ANDROID_API_JB_OR_LATER bufferSourceOutputThread = new BQ_BufferSourceThread(123, camera); @@ -1239,6 +1249,27 @@ void createBufferOutputSource() { #endif bufferSourceOutputThread->run(); } + bufferSourceOutputReset = false; +} + +void createBufferInputSource() { + if (bufferSourceInput.get() && bufferSourceInputReset) { + bufferSourceInput.clear(); + } + if (!bufferSourceInput.get()) { +#ifdef ANDROID_API_JB_OR_LATER + bufferSourceInput = new BQ_BufferSourceInput(1234, camera); +#else + bufferSourceInput = new ST_BufferSourceInput(1234, camera); +#endif + bufferSourceInput->init(); + } + bufferSourceInputReset = false; +} + +void requestBufferSourceReset() { + bufferSourceInputReset = true; + bufferSourceOutputReset = true; } int startPreview() { @@ -1337,14 +1368,7 @@ int startPreview() { const char *format = params.getPictureFormat(); if((NULL != format) && isRawPixelFormat(format)) { createBufferOutputSource(); - if (!bufferSourceInput.get()) { -#ifdef ANDROID_API_JB_OR_LATER - bufferSourceInput = new BQ_BufferSourceInput(1234, camera); -#else - bufferSourceInput = new ST_BufferSourceInput(1234, camera); -#endif - bufferSourceInput->init(); - } + createBufferInputSource(); } return 0; @@ -2021,10 +2045,14 @@ int deleteAllocatedMemory() { delete [] layoutstr; delete [] capturelayoutstr; + // Release buffer sources if any if (bufferSourceOutputThread.get()) { bufferSourceOutputThread->requestExit(); bufferSourceOutputThread.clear(); } + if ( bufferSourceInput.get() ) { + bufferSourceInput.clear(); + } return 0; } @@ -2713,13 +2741,7 @@ int functional_menu() { } else { stopPreview(); } - if (bufferSourceOutputThread.get()) { - bufferSourceOutputThread->requestExit(); - bufferSourceOutputThread.clear(); - } - if ( bufferSourceInput.get() ) { - bufferSourceInput.clear(); - } + break; case '3': @@ -2766,6 +2788,9 @@ int functional_menu() { if ( hardwareActive ) camera->setParameters(params.flatten()); + + requestBufferSourceReset(); + break; case 'l': @@ -3017,6 +3042,8 @@ int functional_menu() { if ( hardwareActive ) camera->setParameters(params.flatten()); + requestBufferSourceReset(); + break; case 'K': @@ -3144,6 +3171,8 @@ int functional_menu() { camera->setParameters(params.flatten()); } + requestBufferSourceReset(); + break; case 'U': @@ -3514,15 +3543,7 @@ int functional_menu() { ShotParameters reprocParams; gettimeofday(&picture_start, 0); - if (!bufferSourceInput.get()) { -#ifdef ANDROID_API_JB_OR_LATER - bufferSourceInput = new BQ_BufferSourceInput(1234, camera); -#else - bufferSourceInput = new ST_BufferSourceInput(1234, camera); -#endif - bufferSourceInput->init(); - } - + createBufferInputSource(); if (bufferSourceOutputThread.get() && bufferSourceOutputThread->hasBuffer()) { diff --git a/test/CameraHal/camera_test_script.cpp b/test/CameraHal/camera_test_script.cpp index 64ced44..4a017bc 100644 --- a/test/CameraHal/camera_test_script.cpp +++ b/test/CameraHal/camera_test_script.cpp @@ -171,6 +171,10 @@ extern int manualConvMax ; extern bool faceDetectToggle; extern unsigned int burstCount; +/** Buffer source reset */ +extern bool bufferSourceInputReset; +extern bool bufferSourceOutputReset; + void trim_script_cmd(char *cmd) { char *nl, *cr; @@ -351,10 +355,6 @@ int execute_functional_script(char *script) { } else { stopPreview(); } - if (bufferSourceOutputThread.get()) { - bufferSourceOutputThread->requestExit(); - bufferSourceOutputThread.clear(); - } break; @@ -436,6 +436,9 @@ int execute_functional_script(char *script) { camera->setParameters(params.flatten()); } } + + requestBufferSourceReset(); + break; case '6': @@ -720,6 +723,8 @@ int execute_functional_script(char *script) { if ( hardwareActive ) camera->setParameters(params.flatten()); + requestBufferSourceReset(); + break; case 'K': @@ -810,6 +815,8 @@ int execute_functional_script(char *script) { camera->setParameters(params.flatten()); } + requestBufferSourceReset(); + break; case 'U': @@ -1252,14 +1259,8 @@ int execute_functional_script(char *script) { ShotParameters reprocParams; gettimeofday(&picture_start, 0); - if (!bufferSourceInput.get()) { -#ifdef ANDROID_API_JB_OR_LATER - bufferSourceInput = new BQ_BufferSourceInput(1234, camera); -#else - bufferSourceInput = new ST_BufferSourceInput(1234, camera); -#endif - bufferSourceInput->init(); - } + + createBufferInputSource(); if (bufferSourceOutputThread.get() && bufferSourceOutputThread->hasBuffer()) -- cgit v1.2.3