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(¶m, 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