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