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 "QCameraHAL3MainTestContext.h" 319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#include "QCameraHAL3SnapshotTest.h" 329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#include "QCameraHAL3RawSnapshotTest.h" 339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#include "QCameraHAL3PreviewTest.h" 349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#ifdef QCAMERA_HAL3_SUPPORT 369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define LIB_PATH /usr/lib/hw/camera.msm8953.so 379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#else 389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define LIB_PATH /system/lib/hw/camera.msm8953.so 399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#endif 409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern "C" { 429e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern int set_camera_metadata_vendor_ops(const vendor_tag_ops_t *query_ops); 439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 459e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel/*#ifdef CAMERA_CHIPSET_8953 469e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define CHIPSET_LIB lib/hw/camera.msm8953.so 479e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#else 489e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define CHIPSET_LIB lib/hw/camera.msm8937.so 499e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#endif*/ 509e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 519e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define CAM_LIB(s) STR_LIB_PATH(s) 529e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel#define STR_LIB_PATH(s) #s 539e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 549e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelnamespace qcamera { 559e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 569e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3PreviewTest *mPreviewtestCase = NULL; 579e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3VideoTest *mVideotestCase = NULL; 589e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3SnapshotTest *mSnapshottestCase = NULL; 599e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelQCameraHAL3RawSnapshotTest *mRawSnapshottestCase = NULL; 609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 619e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstruct timeval start_time; 629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint capture_received; 639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint pfd[2]; 649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern int test_case_end; 659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelextern int snapshot_buffer; 669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelpthread_cond_t mRequestAppCond; 689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstd::list<uint32_t> PreviewQueue; 699e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstd::list<uint32_t> VideoQueue; 709e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelpthread_mutex_t TestAppLock = PTHREAD_MUTEX_INITIALIZER; 729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelpthread_mutex_t mCaptureRequestLock = PTHREAD_MUTEX_INITIALIZER; 739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstatic void camera_device_status_change( 779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const struct camera_module_callbacks* callbacks, 789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int camera_id, int new_status) 799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel /* Stub function */ 8104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if (callbacks == NULL) { 8204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Parameters are NULL %d %d", camera_id, new_status); 8304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 849e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstatic void torch_mode_status_change( 879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const struct camera_module_callbacks* callbacks, 889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const char* camera_id, int new_status) 899e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 909e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel /* Stub function */ 9104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if((callbacks == NULL) || (camera_id == NULL)) { 9204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Parameters are NULL %d", new_status); 9304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstatic void Notify( 979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const camera3_callback_ops *cb, 989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const camera3_notify_msg *msg) 999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel /* Stub function */ 10104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if((cb == NULL) || (msg == NULL)) { 10204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("Parameters are NULL "); 10304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 1049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 1059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelstatic void ProcessCaptureResult( 1079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const camera3_callback_ops *cb, 1089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel const camera3_capture_result *result) 1099e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel buffer_thread_msg_t msg; 1119e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern CameraHAL3Base *mCamHal3Base; 1129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int frame_num; 1139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int req_sent; 1149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int preview_buffer_allocated; 1159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int video_buffer_allocated; 1169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int num; 11704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(cb == NULL) { 11804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGD("callback returned is NULL"); 11904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 1209e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Cam Capture Result Callback %d and %d", 1219e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->num_output_buffers, mCamHal3Base->mFrameCount); 1229e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mCamHal3Base->mTestCaseSelected == MENU_START_PREVIEW || 1239e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mCamHal3Base->mTestCaseSelected == MENU_START_VIDEO) { 1249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (result->num_output_buffers == 1) { 1259e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel frame_num = result->frame_number; 1269e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Frame width:%d and height:%d and format:%d", 1279e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->output_buffers->stream->width, 1289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->output_buffers->stream->height, 1299e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->output_buffers->stream->format); 1309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mCamHal3Base->mFrameCount)++; 1319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("Preview/Video Capture Result %d and fcount: %d and req_Sent:%d and %d ", 1329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->num_output_buffers, mCamHal3Base->mFrameCount, req_sent, result->frame_number); 1339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (test_case_end == 0) { 1349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mCamHal3Base->mTestCaseSelected == MENU_START_PREVIEW) { 1359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel num = (result->frame_number)%preview_buffer_allocated; 1369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel PreviewQueue.push_back(num); 1379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 1399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel num = (result->frame_number)%video_buffer_allocated; 1409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel VideoQueue.push_back(num); 1419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1429e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_cond_signal(&mRequestAppCond); 1439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel memset(&msg, 0, sizeof(buffer_thread_msg_t)); 1449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1459e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1469e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1479e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 1489e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int fcount_captured; 1499e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (result->num_output_buffers == 1) { 1509e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("snapshot/Raw Capture1 Result Callback %d and %d", 1519e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel result->num_output_buffers, fcount_captured); 1529e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (mCamHal3Base->mFrameCount)++; 1539e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel fcount_captured++; 1549e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGD("\n Capture %d done preparing for capture ", fcount_captured); 1559e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel memset(&msg, 0, sizeof(buffer_thread_msg_t)); 1569e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel write(pfd[1], &msg, sizeof(buffer_thread_msg_t)); 1579e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1589e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1599e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 1609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1619e74aae7331f3227542b3e646a0dd658d3467a31Thierry StrudelCameraHAL3Base::CameraHAL3Base(int cameraIndex) : 1629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mCameraIndex(cameraIndex), 1639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mLibHandle(NULL), 1649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mFrameCount(0), 1659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSecElapsed(1), 1669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mTestCaseSelected(0), 1679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewRunning(0), 1689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideoRunning(0), 16954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mSnapShotRunning(0), 17054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel binning_mode(0) 1719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 1749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCameraTestLoad() 1779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 1789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int rc = HAL3_CAM_OK; 1799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int numCam; 1809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int32_t res = 0; 1819e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_test_obj_t *my_test_obj; 1829e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mLibHandle = new hal3_camera_lib_test; 1839e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel memset(mLibHandle, 0, sizeof(hal3_camera_lib_handle)); 1849e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel rc = hal3appTestLoad(&mLibHandle->app_obj); 1859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera_module_t *my_if_handle = mLibHandle->app_obj.hal3_lib.halModule_t; 1869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (HAL3_CAM_OK != rc) { 1879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGE("hal3 err\n"); 1889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel goto EXIT; 1899e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 1909e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1919e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel numCam = my_if_handle->get_number_of_cameras(); 1929e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n Number of Cameras are : %d ", numCam); 1939e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (my_if_handle->get_vendor_tag_ops) { 1949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mLibHandle->app_obj.mVendorTagOps = vendor_tag_ops_t(); 1959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_if_handle->get_vendor_tag_ops(&(mLibHandle->app_obj.mVendorTagOps)); 1969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 1979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel res = set_camera_metadata_vendor_ops(&(mLibHandle->app_obj.mVendorTagOps)); 1989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (0 != res) { 1999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("%s: Could not set vendor tag descriptor, " 2009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel "received error %s (%d). \n", __func__, 2019e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel strerror(-res), res); 2029e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel goto EXIT; 2039e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_test_obj = &(mLibHandle->test_obj); 2069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_test_obj->module_cb.torch_mode_status_change = &torch_mode_status_change; 2079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_test_obj->module_cb.camera_device_status_change = &camera_device_status_change; 2089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_if_handle->set_callbacks(&(my_test_obj->module_cb)); 2099e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_if_handle->get_camera_info(0, &(mLibHandle->test_obj.cam_info)); 21004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel camcap_info = mLibHandle->test_obj.cam_info; 21104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel hal3app_cam_settings = (camcap_info.static_camera_characteristics); 21204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel display_capability(); 2139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return numCam; 2149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel EXIT: 2159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return rc; 2169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 21904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudelvoid CameraHAL3Base::display_capability() 22004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel{ 22104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("Camera Here"); 22254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int i; 22354dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel int *available_ir_modes = NULL; 22404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(hal3app_cam_settings.exists(QCAMERA3_IR_AVAILABLE_MODES)) { 22504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("\n mrad check1 "); 22604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel entry_hal3app = hal3app_cam_settings.find(QCAMERA3_IR_AVAILABLE_MODES); 22704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel available_ir_modes = (int *) malloc((entry_hal3app.count)*sizeof(int )); 22804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel for(i =0;i < (int)entry_hal3app.count; i++){ 22904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel available_ir_modes[i] = entry_hal3app.data.i32[i]; 23004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("\n mrad cap %d ", available_ir_modes[i]); 23104e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel 23204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 23304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 23404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel} 23504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel 2369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCameraLibOpen(int camid) 2379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int rc; 2399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel rc = hal3appCamOpen(&mLibHandle->app_obj, (int)camid, &(mLibHandle->test_obj)); 2409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (rc != HAL3_CAM_OK) { 2419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGE("hal3appCamOpen() camidx=%d, err=%d\n", 2429e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camid, rc); 2439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel goto EXIT; 2449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2459e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel rc = hal3appCamInitialize((int)camid, &mLibHandle->test_obj); 2469e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel EXIT: 2479e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return rc; 2489e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2499e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2509e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appTestLoad(hal3_camera_app_t *my_hal3_app) 2519e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2529e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel memset(&my_hal3_app->hal3_lib, 0, sizeof(hal3_interface_lib_t)); 2539e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\nLibrary path is :%s", CAM_LIB(LIB_PATH)); 2549e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_hal3_app->hal3_lib.ptr = dlopen(CAM_LIB(LIB_PATH), RTLD_NOW); 2559e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2569e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (!my_hal3_app->hal3_lib.ptr) { 2579e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGE("Error opening HAL libraries %s\n", 2589e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel dlerror()); 2599e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return -HAL3_CAM_E_GENERAL; 2609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2619e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_hal3_app->hal3_lib.halModule_t = 2629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (camera_module_t*)dlsym(my_hal3_app->hal3_lib.ptr, HAL_MODULE_INFO_SYM_AS_STR); 2639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (my_hal3_app->hal3_lib.halModule_t == NULL) { 2649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGE("Error opening HAL library %s\n", 2659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel dlerror()); 2669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return -HAL3_CAM_E_GENERAL; 2679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return HAL3_CAM_OK; 2699e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2709e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCamOpen( 2729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_app_t *my_hal3_app, 2739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int camid, 2749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3_camera_test_obj_t *my_test_obj) 2759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera_module_t *my_if_handle = my_hal3_app->hal3_lib.halModule_t; 2779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_if_handle->common.methods->open(&(my_if_handle->common), "0", 2789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel reinterpret_cast<hw_device_t**>(&(my_test_obj->device))); 2799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n Camera ID %d Opened \n", camid); 2809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return HAL3_CAM_OK; 2819e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2829e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2839e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCamInitialize(int camid, hal3_camera_test_obj_t *my_test_obj) 2849e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 2859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int rc = 0; 2869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camera3_device_t *device_handle = my_test_obj->device; 2879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_test_obj->callback_ops.notify = &Notify; 2889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel my_test_obj->callback_ops.process_capture_result = &ProcessCaptureResult; 2899e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel rc = device_handle->ops->initialize(my_test_obj->device, &(my_test_obj->callback_ops)); 2909e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (rc != HAL3_CAM_OK) { 2919e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel LOGE("hal3appCamInitialize() camidx=%d, err=%d\n", 2929e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel camid, rc); 2939e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel goto EXIT; 2949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 2959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel EXIT: 2969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return rc; 2979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 2989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 2999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelvoid CameraHAL3Base::hal3appCheckStream(int testcase, int camid) 3019e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 3029e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (testcase != MENU_START_PREVIEW) { 3039e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mPreviewtestCase != NULL) { 3049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewtestCase->previewTestEnd(mLibHandle, camid); 3059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel delete mPreviewtestCase; 3069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewtestCase = NULL; 3079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3099e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (testcase != MENU_START_VIDEO){ 3109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mVideotestCase != NULL) { 3119e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideotestCase->videoTestEnd(mLibHandle, camid); 3129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel delete mVideotestCase; 3139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideotestCase = NULL; 3149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (testcase != MENU_START_CAPTURE){ 3189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mSnapshottestCase != NULL) { 3199e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel delete mSnapshottestCase; 3209e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshottestCase = NULL; 3219e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3229e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3239e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (testcase != MENU_START_RAW_CAPTURE) { 3259e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mRawSnapshottestCase != NULL) { 3269e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel delete mRawSnapshottestCase; 3279e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRawSnapshottestCase = NULL; 3289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3299e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 3319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCameraPreviewInit(int testcase, int camid, int w, int h) 3349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 3359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int req_sent; 3369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testCaseEndComplete = 0; 3379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (w == 0 || h == 0) { 3389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n Frame dimension is wrong"); 3399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return -1; 3409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if ( mPreviewtestCase != NULL) { 34204e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(testcase == MENU_TOGGLE_IR_MODE) { 34304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("\n IR mode requested is :%d", ir_mode); 34404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel mPreviewtestCase->ir_mode = ir_mode; 34504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 34604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(testcase == MENU_TOGGLE_SVHDR_MODE) { 34704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel ALOGE("\n SVHDR mode requested is :%d", svhdr_mode); 34804e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel mPreviewtestCase->svhdr_mode = svhdr_mode; 34904e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 3509e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 0; 3519e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3529e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 3539e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 0; 3549e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel do { 3559e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mVideoRunning == 1) { 3569e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_PREVIEW, camid); 3579e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3589e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_lock(&TestAppLock); 3599e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mTestCaseSelected = MENU_START_PREVIEW; 3609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mVideoRunning != 1) { 3619e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_PREVIEW, camid); 3629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewtestCase = new QCameraHAL3PreviewTest(0); 3649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n\n Testing the Resolution : %d X %d", w, h); 3659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel req_sent = 0; 3669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel PreviewQueue.clear(); 3679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel capture_received = 0; mSecElapsed = 1; 3689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel snapshot_buffer = -1; mFrameCount = 0; 3699e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewtestCase->width = w; mPreviewtestCase->height = h; 37004e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel mPreviewtestCase->ir_mode = 0; mPreviewtestCase->svhdr_mode = 0; 3719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mPreviewtestCase->initTest(mLibHandle, 3729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (int) MENU_START_PREVIEW, camid, w, h); 3739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 1; 3749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel }while(testCaseEndComplete != 1); 3759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 0; 3779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 3789e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3799e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCameraVideoInit(int testcase, int camid, int w, int h) 3809e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 3819e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel extern int req_sent; 3829e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testCaseEndComplete = 0; 3839e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (w == 0 || h == 0) { 3849e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n Frame dimension is wrong"); 3859e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return -1; 3869e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3879e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 3889e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mVideotestCase != NULL) { 38954dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel if(testcase == MENU_TOGGLE_BINNING_CORRECTION) { 39054dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel ALOGE("\n Binning Mode Requested is :%d", binning_mode); 39154dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel mVideotestCase->binning_mode = binning_mode; 39254dc9783295b20e33ec11e132d98a1b8efbf254cThierry Strudel } 39304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel return 0; 3949e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 3959e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel else { 3969e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 0; 3979e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel do { 3989e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mPreviewRunning == 1) { 3999e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_VIDEO, camid); 4009e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4019e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_lock(&TestAppLock); 4029e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mTestCaseSelected = MENU_START_VIDEO; 4039e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mPreviewRunning != 1) { 4049e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_VIDEO, camid); 4059e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4069e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideotestCase = new QCameraHAL3VideoTest(0); 4079e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel VideoQueue.clear(); 4089e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n\nTesting the Resolution : %d X %d", w, h); 4099e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel req_sent = 0; 4109e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel capture_received =0; mSecElapsed = 1; test_case_end = 0; 4119e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideotestCase->width = w; mVideotestCase->height = h; 4129e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel snapshot_buffer = -1; mFrameCount = 0; 4139e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mVideotestCase->initTest(mLibHandle, 4149e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (int) MENU_START_VIDEO, camid, w, h); 4159e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 1; 4169e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel }while(testCaseEndComplete !=1); 4179e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4189e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 0; 4199e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 4209e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 4219e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 4229e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appRawCaptureInit(hal3_camera_lib_test *handle, int camid, int req_cap) 4239e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 4249e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testCaseEndComplete = 0; 42504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(handle == NULL) { 42604e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGE("Camera Handle is NULL"); 42704e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 4289e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mSnapShotRunning != 1) { 4299e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_RAW_CAPTURE, camid); 4309e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4319e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 0; 4329e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel do { 4339e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_lock(&TestAppLock); 4349e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mSnapShotRunning == 1) { 4359e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_RAW_CAPTURE, camid); 4369e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4379e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n capture:%d", req_cap); 4389e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mTestCaseSelected = MENU_START_RAW_CAPTURE; 4399e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRawSnapshottestCase = new QCameraHAL3RawSnapshotTest(req_cap); 4409e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRawSnapshottestCase->mRequestedCapture = req_cap; 4419e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mRawSnapshottestCase->initTest(mLibHandle, 4429e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (int) MENU_START_RAW_CAPTURE, camid, RAWSNAPSHOT_CAPTURE_WIDTH, 4439e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel RAWSNAPSHOT_CAPTURE_HEIGHT); 4449e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 1; 4459e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel }while(testCaseEndComplete !=1); 4469e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 0; 4479e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 4489e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 4499e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudelint CameraHAL3Base::hal3appCameraCaptureInit(hal3_camera_lib_test *handle, 4509e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int camid, int req_cap) 4519e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel{ 4529e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel int testCaseEndComplete = 0; 45304e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel if(handle == NULL) { 45404e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel LOGE("Camera Handle is NULL"); 45504e026fe14f98a83811cd3a2c04b60b3b501b80cThierry Strudel } 4569e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mSnapShotRunning != 1) { 4579e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_CAPTURE, camid); 4589e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4599e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 0; 4609e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel do { 4619e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel pthread_mutex_lock(&TestAppLock); 4629e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel if (mSnapShotRunning == 1) { 4639e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel hal3appCheckStream(MENU_START_CAPTURE, camid); 4649e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel } 4659e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel printf("\n capture:%d", req_cap); 4669e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mTestCaseSelected = MENU_START_CAPTURE; 4679e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshottestCase = new QCameraHAL3SnapshotTest(req_cap); 4689e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshottestCase->mRequestedCapture = req_cap; 4699e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel mSnapshottestCase->initTest(mLibHandle, 4709e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel (int) MENU_START_CAPTURE, camid, SNAPSHOT_CAPTURE_WIDTH, SNAPSHOT_CAPTURE_HEIGHT); 4719e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel testCaseEndComplete = 1; 4729e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel }while(testCaseEndComplete != 1); 4739e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel return 0; 4749e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 4759e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 4769e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel} 4779e74aae7331f3227542b3e646a0dd658d3467a31Thierry Strudel 478