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