11804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
21804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *
31804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * Redistribution and use in source and binary forms, with or without
41804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * modification, are permitted provided that the following conditions are
51804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * met:
61804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *     * Redistributions of source code must retain the above copyright
71804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       notice, this list of conditions and the following disclaimer.
81804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *     * Redistributions in binary form must reproduce the above
91804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       copyright notice, this list of conditions and the following
101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       disclaimer in the documentation and/or other materials provided
111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       with the distribution.
121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *     * Neither the name of The Linux Foundation nor the names of its
131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       contributors may be used to endorse or promote products derived
141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *       from this software without specific prior written permission.
151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *
161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *
281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam */
291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <ctype.h>
311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <cutils/properties.h>
321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <fcntl.h>
331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <dlfcn.h>
341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <linux/msm_ion.h>
351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include <sys/mman.h>
361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include "mm_qcamera_dbg.h"
381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#include "mm_qcamera_app.h"
391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamstatic pthread_mutex_t app_mutex;
411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamstatic int thread_status = 0;
421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamstatic pthread_cond_t app_cond_v;
431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#define MM_QCAMERA_APP_NANOSEC_SCALE 1000000000
451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_app_timedwait(uint8_t seconds)
471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = 0;
491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pthread_mutex_lock(&app_mutex);
501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(FALSE == thread_status) {
511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        struct timespec tw;
521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        memset(&tw, 0, sizeof tw);
531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        tw.tv_sec = 0;
541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        tw.tv_nsec = time(0) + seconds * MM_QCAMERA_APP_NANOSEC_SCALE;
551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = pthread_cond_timedwait(&app_cond_v, &app_mutex,&tw);
571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        thread_status = FALSE;
581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pthread_mutex_unlock(&app_mutex);
601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_app_wait()
641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = 0;
661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pthread_mutex_lock(&app_mutex);
671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(FALSE == thread_status){
681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        pthread_cond_wait(&app_cond_v, &app_mutex);
691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    thread_status = FALSE;
711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pthread_mutex_unlock(&app_mutex);
721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamvoid mm_camera_app_done()
761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  pthread_mutex_lock(&app_mutex);
781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  thread_status = TRUE;
791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  pthread_cond_signal(&app_cond_v);
801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  pthread_mutex_unlock(&app_mutex);
811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_load_hal(mm_camera_app_t *my_cam_app)
841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&my_cam_app->hal_lib, 0, sizeof(hal_interface_lib_t));
861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    my_cam_app->hal_lib.ptr = dlopen("libmmcamera_interface.so", RTLD_NOW);
871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    my_cam_app->hal_lib.ptr_jpeg = dlopen("libmmjpeg_interface.so", RTLD_NOW);
881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (!my_cam_app->hal_lib.ptr || !my_cam_app->hal_lib.ptr_jpeg) {
891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s Error opening HAL library %s\n", __func__, dlerror());
901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -MM_CAMERA_E_GENERAL;
911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *(void **)&(my_cam_app->hal_lib.get_num_of_cameras) =
931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        dlsym(my_cam_app->hal_lib.ptr, "get_num_of_cameras");
941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *(void **)&(my_cam_app->hal_lib.mm_camera_open) =
951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        dlsym(my_cam_app->hal_lib.ptr, "camera_open");
961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *(void **)&(my_cam_app->hal_lib.jpeg_open) =
971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        dlsym(my_cam_app->hal_lib.ptr_jpeg, "jpeg_open");
981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (my_cam_app->hal_lib.get_num_of_cameras == NULL ||
1001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        my_cam_app->hal_lib.mm_camera_open == NULL ||
1011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        my_cam_app->hal_lib.jpeg_open == NULL) {
1021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s Error loading HAL sym %s\n", __func__, dlerror());
1031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -MM_CAMERA_E_GENERAL;
1041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
1051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    my_cam_app->num_cameras = my_cam_app->hal_lib.get_num_of_cameras();
1071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: num_cameras = %d\n", __func__, my_cam_app->num_cameras);
1081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
1101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
1111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_allocate_ion_memory(mm_camera_app_buf_t *buf, unsigned int ion_type)
1131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
1141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
1151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    struct ion_handle_data handle_data;
1161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    struct ion_allocation_data alloc;
1171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    struct ion_fd_data ion_info_fd;
1181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int main_ion_fd = -1;
1191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    void *data = NULL;
1201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    main_ion_fd = open("/dev/ion", O_RDONLY);
1221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (main_ion_fd <= 0) {
1231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("Ion dev open failed %s\n", strerror(errno));
1241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ION_OPEN_FAILED;
1251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
1261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&alloc, 0, sizeof(alloc));
1281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    alloc.len = buf->mem_info.size;
1291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* to make it page size aligned */
1301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    alloc.len = (alloc.len + 4095U) & (~4095U);
1311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    alloc.align = 4096;
1321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    alloc.flags = ION_FLAG_CACHED;
1331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    alloc.heap_id_mask = ion_type;
1341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = ioctl(main_ion_fd, ION_IOC_ALLOC, &alloc);
1351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc < 0) {
1361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("ION allocation failed\n");
1371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ION_ALLOC_FAILED;
1381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
1391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&ion_info_fd, 0, sizeof(ion_info_fd));
1411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    ion_info_fd.handle = alloc.handle;
1421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = ioctl(main_ion_fd, ION_IOC_SHARE, &ion_info_fd);
1431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc < 0) {
1441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("ION map failed %s\n", strerror(errno));
1451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ION_MAP_FAILED;
1461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
1471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    data = mmap(NULL,
1491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                alloc.len,
1501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                PROT_READ  | PROT_WRITE,
1511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                MAP_SHARED,
1521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                ion_info_fd.fd,
1531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                0);
1541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (data == MAP_FAILED) {
1561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("ION_MMAP_FAILED: %s (%d)\n", strerror(errno), errno);
1571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ION_MAP_FAILED;
1581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
1591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    buf->mem_info.main_ion_fd = main_ion_fd;
1601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    buf->mem_info.fd = ion_info_fd.fd;
1611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    buf->mem_info.handle = ion_info_fd.handle;
1621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    buf->mem_info.size = alloc.len;
1631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    buf->mem_info.data = data;
1641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
1651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1661804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamION_MAP_FAILED:
1671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&handle_data, 0, sizeof(handle_data));
1681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle_data.handle = ion_info_fd.handle;
1691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    ioctl(main_ion_fd, ION_IOC_FREE, &handle_data);
1701804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamION_ALLOC_FAILED:
1711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    close(main_ion_fd);
1721804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamION_OPEN_FAILED:
1731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return -MM_CAMERA_E_GENERAL;
1741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
1751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_deallocate_ion_memory(mm_camera_app_buf_t *buf)
1771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
1781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  struct ion_handle_data handle_data;
1791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  int rc = 0;
1801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  rc = munmap(buf->mem_info.data, buf->mem_info.size);
1821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (buf->mem_info.fd >= 0) {
1841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      close(buf->mem_info.fd);
1851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      buf->mem_info.fd = -1;
1861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
1871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (buf->mem_info.main_ion_fd >= 0) {
1891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      memset(&handle_data, 0, sizeof(handle_data));
1901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      handle_data.handle = buf->mem_info.handle;
1911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      ioctl(buf->mem_info.main_ion_fd, ION_IOC_FREE, &handle_data);
1921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      close(buf->mem_info.main_ion_fd);
1931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      buf->mem_info.main_ion_fd = -1;
1941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
1951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  return rc;
1961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
1971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
1981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam/* cmd = ION_IOC_CLEAN_CACHES, ION_IOC_INV_CACHES, ION_IOC_CLEAN_INV_CACHES */
1991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_cache_ops(mm_camera_app_meminfo_t *mem_info,
2001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                     int cmd)
2011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
2021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    struct ion_flush_data cache_inv_data;
2031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    struct ion_custom_data custom_data;
2041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int ret = MM_CAMERA_OK;
2051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#ifdef USE_ION
2071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (NULL == mem_info) {
2081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: mem_info is NULL, return here", __func__);
2091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -MM_CAMERA_E_GENERAL;
2101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
2111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&cache_inv_data, 0, sizeof(cache_inv_data));
2131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&custom_data, 0, sizeof(custom_data));
2141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cache_inv_data.vaddr = mem_info->data;
2151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cache_inv_data.fd = mem_info->fd;
2161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cache_inv_data.handle = mem_info->handle;
2171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cache_inv_data.length = (unsigned int)mem_info->size;
2181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    custom_data.cmd = (unsigned int)cmd;
2191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    custom_data.arg = (unsigned long)&cache_inv_data;
2201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("addr = %p, fd = %d, handle = %lx length = %d, ION Fd = %d",
2221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         cache_inv_data.vaddr, cache_inv_data.fd,
2231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         (unsigned long)cache_inv_data.handle, cache_inv_data.length,
2241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         mem_info->main_ion_fd);
2251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(mem_info->main_ion_fd >= 0) {
2261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if(ioctl(mem_info->main_ion_fd, ION_IOC_CUSTOM, &custom_data) < 0) {
2271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            ALOGE("%s: Cache Invalidate failed\n", __func__);
2281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            ret = -MM_CAMERA_E_GENERAL;
2291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
2301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
2311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#endif
2321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return ret;
2341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
2351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamvoid mm_app_dump_frame(mm_camera_buf_def_t *frame,
2371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       char *name,
2381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       char *ext,
2391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       uint32_t frame_idx)
2401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
2411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    char file_name[FILENAME_MAX];
2421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int file_fd;
2431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i;
2441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int offset = 0;
2451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( frame != NULL) {
2461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        snprintf(file_name, sizeof(file_name),
2471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                QCAMERA_DUMP_FRM_LOCATION"test/%s_%04d.%s", name, frame_idx, ext);
2481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        file_fd = open(file_name, O_RDWR | O_CREAT, 0777);
2491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (file_fd < 0) {
2501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: cannot open file %s \n", __func__, file_name);
2511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        } else {
2521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            for (i = 0; i < frame->planes_buf.num_planes; i++) {
2531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG("%s: saving file from address: %p, data offset: %d, "
2541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                     "length: %d \n", __func__, frame->buffer,
2551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    frame->planes_buf.planes[i].data_offset, frame->planes_buf.planes[i].length);
2561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                write(file_fd,
2571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      (uint8_t *)frame->buffer + offset,
2581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      frame->planes_buf.planes[i].length);
2591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                offset += (int)frame->planes_buf.planes[i].length;
2601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
2611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            close(file_fd);
2631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG("dump %s", file_name);
2641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
2651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
2661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
2671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamvoid mm_app_dump_jpeg_frame(const void * data, size_t size, char* name,
2691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        char* ext, uint32_t index)
2701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
2711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    char buf[FILENAME_MAX];
2721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int file_fd;
2731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( data != NULL) {
2741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        snprintf(buf, sizeof(buf),
2751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                QCAMERA_DUMP_FRM_LOCATION"test/%s_%u.%s", name, index, ext);
2761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG("%s: %s size =%zu, jobId=%u", __func__, buf, size, index);
2771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        file_fd = open(buf, O_RDWR | O_CREAT, 0777);
2781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        write(file_fd, data, size);
2791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        close(file_fd);
2801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
2811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
2821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_alloc_bufs(mm_camera_app_buf_t* app_bufs,
2841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      cam_frame_len_offset_t *frame_offset_info,
2851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      uint8_t num_bufs,
2861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      uint8_t is_streambuf,
2871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      size_t multipleOf)
2881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
2891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    uint32_t i, j;
2901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    unsigned int ion_type = 0x1 << CAMERA_ION_FALLBACK_HEAP_ID;
2911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (is_streambuf) {
2931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        ion_type |= 0x1 << CAMERA_ION_HEAP_ID;
2941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
2951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
2961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for (i = 0; i < num_bufs ; i++) {
2971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if ( 0 < multipleOf ) {
2981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            size_t m = frame_offset_info->frame_len / multipleOf;
2991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( ( frame_offset_info->frame_len % multipleOf ) != 0 ) {
3001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                m++;
3011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
3021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].mem_info.size = m * multipleOf;
3031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        } else {
3041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].mem_info.size = frame_offset_info->frame_len;
3051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
3061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        mm_app_allocate_ion_memory(&app_bufs[i], ion_type);
3071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.buf_idx = i;
3091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.planes_buf.num_planes = (int8_t)frame_offset_info->num_planes;
3101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.fd = app_bufs[i].mem_info.fd;
3111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.frame_len = app_bufs[i].mem_info.size;
3121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.buffer = app_bufs[i].mem_info.data;
3131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.mem_info = (void *)&app_bufs[i].mem_info;
3141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        /* Plane 0 needs to be set seperately. Set other planes
3161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             * in a loop. */
3171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.planes_buf.planes[0].length = frame_offset_info->mp[0].len;
3181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.planes_buf.planes[0].m.userptr =
3191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            (long unsigned int)app_bufs[i].buf.fd;
3201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.planes_buf.planes[0].data_offset = frame_offset_info->mp[0].offset;
3211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        app_bufs[i].buf.planes_buf.planes[0].reserved[0] = 0;
3221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        for (j = 1; j < (uint8_t)frame_offset_info->num_planes; j++) {
3231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].buf.planes_buf.planes[j].length = frame_offset_info->mp[j].len;
3241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].buf.planes_buf.planes[j].m.userptr =
3251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                (long unsigned int)app_bufs[i].buf.fd;
3261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].buf.planes_buf.planes[j].data_offset = frame_offset_info->mp[j].offset;
3271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            app_bufs[i].buf.planes_buf.planes[j].reserved[0] =
3281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                app_bufs[i].buf.planes_buf.planes[j-1].reserved[0] +
3291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                app_bufs[i].buf.planes_buf.planes[j-1].length;
3301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
3311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
3321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: X", __func__);
3331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
3341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
3351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_release_bufs(uint8_t num_bufs,
3371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        mm_camera_app_buf_t* app_bufs)
3381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
3391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i, rc = MM_CAMERA_OK;
3401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: E", __func__);
3421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for (i = 0; i < num_bufs; i++) {
3441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_deallocate_ion_memory(&app_bufs[i]);
3451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
3461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(app_bufs, 0, num_bufs * sizeof(mm_camera_app_buf_t));
3471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: X", __func__);
3481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
3491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
3501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_stream_initbuf(cam_frame_len_offset_t *frame_offset_info,
3521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          uint8_t *num_bufs,
3531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          uint8_t **initial_reg_flag,
3541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          mm_camera_buf_def_t **bufs,
3551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          mm_camera_map_unmap_ops_tbl_t *ops_tbl,
3561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          void *user_data)
3571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
3581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_stream_t *stream = (mm_camera_stream_t *)user_data;
3591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_buf_def_t *pBufs = NULL;
3601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    uint8_t *reg_flags = NULL;
3611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i, rc;
3621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    stream->offset = *frame_offset_info;
3641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: alloc buf for stream_id %d, len=%d, num planes: %d, offset: %d",
3661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         __func__,
3671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         stream->s_id,
3681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         frame_offset_info->frame_len,
3691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         frame_offset_info->num_planes,
3701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         frame_offset_info->mp[1].offset);
3711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (stream->num_of_bufs > CAM_MAX_NUM_BUFS_PER_STREAM)
3731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        stream->num_of_bufs = CAM_MAX_NUM_BUFS_PER_STREAM;
3741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pBufs = (mm_camera_buf_def_t *)malloc(sizeof(mm_camera_buf_def_t) * stream->num_of_bufs);
3761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    reg_flags = (uint8_t *)malloc(sizeof(uint8_t) * stream->num_of_bufs);
3771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (pBufs == NULL || reg_flags == NULL) {
3781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: No mem for bufs", __func__);
3791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (pBufs != NULL) {
3801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            free(pBufs);
3811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
3821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (reg_flags != NULL) {
3831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            free(reg_flags);
3841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
3851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -1;
3861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
3871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_alloc_bufs(&stream->s_bufs[0],
3891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           frame_offset_info,
3901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           stream->num_of_bufs,
3911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           1,
3921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           stream->multipleOf);
3931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
3941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
3951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: mm_stream_alloc_bufs err = %d", __func__, rc);
3961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        free(pBufs);
3971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        free(reg_flags);
3981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return rc;
3991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for (i = 0; i < stream->num_of_bufs; i++) {
4021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        /* mapping stream bufs first */
4031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        pBufs[i] = stream->s_bufs[i].buf;
4041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        reg_flags[i] = 1;
4051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = ops_tbl->map_ops(pBufs[i].buf_idx,
4061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                              -1,
4071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                              pBufs[i].fd,
4081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                              (uint32_t)pBufs[i].frame_len,
4091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                              CAM_MAPPING_BUF_TYPE_STREAM_BUF, ops_tbl->userdata);
4101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
4111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: mapping buf[%d] err = %d", __func__, i, rc);
4121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
4131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
4141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
4171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        int j;
4181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        for (j=0; j>i; j++) {
4191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            ops_tbl->unmap_ops(pBufs[j].buf_idx, -1,
4201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    CAM_MAPPING_BUF_TYPE_STREAM_BUF, ops_tbl->userdata);
4211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
4221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        mm_app_release_bufs(stream->num_of_bufs, &stream->s_bufs[0]);
4231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        free(pBufs);
4241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        free(reg_flags);
4251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return rc;
4261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *num_bufs = stream->num_of_bufs;
4291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *bufs = pBufs;
4301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *initial_reg_flag = reg_flags;
4311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: X",__func__);
4331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
4341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
4351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint32_t mm_app_stream_deinitbuf(mm_camera_map_unmap_ops_tbl_t *ops_tbl,
4371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                void *user_data)
4381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
4391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_stream_t *stream = (mm_camera_stream_t *)user_data;
4401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i;
4411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for (i = 0; i < stream->num_of_bufs ; i++) {
4431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        /* mapping stream bufs first */
4441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        ops_tbl->unmap_ops(stream->s_bufs[i].buf.buf_idx, -1,
4451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CAM_MAPPING_BUF_TYPE_STREAM_BUF, ops_tbl->userdata);
4461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_app_release_bufs(stream->num_of_bufs, &stream->s_bufs[0]);
4491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s: X",__func__);
4511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return 0;
4521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
4531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint32_t mm_app_stream_clean_invalidate_buf(uint32_t index, void *user_data)
4551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
4561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_stream_t *stream = (mm_camera_stream_t *)user_data;
4571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return mm_app_cache_ops(&stream->s_bufs[index].mem_info,
4581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      ION_IOC_CLEAN_INV_CACHES);
4591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
4601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint32_t mm_app_stream_invalidate_buf(uint32_t index, void *user_data)
4621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
4631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_stream_t *stream = (mm_camera_stream_t *)user_data;
4641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return mm_app_cache_ops(&stream->s_bufs[index].mem_info, ION_IOC_INV_CACHES);
4651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
4661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamstatic void notify_evt_cb(uint32_t camera_handle,
4681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          mm_camera_event_t *evt,
4691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                          void *user_data)
4701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
4711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_test_obj_t *test_obj =
4721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        (mm_camera_test_obj_t *)user_data;
4731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (test_obj == NULL || test_obj->cam->camera_handle != camera_handle) {
4741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Not a valid test obj", __func__);
4751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return;
4761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s:E evt = %d", __func__, evt->server_event_type);
4791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    switch (evt->server_event_type) {
4801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case CAM_EVENT_TYPE_AUTO_FOCUS_DONE:
4811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           CDBG("%s: rcvd auto focus done evt", __func__);
4821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
4831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case CAM_EVENT_TYPE_ZOOM_DONE:
4841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           CDBG("%s: rcvd zoom done evt", __func__);
4851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
4861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       default:
4871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
4881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
4891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s:X", __func__);
4911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
4921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
4931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_open(mm_camera_app_t *cam_app,
4941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int cam_id,
4951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                mm_camera_test_obj_t *test_obj)
4961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
4971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int32_t rc = 0;
4981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_frame_len_offset_t offset_info;
4991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("%s:BEGIN\n", __func__);
5011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = cam_app->hal_lib.mm_camera_open((uint8_t)cam_id, &(test_obj->cam));
5031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(rc) {
5041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:dev open error. rc = %d, vtbl = %p\n", __func__, rc, test_obj->cam);
5051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -MM_CAMERA_E_GENERAL;
5061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("Open Camera id = %d handle = %d", cam_id, test_obj->cam->camera_handle);
5091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* alloc ion mem for capability buf */
5111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&offset_info, 0, sizeof(offset_info));
5121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    offset_info.frame_len = sizeof(cam_capability_t);
5131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_alloc_bufs(&test_obj->cap_buf,
5151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           &offset_info,
5161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           1,
5171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0,
5181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0);
5191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:alloc buf for capability error\n", __func__);
5211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_cam_open;
5221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* mapping capability buf */
5251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->map_buf(test_obj->cam->camera_handle,
5261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     CAM_MAPPING_BUF_TYPE_CAPABILITY,
5271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     test_obj->cap_buf.mem_info.fd,
5281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     test_obj->cap_buf.mem_info.size);
5291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:map for capability error\n", __func__);
5311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_cap_buf_alloc;
5321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* alloc ion mem for getparm buf */
5351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&offset_info, 0, sizeof(offset_info));
5361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    offset_info.frame_len = sizeof(parm_buffer_t);
5371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_alloc_bufs(&test_obj->parm_buf,
5381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           &offset_info,
5391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           1,
5401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0,
5411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0);
5421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:alloc buf for getparm_buf error\n", __func__);
5441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_cap_buf_map;
5451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* mapping getparm buf */
5481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->map_buf(test_obj->cam->camera_handle,
5491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     CAM_MAPPING_BUF_TYPE_PARM_BUF,
5501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     test_obj->parm_buf.mem_info.fd,
5511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                     test_obj->parm_buf.mem_info.size);
5521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:map getparm_buf error\n", __func__);
5541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_getparm_buf_alloc;
5551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->params_buffer = (parm_buffer_t*) test_obj->parm_buf.mem_info.data;
5571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_HIGH("\n%s params_buffer=%p\n",__func__,test_obj->params_buffer);
5581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->register_event_notify(test_obj->cam->camera_handle,
5601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                                   notify_evt_cb,
5611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                                   test_obj);
5621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: failed register_event_notify", __func__);
5641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -MM_CAMERA_E_GENERAL;
5651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_getparm_buf_map;
5661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->query_capability(test_obj->cam->camera_handle);
5691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
5701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: failed query_capability", __func__);
5711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -MM_CAMERA_E_GENERAL;
5721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_getparm_buf_map;
5731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&test_obj->jpeg_ops, 0, sizeof(mm_jpeg_ops_t));
5751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_dimension pic_size;
5761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&pic_size, 0, sizeof(mm_dimension));
5771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pic_size.w = 4000;
5781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    pic_size.h = 3000;
5791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->jpeg_hdl = cam_app->hal_lib.jpeg_open(&test_obj->jpeg_ops,pic_size);
5801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (test_obj->jpeg_hdl == 0) {
5811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: jpeg lib open err", __func__);
5821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -MM_CAMERA_E_GENERAL;
5831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto error_after_getparm_buf_map;
5841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
5851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
5871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
5881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamerror_after_getparm_buf_map:
5891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->unmap_buf(test_obj->cam->camera_handle,
5901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                  CAM_MAPPING_BUF_TYPE_PARM_BUF);
5911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamerror_after_getparm_buf_alloc:
5921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_app_release_bufs(1, &test_obj->parm_buf);
5931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamerror_after_cap_buf_map:
5941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->unmap_buf(test_obj->cam->camera_handle,
5951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                  CAM_MAPPING_BUF_TYPE_CAPABILITY);
5961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamerror_after_cap_buf_alloc:
5971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_app_release_bufs(1, &test_obj->cap_buf);
5981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamerror_after_cam_open:
5991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->close_camera(test_obj->cam->camera_handle);
6001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam = NULL;
6011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
6021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
6031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint init_batch_update(parm_buffer_t *p_table)
6051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
6061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
6071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_HIGH("\nEnter %s\n",__func__);
6081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int32_t hal_version = CAM_HAL_V1;
6091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(p_table, 0, sizeof(parm_buffer_t));
6111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(ADD_SET_PARAM_ENTRY_TO_BATCH(p_table, CAM_INTF_PARM_HAL_VERSION, hal_version)) {
6121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
6131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
6161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
6171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint commit_set_batch(mm_camera_test_obj_t *test_obj)
6191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
6201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
6211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i = 0;
6221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for(i = 0; i < CAM_INTF_PARM_MAX; i++){
6241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if(test_obj->params_buffer->is_valid[i])
6251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
6261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (i < CAM_INTF_PARM_MAX) {
6281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_HIGH("\n set_param p_buffer =%p\n",test_obj->params_buffer);
6291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = test_obj->cam->ops->set_parms(test_obj->cam->camera_handle, test_obj->params_buffer);
6301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: cam->ops->set_parms failed !!", __func__);
6331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
6351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
6361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_close(mm_camera_test_obj_t *test_obj)
6381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
6391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int32_t rc = MM_CAMERA_OK;
6401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (test_obj == NULL || test_obj->cam ==NULL) {
6421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: cam not opened", __func__);
6431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -MM_CAMERA_E_GENERAL;
6441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* unmap capability buf */
6471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->unmap_buf(test_obj->cam->camera_handle,
6481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                       CAM_MAPPING_BUF_TYPE_CAPABILITY);
6491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: unmap capability buf failed, rc=%d", __func__, rc);
6511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* unmap parm buf */
6541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->unmap_buf(test_obj->cam->camera_handle,
6551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                       CAM_MAPPING_BUF_TYPE_PARM_BUF);
6561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: unmap setparm buf failed, rc=%d", __func__, rc);
6581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->close_camera(test_obj->cam->camera_handle);
6611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: close camera failed, rc=%d", __func__, rc);
6631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam = NULL;
6651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* close jpeg client */
6671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (test_obj->jpeg_hdl && test_obj->jpeg_ops.close) {
6681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = test_obj->jpeg_ops.close(test_obj->jpeg_hdl);
6691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        test_obj->jpeg_hdl = 0;
6701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
6711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: close jpeg failed, rc=%d", __func__, rc);
6721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
6731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* dealloc capability buf */
6761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_release_bufs(1, &test_obj->cap_buf);
6771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: release capability buf failed, rc=%d", __func__, rc);
6791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* dealloc parm buf */
6821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_release_bufs(1, &test_obj->parm_buf);
6831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
6841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: release setparm buf failed, rc=%d", __func__, rc);
6851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
6861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
6881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
6891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tammm_camera_channel_t * mm_app_add_channel(mm_camera_test_obj_t *test_obj,
6911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         mm_camera_channel_type_t ch_type,
6921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         mm_camera_channel_attr_t *attr,
6931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         mm_camera_buf_notify_t channel_cb,
6941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         void *userdata)
6951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
6961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    uint32_t ch_id = 0;
6971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_channel_t *channel = NULL;
6981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
6991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    ch_id = test_obj->cam->ops->add_channel(test_obj->cam->camera_handle,
7001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            attr,
7011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            channel_cb,
7021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            userdata);
7031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ch_id == 0) {
7041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: add channel failed", __func__);
7051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return NULL;
7061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
7071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    channel = &test_obj->channels[ch_type];
7081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    channel->ch_id = ch_id;
7091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return channel;
7101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
7111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_del_channel(mm_camera_test_obj_t *test_obj,
7131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       mm_camera_channel_t *channel)
7141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
7151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->delete_channel(test_obj->cam->camera_handle,
7161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                       channel->ch_id);
7171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(channel, 0, sizeof(mm_camera_channel_t));
7181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
7191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
7201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tammm_camera_stream_t * mm_app_add_stream(mm_camera_test_obj_t *test_obj,
7221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                       mm_camera_channel_t *channel)
7231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
7241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_stream_t *stream = NULL;
7251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
7261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_frame_len_offset_t offset_info;
7271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    stream = &(channel->streams[channel->num_streams++]);
7291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    stream->s_id = test_obj->cam->ops->add_stream(test_obj->cam->camera_handle,
7301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                                  channel->ch_id);
7311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (stream->s_id == 0) {
7321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: add stream failed", __func__);
7331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return NULL;
7341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
7351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    stream->multipleOf = test_obj->slice_size;
7371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* alloc ion mem for stream_info buf */
7391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&offset_info, 0, sizeof(offset_info));
7401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    offset_info.frame_len = sizeof(cam_stream_info_t);
7411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_alloc_bufs(&stream->s_info_buf,
7431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           &offset_info,
7441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           1,
7451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0,
7461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           0);
7471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
7481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:alloc buf for stream_info error\n", __func__);
7491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        test_obj->cam->ops->delete_stream(test_obj->cam->camera_handle,
7501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                          channel->ch_id,
7511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                          stream->s_id);
7521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        stream->s_id = 0;
7531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return NULL;
7541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
7551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    /* mapping streaminfo buf */
7571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = test_obj->cam->ops->map_stream_buf(test_obj->cam->camera_handle,
7581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            channel->ch_id,
7591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            stream->s_id,
7601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            CAM_MAPPING_BUF_TYPE_STREAM_INFO,
7611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            0,
7621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            -1,
7631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            stream->s_info_buf.mem_info.fd,
7641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            (uint32_t)stream->s_info_buf.mem_info.size);
7651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
7661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:map setparm_buf error\n", __func__);
7671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        mm_app_deallocate_ion_memory(&stream->s_info_buf);
7681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        test_obj->cam->ops->delete_stream(test_obj->cam->camera_handle,
7691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                          channel->ch_id,
7701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                          stream->s_id);
7711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        stream->s_id = 0;
7721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return NULL;
7731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
7741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return stream;
7761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
7771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_del_stream(mm_camera_test_obj_t *test_obj,
7791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      mm_camera_channel_t *channel,
7801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                      mm_camera_stream_t *stream)
7811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
7821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->unmap_stream_buf(test_obj->cam->camera_handle,
7831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         channel->ch_id,
7841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         stream->s_id,
7851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         CAM_MAPPING_BUF_TYPE_STREAM_INFO,
7861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         0,
7871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                         -1);
7881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_app_deallocate_ion_memory(&stream->s_info_buf);
7891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->cam->ops->delete_stream(test_obj->cam->camera_handle,
7901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                      channel->ch_id,
7911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                      stream->s_id);
7921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(stream, 0, sizeof(mm_camera_stream_t));
7931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
7941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
7951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
7961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tammm_camera_channel_t *mm_app_get_channel_by_type(mm_camera_test_obj_t *test_obj,
7971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                                mm_camera_channel_type_t ch_type)
7981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
7991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return &test_obj->channels[ch_type];
8001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_config_stream(mm_camera_test_obj_t *test_obj,
8031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         mm_camera_channel_t *channel,
8041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         mm_camera_stream_t *stream,
8051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         mm_camera_stream_config_t *config)
8061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return test_obj->cam->ops->config_stream(test_obj->cam->camera_handle,
8081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                             channel->ch_id,
8091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                             stream->s_id,
8101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                             config);
8111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_start_channel(mm_camera_test_obj_t *test_obj,
8141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         mm_camera_channel_t *channel)
8151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return test_obj->cam->ops->start_channel(test_obj->cam->camera_handle,
8171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                             channel->ch_id);
8181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_stop_channel(mm_camera_test_obj_t *test_obj,
8211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        mm_camera_channel_t *channel)
8221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return test_obj->cam->ops->stop_channel(test_obj->cam->camera_handle,
8241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                            channel->ch_id);
8251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint initBatchUpdate(mm_camera_test_obj_t *test_obj)
8281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int32_t hal_version = CAM_HAL_V1;
8301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    parm_buffer_t *parm_buf = ( parm_buffer_t * ) test_obj->parm_buf.mem_info.data;
8321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(parm_buf, 0, sizeof(parm_buffer_t));
8331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
8341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_HAL_VERSION, hal_version);
8351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return MM_CAMERA_OK;
8371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint commitSetBatch(mm_camera_test_obj_t *test_obj)
8401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
8421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i = 0;
8431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    parm_buffer_t *p_table = ( parm_buffer_t * ) test_obj->parm_buf.mem_info.data;
8451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for(i = 0; i < CAM_INTF_PARM_MAX; i++){
8461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if(p_table->is_valid[i])
8471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
8481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (i < CAM_INTF_PARM_MAX) {
8501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = test_obj->cam->ops->set_parms(test_obj->cam->camera_handle, p_table);
8511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
8531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint commitGetBatch(mm_camera_test_obj_t *test_obj)
8571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
8591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int i = 0;
8601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    parm_buffer_t *p_table = ( parm_buffer_t * ) test_obj->parm_buf.mem_info.data;
8611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    for(i = 0; i < CAM_INTF_PARM_MAX; i++){
8621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if(p_table->is_valid[i])
8631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
8641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (i < CAM_INTF_PARM_MAX) {
8661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = test_obj->cam->ops->get_parms(test_obj->cam->camera_handle, p_table);
8671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
8691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setAecLock(mm_camera_test_obj_t *test_obj, int value)
8721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
8731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
8741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
8761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
8771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
8781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
8791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
8821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_AEC_LOCK, (uint32_t)value)) {
8831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: AEC Lock parameter not added to batch\n", __func__);
8841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
8851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
8861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
8891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
8901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
8911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
8921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
8931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8941804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
8951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
8961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
8971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
8981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setAwbLock(mm_camera_test_obj_t *test_obj, int value)
8991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
9001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
9011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
9031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
9051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
9091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_AWB_LOCK, (uint32_t)value)) {
9101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: AWB Lock parameter not added to batch\n", __func__);
9111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
9121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
9161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
9181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9211804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
9221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
9231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
9241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint set3Acommand(mm_camera_test_obj_t *test_obj, cam_eztune_cmd_data_t *value)
9271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
9281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
9291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
9311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
9331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
9371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_EZTUNE_CMD, *value)) {
9381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: CAM_INTF_PARM_EZTUNE_CMD parameter not added to batch\n", __func__);
9391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
9401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
9441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
9461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9491804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
9501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
9511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
9521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint getChromatix(mm_camera_test_obj_t *test_obj, tune_chromatix_t *value)
9541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
9551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
9561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
9581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
9601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
9641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_GET_CHROMATIX, *value)) {
9651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: getChromatixPointer not added to batch\n", __func__);
9661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
9671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitGetBatch(test_obj);
9711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
9731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    READ_PARAM_ENTRY(test_obj->parm_buf.mem_info.data,
9771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_GET_CHROMATIX, *value);
9781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9791804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
9801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
9811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
9821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setReloadChromatix(mm_camera_test_obj_t *test_obj, tune_chromatix_t *value)
9841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
9851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
9861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
9881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
9891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
9901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
9931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
9941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SET_RELOAD_CHROMATIX, *value)) {
9951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: getChromatixPointer not added to batch\n", __func__);
9961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
9971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
9981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
9991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
10011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
10031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10051804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
10061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
10071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
10081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint getAutofocusParams(mm_camera_test_obj_t *test_obj, tune_autofocus_t *value)
10101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
10111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
10121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
10141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
10161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
10201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_GET_AFTUNE, *value)) {
10211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: getChromatixPointer not added to batch\n", __func__);
10221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
10231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitGetBatch(test_obj);
10271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
10291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    READ_PARAM_ENTRY(test_obj->parm_buf.mem_info.data,
10331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_GET_AFTUNE, *value);
10341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10351804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
10361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
10371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
10381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setReloadAutofocusParams(mm_camera_test_obj_t *test_obj, tune_autofocus_t *value)
10401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
10411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
10421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
10441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
10461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
10501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SET_RELOAD_AFTUNE, *value)) {
10511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: setReloadAutofocusParams not added to batch\n", __func__);
10521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
10531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
10571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
10591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10611804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
10621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
10631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
10641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setAutoFocusTuning(mm_camera_test_obj_t *test_obj, tune_actuator_t *value)
10661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
10671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
10681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
10701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
10721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
10761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SET_AUTOFOCUSTUNING, *value)) {
10771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: AutoFocus Tuning not added to batch\n", __func__);
10781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
10791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
10831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
10851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
10861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
10871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10881804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
10891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
10901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
10911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setVfeCommand(mm_camera_test_obj_t *test_obj, tune_cmd_t *value)
10931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
10941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
10951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
10961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
10971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
10981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
10991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
11031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SET_VFE_COMMAND, *value)) {
11041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: VFE Command not added to batch\n", __func__);
11051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
11061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
11101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
11111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
11121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11151804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
11161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
11171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
11181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setPPCommand(mm_camera_test_obj_t *test_obj, tune_cmd_t *value)
11201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
11211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
11221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
11241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
11251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
11261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
11301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SET_PP_COMMAND, *value)) {
11311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: PP Command not added to batch\n", __func__);
11321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
11331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
11371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
11381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
11391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11421804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
11431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
11441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
11451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setFocusMode(mm_camera_test_obj_t *test_obj, cam_focus_mode_type mode)
11471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
11481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
11491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
11511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
11521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
11531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    uint32_t value = mode;
11571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
11591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_FOCUS_MODE, value)) {
11601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Focus mode parameter not added to batch\n", __func__);
11611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
11621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
11661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
11671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
11681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
11691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
11701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11711804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
11721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
11731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
11741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setEVCompensation(mm_camera_test_obj_t *test_obj, int ev)
11761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
11771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
11781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_capability_t *camera_cap = NULL;
11801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    camera_cap = (cam_capability_t *) test_obj->cap_buf.mem_info.data;
11821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( (ev >= camera_cap->exposure_compensation_min) &&
11831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam         (ev <= camera_cap->exposure_compensation_max) ) {
11841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = initBatchUpdate(test_obj);
11861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
11871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
11881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto ERROR;
11891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
11901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
11921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CAM_INTF_PARM_EXPOSURE_COMPENSATION, ev)) {
11931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: EV compensation parameter not added to batch\n", __func__);
11941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = -1;
11951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto ERROR;
11961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
11971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
11981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = commitSetBatch(test_obj);
11991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
12001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
12011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto ERROR;
12021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
12031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: EV compensation set to: %d", __func__, ev);
12051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    } else {
12061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Invalid EV compensation", __func__);
12071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -EINVAL;
12081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12101804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
12111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
12121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
12131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setAntibanding(mm_camera_test_obj_t *test_obj, cam_antibanding_mode_type antibanding)
12151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
12161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
12171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
12191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
12211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
12251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_ANTIBANDING, antibanding)) {
12261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Antibanding parameter not added to batch\n", __func__);
12271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
12281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
12321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
12341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Antibanding set to: %d", __func__, (int)antibanding);
12381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12391804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
12401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
12411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
12421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setWhiteBalance(mm_camera_test_obj_t *test_obj, cam_wb_mode_type mode)
12441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
12451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
12461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
12481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
12501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
12541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_WHITE_BALANCE, mode)) {
12551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: White balance parameter not added to batch\n", __func__);
12561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
12571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
12611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
12631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: White balance set to: %d", __func__, (int)mode);
12671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12681804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
12691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
12701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
12711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setExposureMetering(mm_camera_test_obj_t *test_obj, cam_auto_exposure_mode_type mode)
12731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
12741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
12751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
12771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
12791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
12831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_EXPOSURE, mode)) {
12841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Exposure metering parameter not added to batch\n", __func__);
12851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
12861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
12901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
12911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
12921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
12931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
12941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Exposure metering set to: %d", __func__, (int)mode);
12961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
12971804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
12981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
12991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
13001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setBrightness(mm_camera_test_obj_t *test_obj, int brightness)
13021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
13031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
13041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
13061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
13081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
13121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_BRIGHTNESS, brightness)) {
13131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Brightness parameter not added to batch\n", __func__);
13141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
13151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
13191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
13211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Brightness set to: %d", __func__, brightness);
13251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13261804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
13271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
13281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
13291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setContrast(mm_camera_test_obj_t *test_obj, int contrast)
13311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
13321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
13331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
13351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
13371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
13411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_CONTRAST, contrast)) {
13421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Contrast parameter not added to batch\n", __func__);
13431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
13441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
13481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
13501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Contrast set to: %d", __func__, contrast);
13541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13551804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
13561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
13571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
13581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setTintless(mm_camera_test_obj_t *test_obj, int tintless)
13601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
13611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
13621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
13641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
13661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
13701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_TINTLESS, tintless)) {
13711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Tintless parameter not added to batch\n", __func__);
13721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
13731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
13771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
13791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s:  set Tintless to: %d", __func__, tintless);
13831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13841804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
13851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
13861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
13871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setSaturation(mm_camera_test_obj_t *test_obj, int saturation)
13891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
13901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
13911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
13931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
13941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
13951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
13961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
13971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
13981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
13991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SATURATION, saturation)) {
14001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Saturation parameter not added to batch\n", __func__);
14011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
14021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
14061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
14081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Saturation set to: %d", __func__, saturation);
14121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14131804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
14141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
14151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
14161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setSharpness(mm_camera_test_obj_t *test_obj, int sharpness)
14181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
14191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
14201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
14221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
14241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
14281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_SHARPNESS, sharpness)) {
14291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Sharpness parameter not added to batch\n", __func__);
14301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
14311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
14351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
14371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->reproc_sharpness = sharpness;
14411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Sharpness set to: %d", __func__, sharpness);
14421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14431804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
14441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
14451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
14461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setISO(mm_camera_test_obj_t *test_obj, cam_iso_mode_type iso)
14481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
14491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
14501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
14521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
14541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
14581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_ISO, iso)) {
14591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: ISO parameter not added to batch\n", __func__);
14601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
14611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
14651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
14671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: ISO set to: %d", __func__, (int)iso);
14711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14721804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
14731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
14741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
14751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setZoom(mm_camera_test_obj_t *test_obj, int zoom)
14771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
14781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
14791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
14811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
14831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
14871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_ZOOM, zoom)) {
14881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Zoom parameter not added to batch\n", __func__);
14891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
14901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
14941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
14951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
14961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
14971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
14981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
14991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Zoom set to: %d", __func__, zoom);
15001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15011804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
15021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
15031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
15041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setFPSRange(mm_camera_test_obj_t *test_obj, cam_fps_range_t range)
15061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
15071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
15081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
15101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
15121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
15161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_FPS_RANGE, range)) {
15171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: FPS range parameter not added to batch\n", __func__);
15181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
15191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
15231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
15251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: FPS Range set to: [%5.2f:%5.2f]",
15291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                __func__,
15301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                range.min_fps,
15311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                range.max_fps);
15321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15331804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
15341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
15351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
15361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setScene(mm_camera_test_obj_t *test_obj, cam_scene_mode_type scene)
15381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
15391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
15401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
15421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
15441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
15481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_BESTSHOT_MODE, scene)) {
15491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Scene parameter not added to batch\n", __func__);
15501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
15511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
15551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
15571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Scene set to: %d", __func__, (int)scene);
15611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15621804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
15631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
15641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
15651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setFlash(mm_camera_test_obj_t *test_obj, cam_flash_mode_t flash)
15671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
15681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
15691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
15711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
15731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
15771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_LED_MODE, flash)) {
15781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Flash parameter not added to batch\n", __func__);
15791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
15801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
15841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
15851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
15861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
15871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
15881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: Flash set to: %d", __func__, (int)flash);
15901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15911804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
15921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
15931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
15941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint setWNR(mm_camera_test_obj_t *test_obj, uint8_t enable)
15961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
15971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
15981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
15991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = initBatchUpdate(test_obj);
16001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
16011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch camera parameter update failed\n", __func__);
16021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
16031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
16041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_denoise_param_t param;
16061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&param, 0, sizeof(cam_denoise_param_t));
16071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    param.denoise_enable = enable;
16081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    param.process_plates = CAM_WAVELET_DENOISE_YCBCR_PLANE;
16091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (ADD_SET_PARAM_ENTRY_TO_BATCH(test_obj->parm_buf.mem_info.data,
16111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CAM_INTF_PARM_WAVELET_DENOISE, param)) {
16121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: WNR enabled parameter not added to batch\n", __func__);
16131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = -1;
16141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
16151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
16161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = commitSetBatch(test_obj);
16181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
16191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: Batch parameters commit failed\n", __func__);
16201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto ERROR;
16211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
16221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    test_obj->reproc_wnr = param;
16251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s: WNR enabled: %d", __func__, enable);
16261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16271804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamERROR:
16281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
16291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
16301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam/** tuneserver_capture
16331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *    @lib_handle: the camera handle object
16341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *    @dim: snapshot dimensions
16351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *
16361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *  makes JPEG capture
16371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *
16381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam *  Return: >=0 on success, -1 on failure.
16391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam **/
16401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint tuneserver_capture(mm_camera_lib_handle *lib_handle,
16411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       mm_camera_lib_snapshot_params *dim)
16421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
16431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = 0;
16441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    printf("Take jpeg snapshot\n");
16461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( lib_handle->stream_running ) {
16471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if ( lib_handle->test_obj.zsl_enabled) {
16491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != dim) {
16501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if ( ( lib_handle->test_obj.buffer_width != dim->width) ||
16511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                     ( lib_handle->test_obj.buffer_height = dim->height ) ) {
16521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    lib_handle->test_obj.buffer_width = dim->width;
16541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    lib_handle->test_obj.buffer_height = dim->height;
16551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    rc = mm_camera_lib_stop_stream(lib_handle);
16571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    if (rc != MM_CAMERA_OK) {
16581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: mm_camera_lib_stop_stream() err=%d\n",
16591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
16601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
16611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    }
16621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    rc = mm_camera_lib_start_stream(lib_handle);
16641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    if (rc != MM_CAMERA_OK) {
16651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: mm_camera_lib_start_stream() err=%d\n",
16661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
16671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
16681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    }
16691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
16701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
16721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            lib_handle->test_obj.encodeJpeg = 1;
16741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            mm_camera_app_wait();
16761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        } else {
16771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            // For standard 2D capture streaming has to be disabled first
16781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_camera_lib_stop_stream(lib_handle);
16791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
16801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_camera_lib_stop_stream() err=%d\n",
16811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         __func__, rc);
16821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
16831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
16841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != dim ) {
16861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                lib_handle->test_obj.buffer_width = dim->width;
16871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                lib_handle->test_obj.buffer_height = dim->height;
16881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
16891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_app_start_capture(&lib_handle->test_obj, 1);
16901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
16911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_app_start_capture() err=%d\n",
16921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         __func__, rc);
16931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
16941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
16951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            mm_camera_app_wait();
16971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
16981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_app_stop_capture(&lib_handle->test_obj);
16991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
17001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_app_stop_capture() err=%d\n",
17011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         __func__, rc);
17021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
17031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
17041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            // Restart streaming after capture is done
17061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_camera_lib_start_stream(lib_handle);
17071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
17081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_camera_lib_start_stream() err=%d\n",
17091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                         __func__, rc);
17101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
17111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
17121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
17131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17151804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
17161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
17181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
17191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_start_regression_test(int run_tc)
17211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
17221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
17231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_app_t my_cam_app;
17241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG("\nCamera Test Application\n");
17261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(&my_cam_app, 0, sizeof(mm_camera_app_t));
17271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_load_hal(&my_cam_app);
17291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
17301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: mm_app_load_hal failed !!", __func__);
17311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return rc;
17321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(run_tc) {
17351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_unit_test_entry(&my_cam_app);
17361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return rc;
17371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#if 0
17391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if(run_dual_tc) {
17401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        printf("\tRunning Dual camera test engine only\n");
17411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_dual_test_entry(&my_cam_app);
17421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        printf("\t Dual camera engine. EXIT(%d)!!!\n", rc);
17431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        exit(rc);
17441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam#endif
17461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
17471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
17481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint32_t mm_camera_load_tuninglibrary(mm_camera_tuning_lib_params_t *tuning_param)
17501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
17511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  void *(*tuning_open_lib)(void) = NULL;
17521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  CDBG("%s  %d\n", __func__, __LINE__);
17541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  tuning_param->lib_handle = dlopen("libmmcamera_tuning.so", RTLD_NOW);
17551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (!tuning_param->lib_handle) {
17561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s Failed opening libmmcamera_tuning.so\n", __func__);
17571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return -EINVAL;
17581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
17591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  *(void **)&tuning_open_lib  = dlsym(tuning_param->lib_handle,
17611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    "open_tuning_lib");
17621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (!tuning_open_lib) {
17631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s Failed symbol libmmcamera_tuning.so\n", __func__);
17641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return -EINVAL;
17651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
17661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (tuning_param->func_tbl) {
17681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s already loaded tuninglib..", __func__);
17691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return 0;
17701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
17711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  tuning_param->func_tbl = (mm_camera_tune_func_t *)tuning_open_lib();
17731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  if (!tuning_param->func_tbl) {
17741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_ERROR("%s Failed opening library func table ptr\n", __func__);
17751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return -EINVAL;
17761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  }
17771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  CDBG("%s  %d\n", __func__, __LINE__);
17791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam  return 0;
17801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
17811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_open(mm_camera_lib_handle *handle, int cam_id)
17831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
17841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
17851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
17871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
17881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
17891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
17901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    memset(handle, 0, sizeof(mm_camera_lib_handle));
17931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_load_hal(&handle->app_ctx);
17941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if( MM_CAMERA_OK != rc ) {
17951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:mm_app_init err\n", __func__);
17961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
17971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
17981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
17991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->test_obj.buffer_width = DEFAULT_PREVIEW_WIDTH;
18001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->test_obj.buffer_height = DEFAULT_PREVIEW_HEIGHT;
18011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->test_obj.buffer_format = DEFAULT_SNAPSHOT_FORMAT;
18021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->current_params.stream_width = DEFAULT_SNAPSHOT_WIDTH;
18031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->current_params.stream_height = DEFAULT_SNAPSHOT_HEIGHT;
18041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->current_params.af_mode = CAM_FOCUS_MODE_AUTO; // Default to auto focus mode
18051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_open(&handle->app_ctx, (uint8_t)cam_id, &handle->test_obj);
18061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
18071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:mm_app_open() cam_idx=%d, err=%d\n",
18081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                   __func__, cam_id, rc);
18091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
18101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    //rc = mm_app_initialize_fb(&handle->test_obj);
18131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = MM_CAMERA_OK;
18141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
18151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: mm_app_initialize_fb() cam_idx=%d, err=%d\n",
18161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                   __func__, cam_id, rc);
18171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
18181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18201804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
18211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
18231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
18241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_start_stream(mm_camera_lib_handle *handle)
18261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
18271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
18281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_capability_t camera_cap;
18291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
18311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
18321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
18331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
18341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( handle->test_obj.zsl_enabled ) {
18371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_start_preview_zsl(&handle->test_obj);
18381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
18391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: mm_app_start_preview_zsl() err=%d\n",
18401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       __func__, rc);
18411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto EXIT;
18421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
18431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    } else {
18441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        handle->test_obj.enable_reproc = ENABLE_REPROCESSING;
18451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_start_preview(&handle->test_obj);
18461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
18471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: mm_app_start_preview() err=%d\n",
18481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       __func__, rc);
18491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto EXIT;
18501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
18511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    // Configure focus mode after stream starts
18541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_camera_lib_get_caps(handle, &camera_cap);
18551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( MM_CAMERA_OK != rc ) {
18561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      CDBG_ERROR("%s:mm_camera_lib_get_caps() err=%d\n", __func__, rc);
18571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      return -1;
18581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (camera_cap.supported_focus_modes_cnt == 1 &&
18601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      camera_cap.supported_focus_modes[0] == CAM_FOCUS_MODE_FIXED) {
18611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      CDBG("focus not supported");
18621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      handle->test_obj.focus_supported = 0;
18631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      handle->current_params.af_mode = CAM_FOCUS_MODE_FIXED;
18641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    } else {
18651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      handle->test_obj.focus_supported = 1;
18661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = setFocusMode(&handle->test_obj, handle->current_params.af_mode);
18681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
18691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      CDBG_ERROR("%s:autofocus error\n", __func__);
18701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      goto EXIT;
18711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->stream_running = 1;
18731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18741804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
18751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
18761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
18771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_stop_stream(mm_camera_lib_handle *handle)
18791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
18801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
18811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
18831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
18841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
18851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
18861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
18871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
18881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( handle->test_obj.zsl_enabled ) {
18891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_stop_preview_zsl(&handle->test_obj);
18901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
18911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: mm_app_stop_preview_zsl() err=%d\n",
18921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       __func__, rc);
18931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto EXIT;
18941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
18951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    } else {
18961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = mm_app_stop_preview(&handle->test_obj);
18971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        if (rc != MM_CAMERA_OK) {
18981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: mm_app_stop_preview() err=%d\n",
18991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       __func__, rc);
19001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto EXIT;
19011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
19021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
19031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->stream_running = 0;
19051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19061804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
19071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
19081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
19091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_get_caps(mm_camera_lib_handle *handle,
19111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           cam_capability_t *caps)
19121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
19131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
19141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
19161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
19171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
19181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
19191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
19201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == caps ) {
19221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid capabilities structure", __func__);
19231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
19241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
19251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
19261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    *caps = *( (cam_capability_t *) handle->test_obj.cap_buf.mem_info.data );
19281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19291804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
19301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
19321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
19331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_send_command(mm_camera_lib_handle *handle,
19361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                               mm_camera_lib_commands cmd,
19371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                               void *in_data, void *out_data)
19381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
19391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    uint32_t width, height;
19401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
19411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    cam_capability_t *camera_cap = NULL;
19421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    mm_camera_lib_snapshot_params *dim = NULL;
19431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
19451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
19461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
19471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
19481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
19491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    camera_cap = (cam_capability_t *) handle->test_obj.cap_buf.mem_info.data;
19511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
19521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    switch(cmd) {
19531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_FPS_RANGE:
19541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
19551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_fps_range_t range = *(( cam_fps_range_t * )in_data);
19561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setFPSRange(&handle->test_obj, range);
19571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
19581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setFPSRange() err=%d\n",
19591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
19601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
19611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
19621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
19631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
19641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_FLASH:
19651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
19661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_flash_mode_t flash = *(( int * )in_data);
19671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setFlash(&handle->test_obj, flash);
19681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
19691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setFlash() err=%d\n",
19701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
19711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
19721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
19731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
19741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
19751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_BESTSHOT:
19761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
19771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_scene_mode_type scene = *(( int * )in_data);
19781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setScene(&handle->test_obj, scene);
19791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
19801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setScene() err=%d\n",
19811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
19821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
19831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
19841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
19851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
19861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_ZOOM:
19871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
19881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int zoom = *(( int * )in_data);
19891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setZoom(&handle->test_obj, zoom);
19901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
19911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setZoom() err=%d\n",
19921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
19931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
19941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
19951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
19961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
19971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_ISO:
19981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
19991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_iso_mode_type iso = *(( int * )in_data);
20001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setISO(&handle->test_obj, iso);
20011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setISO() err=%d\n",
20031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_SHARPNESS:
20091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int sharpness = *(( int * )in_data);
20111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setSharpness(&handle->test_obj, sharpness);
20121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setSharpness() err=%d\n",
20141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_SATURATION:
20201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int saturation = *(( int * )in_data);
20221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setSaturation(&handle->test_obj, saturation);
20231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setSaturation() err=%d\n",
20251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_CONTRAST:
20311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int contrast = *(( int * )in_data);
20331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setContrast(&handle->test_obj, contrast);
20341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setContrast() err=%d\n",
20361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_SET_TINTLESS:
20421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int tintless = *(( int * )in_data);
20441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setTintless(&handle->test_obj, tintless);
20451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: enlabe/disable:%d tintless() err=%d\n",
20471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, tintless, rc);
20481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_BRIGHTNESS:
20531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int brightness = *(( int * )in_data);
20551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setBrightness(&handle->test_obj, brightness);
20561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setBrightness() err=%d\n",
20581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_EXPOSURE_METERING:
20641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_auto_exposure_mode_type exp = *(( int * )in_data);
20661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setExposureMetering(&handle->test_obj, exp);
20671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setExposureMetering() err=%d\n",
20691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_WB:
20751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                cam_wb_mode_type wb = *(( int * )in_data);
20771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setWhiteBalance(&handle->test_obj, wb);
20781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setWhiteBalance() err=%d\n",
20801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_ANTIBANDING:
20861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int antibanding = *(( int * )in_data);
20881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setAntibanding(&handle->test_obj, antibanding);
20891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
20901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setAntibanding() err=%d\n",
20911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
20921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
20931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
20941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
20951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
20961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_EV:
20971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
20981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int ev = *(( int * )in_data);
20991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = setEVCompensation(&handle->test_obj, ev);
21001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if (rc != MM_CAMERA_OK) {
21011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: setEVCompensation() err=%d\n",
21021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
21031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
21041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
21051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
21071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_ZSL_ENABLE:
21081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data) {
21091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                int enable_zsl = *(( int * )in_data);
21101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                if ( ( enable_zsl != handle->test_obj.zsl_enabled ) &&
21111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        handle->stream_running ) {
21121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    rc = mm_camera_lib_stop_stream(handle);
21131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    if (rc != MM_CAMERA_OK) {
21141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: mm_camera_lib_stop_stream() err=%d\n",
21151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
21161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
21171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    }
21181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    handle->test_obj.zsl_enabled = enable_zsl;
21191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    rc = mm_camera_lib_start_stream(handle);
21201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    if (rc != MM_CAMERA_OK) {
21211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        CDBG_ERROR("%s: mm_camera_lib_start_stream() err=%d\n",
21221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                                   __func__, rc);
21231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        goto EXIT;
21241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    }
21251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                } else {
21261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    handle->test_obj.zsl_enabled = enable_zsl;
21271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                }
21281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
21301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_RAW_CAPTURE:
21311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( 0 == handle->stream_running ) {
21331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR(" %s : Streaming is not enabled!", __func__);
21341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = MM_CAMERA_E_INVALID_OPERATION;
21351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_camera_lib_stop_stream(handle);
21391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
21401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_camera_lib_stop_stream() err=%d\n",
21411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           __func__, rc);
21421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            width = handle->test_obj.buffer_width;
21461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            height = handle->test_obj.buffer_height;
21471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_width =
21481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    (uint32_t)camera_cap->raw_dim[0].width;
21491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_height =
21501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                    (uint32_t)camera_cap->raw_dim[0].height;
21511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_format = DEFAULT_RAW_FORMAT;
21521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s: MM_CAMERA_LIB_RAW_CAPTURE %dx%d\n",
21531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       __func__,
21541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       camera_cap->raw_dim[0].width,
21551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                       camera_cap->raw_dim[0].height);
21561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_app_start_capture_raw(&handle->test_obj, 1);
21571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
21581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_app_start_capture() err=%d\n",
21591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           __func__, rc);
21601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            mm_camera_app_wait();
21641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_app_stop_capture_raw(&handle->test_obj);
21661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
21671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_app_stop_capture() err=%d\n",
21681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           __func__, rc);
21691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_width = width;
21731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_height = height;
21741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->test_obj.buffer_format = DEFAULT_SNAPSHOT_FORMAT;
21751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = mm_camera_lib_start_stream(handle);
21761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
21771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: mm_camera_lib_start_stream() err=%d\n",
21781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                           __func__, rc);
21791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
21831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_JPEG_CAPTURE:
21851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( 0 == handle->stream_running ) {
21861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR(" %s : Streaming is not enabled!", __func__);
21871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                rc = MM_CAMERA_E_INVALID_OPERATION;
21881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( NULL != in_data ) {
21921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                dim = ( mm_camera_lib_snapshot_params * ) in_data;
21931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
21941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
21951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = tuneserver_capture(handle, dim);
21961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
21971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s:capture error %d\n", __func__, rc);
21981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
21991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (handle->test_obj.is_chromatix_reload == TRUE) {
22021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              /**Re-load Chromatix is taken care to make sure Tuned data **
22031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              ** is not lost when capture Snapshot                       **/
22041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              rc = setReloadChromatix(&handle->test_obj,
22051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                (tune_chromatix_t *)&(handle->test_obj.tune_data));
22061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              if (rc != MM_CAMERA_OK) {
22071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: setReloadChromatix failed\n", __func__);
22081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              }
22101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_SET_FOCUS_MODE: {
22141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            cam_focus_mode_type mode = *((cam_focus_mode_type *)in_data);
22151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            handle->current_params.af_mode = mode;
22161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setFocusMode(&handle->test_obj, mode);
22171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              CDBG_ERROR("%s:autofocus error\n", __func__);
22191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              goto EXIT;
22201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
22231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_DO_AF:
22251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (handle->test_obj.focus_supported) {
22261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              rc = handle->test_obj.cam->ops->do_auto_focus(handle->test_obj.cam->camera_handle);
22271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              if (rc != MM_CAMERA_OK) {
22281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s:autofocus error\n", __func__);
22291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              }
22311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              /*Waiting for Auto Focus Done Call Back*/
22321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam              mm_camera_app_wait();
22331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_CANCEL_AF:
22371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = handle->test_obj.cam->ops->cancel_auto_focus(handle->test_obj.cam->camera_handle);
22381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s:autofocus error\n", __func__);
22401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_LOCK_AWB:
22461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setAwbLock(&handle->test_obj, 1);
22471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: AWB locking failed\n", __func__);
22491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_UNLOCK_AWB:
22541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setAwbLock(&handle->test_obj, 0);
22551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: AE unlocking failed\n", __func__);
22571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_LOCK_AE:
22621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setAecLock(&handle->test_obj, 1);
22631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: AE locking failed\n", __func__);
22651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22691804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_UNLOCK_AE:
22701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setAecLock(&handle->test_obj, 0);
22711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if (rc != MM_CAMERA_OK) {
22721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: AE unlocking failed\n", __func__);
22731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
22741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
22751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
22761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_3A_COMMAND: {
22781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam          rc = set3Acommand(&handle->test_obj, (cam_eztune_cmd_data_t *)in_data);
22791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam          if (rc != MM_CAMERA_OK) {
22801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            CDBG_ERROR("%s:3A set command error\n", __func__);
22811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            goto EXIT;
22821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam          }
22831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam          break;
22841804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
22851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_GET_CHROMATIX: {
22871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = getChromatix(&handle->test_obj,
22881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                (tune_chromatix_t *)out_data);
22891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
22901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: getChromatix failed\n", __func__);
22911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
22921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
22931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
22941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
22951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
22961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_RELOAD_CHROMATIX: {
22971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = setReloadChromatix(&handle->test_obj,
22981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             (tune_chromatix_t *)in_data);
22991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: setReloadChromatix failed\n", __func__);
23011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           handle->test_obj.is_chromatix_reload = TRUE;
23041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           memcpy((void *)&(handle->test_obj.tune_data),
23051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             (void *)in_data, sizeof(tune_chromatix_t));
23061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_GET_AFTUNE: {
23101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = getAutofocusParams(&handle->test_obj,
23111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                (tune_autofocus_t *)out_data);
23121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: getAutofocusParams failed\n", __func__);
23141804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_RELOAD_AFTUNE: {
23201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = setReloadAutofocusParams(&handle->test_obj,
23211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             (tune_autofocus_t *)in_data);
23221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: setReloadAutofocusParams failed\n", __func__);
23241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_AUTOFOCUS_TUNING: {
23301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = setAutoFocusTuning(&handle->test_obj, in_data);
23311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: Set AF tuning failed\n", __func__);
23331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_VFE_COMMAND: {
23391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = setVfeCommand(&handle->test_obj, in_data);
23401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: Set vfe command failed\n", __func__);
23421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23441804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23451804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23461804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23471804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       case MM_CAMERA_LIB_SET_POSTPROC_COMMAND: {
23481804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           rc = setPPCommand(&handle->test_obj, in_data);
23491804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           if (rc != MM_CAMERA_OK) {
23501804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             CDBG_ERROR("%s: Set pp command failed\n", __func__);
23511804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam             goto EXIT;
23521804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           }
23531804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam           break;
23541804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam       }
23551804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23561804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        case MM_CAMERA_LIB_WNR_ENABLE: {
23571804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            rc = setWNR(&handle->test_obj, *((uint8_t *)in_data));
23581804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            if ( rc != MM_CAMERA_OK) {
23591804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                CDBG_ERROR("%s: Set wnr enable failed\n", __func__);
23601804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                goto EXIT;
23611804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            }
23621804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        }
23631804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23641804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam      case MM_CAMERA_LIB_NO_ACTION:
23651804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        default:
23661804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam            break;
23671804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    };
23681804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23691804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
23701804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23711804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
23721804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
23731804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_number_of_cameras(mm_camera_lib_handle *handle)
23741804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
23751804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = 0;
23761804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23771804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
23781804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
23791804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
23801804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
23811804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23821804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = handle->app_ctx.num_cameras;
23831804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23841804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
23851804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23861804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
23871804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
23881804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23891804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_close(mm_camera_lib_handle *handle)
23901804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
23911804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
23921804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23931804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if ( NULL == handle ) {
23941804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR(" %s : Invalid handle", __func__);
23951804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        rc = MM_CAMERA_E_INVALID_INPUT;
23961804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
23971804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
23981804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
23991804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    //rc = mm_app_close_fb(&handle->test_obj);
24001804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = MM_CAMERA_OK;
24011804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
24021804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:mm_app_close_fb() err=%d\n",
24031804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                   __func__, rc);
24041804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
24051804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
24061804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24071804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = mm_app_close(&handle->test_obj);
24081804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
24091804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s:mm_app_close() err=%d\n",
24101804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                   __func__, rc);
24111804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        goto EXIT;
24121804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
24131804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24141804e88cf8d533c3fc49b9abcf0b340727fac782Ed TamEXIT:
24151804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
24161804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
24171804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24181804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_camera_lib_set_preview_usercb(
24191804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam   mm_camera_lib_handle *handle, prev_callback cb)
24201804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
24211804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (handle->test_obj.user_preview_cb != NULL) {
24221804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s, already set preview callbacks\n", __func__);
24231804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return -1;
24241804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
24251804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    handle->test_obj.user_preview_cb = *cb;
24261804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return 0;
24271804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
24281804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24291804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tamint mm_app_set_preview_fps_range(mm_camera_test_obj_t *test_obj,
24301804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam                        cam_fps_range_t *fpsRange)
24311804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam{
24321804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    int rc = MM_CAMERA_OK;
24331804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    CDBG_HIGH("%s: preview fps range: min=%f, max=%f.", __func__,
24341804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        fpsRange->min_fps, fpsRange->max_fps);
24351804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    rc = setFPSRange(test_obj, *fpsRange);
24361804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24371804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    if (rc != MM_CAMERA_OK) {
24381804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        CDBG_ERROR("%s: add_parm_entry_tobatch failed !!", __func__);
24391804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam        return rc;
24401804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    }
24411804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam
24421804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam    return rc;
24431804e88cf8d533c3fc49b9abcf0b340727fac782Ed Tam}
2444