19e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel/* Copyright (c) 2016, The Linux Foundation. All rights reserved. 29e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* 39e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* Redistribution and use in source and binary forms, with or without 49e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* modification, are permitted provided that the following conditions are 59e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* met: 69e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* * Redistributions of source code must retain the above copyright 79e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* notice, this list of conditions and the following disclaimer. 89e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* * Redistributions in binary form must reproduce the above 99e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* copyright notice, this list of conditions and the following 109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* disclaimer in the documentation and/or other materials provided 119e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* with the distribution. 129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* * Neither the name of The Linux Foundation nor the names of its 139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* contributors may be used to endorse or promote products derived 149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* from this software without specific prior written permission. 159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* 169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 199e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 209e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 219e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 229e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 239e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 259e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 269e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel* 289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel*/ 299e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#include "QCameraHAL3PreviewTest.h" 319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#include "QCameraHAL3MainTestContext.h" 329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelnamespace qcamera { 349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern hal3_camera_lib_test *CamObj_handle; 359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint req_sent; 369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern pthread_cond_t mRequestAppCond; 379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint test_case_end; 389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelbool thread_exit; 399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern std::list<uint32_t> PreviewQueue; 409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint preview_buffer_allocated; 419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern pthread_mutex_t TestAppLock, mCaptureRequestLock; 429e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint snapshot_buffer = -1; 439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 459e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3PreviewTest::QCameraHAL3PreviewTest(int camid) : 469e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel QCameraHAL3Test(0), 479e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewHandle(NULL), 489e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mCaptureHandle(NULL), 499e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStream(NULL), 5004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel nobuffer(0), 5154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mCamId(camid), 5204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ir_mode(0), 5304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel svhdr_mode(0) 549e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 559e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 569e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 579e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 589e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::initTest(hal3_camera_lib_test *handle, 599e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testcase, int camid, int w, int h) 609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 619e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int i; 629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel CamObj_handle = handle; thread_exit = 0; test_case_end = 0; 6304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("\n buffer thread created for testcase %d %d and %d ",testcase, w, h); 649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel configurePreviewStream(&(handle->test_obj) , camid, w, h); 659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("\n preview stream configured"); 669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel constructDefaultRequest(&(handle->test_obj), camid); 679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Default stream setting read "); 689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\npipeline_depth is %d", mPipelineDepthPreview); 699e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewHandle = new native_handle_t *[mPipelineDepthPreview]; 709e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel for (i = 0; i < mPipelineDepthPreview; i++) 719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewHandle[i] = new native_handle_t; 729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel for (i = 0, req_sent = 1; i < mPipelineDepthPreview; i++, req_sent++) { 739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel previewAllocateBuffers(width, height, i); 749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel PreviewQueue.push_back(i); 759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD(" Request Number is preview : %d ",mRequest.frame_number); 779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRequest.frame_number = 0; 789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel previewProcessThreadCreate(handle); 799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 819e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::snapshotCaptureRequest(hal3_camera_lib_test *handle, 829e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testcase, int camid, int w, int h) 839e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 8404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Requested Capture Sizes for testcase:%d are :%d X %d",testcase, w, h); 859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel captureRequestRepeat(handle, camid, MENU_START_CAPTURE); 869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_unlock(&mCaptureRequestLock); 879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 899e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::configurePreviewStream(hal3_camera_test_obj_t *my_test_obj, 909e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int camid, int w, int h) 919e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 929e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera3_device_t *device_handle = my_test_obj->device; 939e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStream = new camera3_stream_t; 949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel memset(mPreviewStream, 0, sizeof(camera3_stream_t)); 959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStream = initStream(CAMERA3_STREAM_OUTPUT, camid, w, h, 0, 969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, HAL3_DATASPACE_UNKNOWN); 979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewConfig = configureStream(CAMERA3_STREAM_CONFIGURATION_NORMAL_MODE, 1); 999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewConfig.streams[0] = mPreviewStream; 1009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel device_handle->ops->configure_streams(my_test_obj->device, &(mPreviewConfig)); 1019e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPipelineDepthPreview = mPreviewConfig.streams[0]->max_buffers; 1029e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel preview_buffer_allocated = mPipelineDepthPreview; 1039e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 1049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::constructDefaultRequest( 1069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_test_obj_t *my_test_obj, int camid) 1079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera3_device_t *device_handle = my_test_obj->device; 10904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Camera ID : %d",camid); 1109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mMetaDataPtr[0]= device_handle->ops->construct_default_request_settings(my_test_obj->device, 1119e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel CAMERA3_TEMPLATE_PREVIEW); 1129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mMetaDataPtr[1] = device_handle->ops->construct_default_request_settings(my_test_obj->device, 1139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel CAMERA3_TEMPLATE_STILL_CAPTURE); 1149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 1159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::captureRequestRepeat( 1179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_lib_test *my_hal3test_obj, int camid, int testcase) 1189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1199e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int num1, num2; 12004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel int ir_mode_changed; 12104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel int svhdr_mode_changed; 12204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel int32_t set_svhdr_mode; 12304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel int32_t set_ir_mode; 1249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_test_obj_t *my_test_obj = &(my_hal3test_obj->test_obj); 1259e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera3_device_t *device_handle = my_test_obj->device; 1269e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1279e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (testcase == MENU_START_PREVIEW) { 1289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (PreviewQueue.empty()) { 12904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGE("no preview buffer for CamID : %d", camid); 1309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 1329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (test_case_end == 0) { 1339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD(" Request Number is preview : %d ",mRequest.frame_number); 1349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_lock(&mCaptureRequestLock); 1359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel num2 = PreviewQueue.front(); 1369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel PreviewQueue.pop_front(); 1379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel num1 = mRequest.frame_number; 13804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ir_mode_changed = get_ir_mode(ir_mode); 13904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel svhdr_mode_changed = get_svhdr_mode(svhdr_mode); 14004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting IR mode :%d",ir_mode_changed); 14104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting SVHDR mode :%d",svhdr_mode_changed); 14204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if (num1 < 1) { 1439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).settings = mMetaDataPtr[0]; 1449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 14504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else if(ir_mode_changed == 1) { 14604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel hal3app_preview_settings = mMetaDataPtr[0]; 14704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(ir_mode == 0) { 14804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting IR mode off"); 14904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel set_ir_mode = (int32_t)QCAMERA3_IR_MODE_OFF; 15004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 15104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else { 15204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting IR mode On"); 15304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel set_ir_mode = (int32_t)QCAMERA3_IR_MODE_ON; 15404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 15504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel hal3app_preview_settings.update(QCAMERA3_IR_MODE, &set_ir_mode, 1); 15604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel (mRequest).settings = hal3app_preview_settings.release(); 15704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 15804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else if(svhdr_mode_changed == 1) { 15904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel hal3app_preview_settings = mMetaDataPtr[0]; 16004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(svhdr_mode == 0) { 16104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting HDR mode off"); 16204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel set_svhdr_mode = (int32_t)QCAMERA3_VIDEO_HDR_MODE_OFF; 16304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 16404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else { 16504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("setting HDR mode On"); 16604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel set_svhdr_mode = (int32_t)QCAMERA3_VIDEO_HDR_MODE_ON; 16704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 16804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel hal3app_preview_settings.update(QCAMERA3_VIDEO_HDR_MODE, &set_svhdr_mode, 1); 16904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel (mRequest).settings = hal3app_preview_settings.release(); 17004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 1719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 1729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).settings = NULL; 1739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).input_buffer = NULL; 1759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).num_output_buffers = 1; 1769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStreamBuffs.stream = mPreviewStream; 1779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStreamBuffs.status = 0; 1789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStreamBuffs.buffer = 1799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (const native_handle_t**)&mPreviewHandle[num2]; 1809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStreamBuffs.release_fence = -1; 1819e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewStreamBuffs.acquire_fence = -1; 1829e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).output_buffers = &(mPreviewStreamBuffs); 1839e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Calling HAL3APP repeat capture request %d and %d and free buffer :%d " 1849e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel , num1, num2, PreviewQueue.size()); 1859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel device_handle->ops->process_capture_request(my_test_obj->device, &(mRequest)); 1879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest.frame_number)++; 1889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_unlock(&mCaptureRequestLock); 1899e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1909e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1919e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1929e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 1939e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel snapshot_buffer = mRequest.frame_number; 1949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest).settings = mMetaDataPtr[1]; 1959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshotStreamBuffs = hal3appGetStreamBuffs(mSnapshotStream); 1969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshotStreamBuffs.buffer = (const native_handle_t**)&mCaptureHandle; 1979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRequest = hal3appGetRequestSettings(&mSnapshotStreamBuffs, 1); 1989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Calling snap HAL3APP repeat capture request repeat %d ", snapshot_buffer); 1999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel device_handle->ops->process_capture_request(my_test_obj->device, &(mRequest)); 2009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mRequest.frame_number)++; 2019e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2029e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2039e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::previewTestEnd( 2059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_lib_test *my_hal3test_obj, int camid) 2069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel test_case_end = 1; 2089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_test_obj_t *my_test_obj = &(my_hal3test_obj->test_obj); 2099e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera3_device_t *device_handle = my_test_obj->device; 2109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel device_handle->ops->flush(my_test_obj->device); 21104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("%s Closing Camera %d", __func__, camid); 2129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel ioctl(mPreviewMeminfo.ion_fd, ION_IOC_FREE, &mPreviewMeminfo.ion_handle); 2139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel close(mPreviewMeminfo.ion_fd); 2149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewMeminfo.ion_fd = -1; 2159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("%s Closing thread", __func__); 2169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel thread_exit = 1; 2179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2199e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::previewAllocateBuffers(int width, int height, int num) 2209e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2219e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewHandle[num] = allocateBuffers(width, height, &mPreviewMeminfo); 2229e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2239e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid QCameraHAL3PreviewTest::snapshotAllocateBuffers(int width, int height) 2259e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2269e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mCaptureHandle = allocateBuffers(width, height, &mCaptureMemInfo); 2279e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2299e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelbool QCameraHAL3PreviewTest::previewProcessThreadCreate( 2309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_lib_test *handle) 2319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 23204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(handle == NULL) { 23304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Camera Hanle is NULL"); 23404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 2359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel processThreadCreate(this, MENU_START_PREVIEW); 2369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 1; 2379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 23904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudelint QCameraHAL3PreviewTest::get_ir_mode(int ir_mode) 24004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel{ 24104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel static int prev_irmode; 24204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(ir_mode == prev_irmode) 24304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel return 0; 24404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else { 24504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel prev_irmode = ir_mode; 24604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel return 1; 24704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 24804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel} 24904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel 25004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudelint QCameraHAL3PreviewTest::get_svhdr_mode(int hdr_mode) 25104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel{ 25204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel static int prev_hdrmode; 25304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(hdr_mode == prev_hdrmode) 25404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel return 0; 25504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel else { 25604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel prev_hdrmode = hdr_mode; 25704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel return 1; 25804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 25904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel} 26004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel 2619e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3PreviewTest::~QCameraHAL3PreviewTest() 2629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 267