10ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed/* 20ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedCopyright (c) 2011-2012, Code Aurora Forum. All rights reserved. 30ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 40ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedRedistribution and use in source and binary forms, with or without 50ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedmodification, are permitted provided that the following conditions are 60ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedmet: 70ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed * Redistributions of source code must retain the above copyright 80ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed notice, this list of conditions and the following disclaimer. 90ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed * Redistributions in binary form must reproduce the above 100ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed copyright notice, this list of conditions and the following 110ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed disclaimer in the documentation and/or other materials provided 120ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed with the distribution. 130ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed * Neither the name of Code Aurora Forum, Inc. nor the names of its 140ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed contributors may be used to endorse or promote products derived 150ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed from this software without specific prior written permission. 160ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 170ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 180ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 190ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 200ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 210ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 220ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 230ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 240ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 250ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 260ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 270ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala SyedIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 280ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed*/ 290ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 300ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <pthread.h> 310ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include "mm_camera_dbg.h" 320ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <errno.h> 33f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang#include <stdbool.h> 340ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <sys/ioctl.h> 350ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <sys/types.h> 360ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <sys/stat.h> 370ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <fcntl.h> 380ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <poll.h> 390ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include <dlfcn.h> 400ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include "mm_qcamera_main_menu.h" 410ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#include "mm_qcamera_app.h" 420ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 430ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 440ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedmm_camera_app_t my_cam_app; 450ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 460ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedstatic pthread_mutex_t app_mutex; 470ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedstatic int thread_status = 0; 480ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedstatic pthread_cond_t app_cond_v; 490ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 500ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#define MM_QCAMERA_APP_WAIT_TIME 1000000000 510ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 520ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_camera_app_timedwait() 530ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 540ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = 0; 550ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_lock(&app_mutex); 56f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang if(false == thread_status) { 570ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed struct timespec tw; 580ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(&tw, 0, sizeof tw); 590ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed tw.tv_sec = 0; 600ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed tw.tv_nsec = time(0) + MM_QCAMERA_APP_WAIT_TIME; 610ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 620ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed //pthread_cond_wait(&app_cond_v, &app_mutex); 630ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed rc = pthread_cond_timedwait(&app_cond_v, &app_mutex,&tw); 64f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang thread_status = false; 650ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 660ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_unlock(&app_mutex); 670ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 680ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 690ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 700ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_camera_app_wait() 710ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 720ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = 0; 730ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_lock(&app_mutex); 74f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang if(false == thread_status){ 750ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_cond_wait(&app_cond_v, &app_mutex); 76f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang thread_status = false; 770ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 780ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_unlock(&app_mutex); 790ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 800ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 810ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 820ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid mm_camera_app_done() 830ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 840ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_lock(&app_mutex); 85f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang thread_status = true; 860ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_cond_signal(&app_cond_v); 870ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pthread_mutex_unlock(&app_mutex); 880ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 890ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 900ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 910ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedmm_camera_app_obj_t *mm_app_get_cam_obj(int8_t cam_id) 920ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 930ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *temp = my_cam_app.obj[cam_id]; 940ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return temp; 950ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 960ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 970ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid mm_app_user_ptr(int use_user_ptr) 980ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 990ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.use_user_ptr = use_user_ptr; 1000ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 1010ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 1020ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid mm_app_set_dim_def(cam_ctrl_dimension_t *dim) 1030ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 1040ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_width = WVGA_WIDTH; 1050ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_height = WVGA_HEIGHT; 1060ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed input_display.user_input_display_width = dim->display_width; 1070ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed input_display.user_input_display_height = dim->display_height; 1080ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_width = WVGA_WIDTH; 1090ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_width = CEILING32(dim->video_width); 1100ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_height = WVGA_HEIGHT; 1110ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_video_width = dim->video_width; 1120ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_video_height = dim->video_height; 1130ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->picture_width = MP1_WIDTH; 1140ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->picture_height = MP1_HEIGHT; 1150ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_picture_dx = dim->picture_width; 1160ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_picture_dy = dim->picture_height; 1170ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->ui_thumbnail_height = QVGA_HEIGHT; 1180ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->ui_thumbnail_width = QVGA_WIDTH; 1190ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_height = dim->ui_thumbnail_height; 1200ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_width = dim->ui_thumbnail_width; 1210ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_picture_width = dim->picture_width; 1220ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_picture_height = dim->picture_height; 1230ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_thumb_width = dim->thumbnail_width; 1240ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->orig_thumb_height = dim->thumbnail_height; 1250ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->raw_picture_height = MP1_HEIGHT; 1260ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->raw_picture_width = MP1_WIDTH; 1270ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->hjr_xtra_buff_for_bayer_filtering; 1280ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->prev_format = CAMERA_YUV_420_NV21; 1290ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->enc_format = CAMERA_YUV_420_NV12; 1300ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumb_format = CAMERA_YUV_420_NV21; 1310ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->main_img_format = CAMERA_YUV_420_NV21; 1320ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->prev_padding_format = CAMERA_PAD_TO_4K; 1330ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_luma_width = dim->display_width; 1340ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_luma_height = dim->display_height; 1350ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_chroma_width = dim->display_width; 1360ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->display_chroma_height = dim->display_height; 1370ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_luma_width = dim->orig_video_width; 1380ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_luma_height = dim->orig_video_height; 1390ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_chroma_width = dim->orig_video_width; 1400ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->video_chroma_height = dim->orig_video_height; 1410ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_luma_width = dim->thumbnail_width; 1420ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_luma_height = dim->thumbnail_height; 1430ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_chroma_width = dim->thumbnail_width; 1440ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->thumbnail_chroma_height = dim->thumbnail_height; 1450ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->main_img_luma_width = dim->picture_width; 1460ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->main_img_luma_height = dim->picture_height; 1470ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->main_img_chroma_width = dim->picture_width; 1480ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dim->main_img_chroma_height = dim->picture_height; 1490ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 1500ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 1510ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_load_hal() 1520ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 1530ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(&my_cam_app, 0, sizeof(my_cam_app)); 1540ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(&my_cam_app.hal_lib, 0, sizeof(hal_interface_lib_t)); 1550ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#if defined(_MSM7630_) 1560ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.hal_lib.ptr = dlopen("/usr/lib/hw/camera.msm7630.so", RTLD_LAZY); 1570ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#elif defined(_MSM7627A_) 1580ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.hal_lib.ptr = dlopen("/usr/lib/hw/camera.msm7627A.so", RTLD_LAZY); 1590ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#else 1600ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed //my_cam_app.hal_lib.ptr = dlopen("hw/camera.msm8960.so", RTLD_NOW); 1610ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.hal_lib.ptr = dlopen("libmmcamera_interface_badger.so", RTLD_NOW); 1620ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#endif 1630ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if (!my_cam_app.hal_lib.ptr) { 1640ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s Error opening HAL library %s\n", __func__, dlerror()); 1650ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 1660ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 1670ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed *(void **)&(my_cam_app.hal_lib.mm_camera_query) = 1680ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dlsym(my_cam_app.hal_lib.ptr, 1690ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed "camera_query"); 1700ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed *(void **)&(my_cam_app.hal_lib.mm_camera_open) = 1710ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed dlsym(my_cam_app.hal_lib.ptr, 1720ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed "camera_open"); 1730ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return 0; 1740ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 1750ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 1760ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_init() 1770ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 1780ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 1790ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:BEGIN\n", __func__); 1800ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.cam_info = (mm_camera_info_t *)my_cam_app.hal_lib.mm_camera_query(&my_cam_app.num_cameras); 1810ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(my_cam_app.cam_info == NULL) { 1820ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s: Failed to query camera\n", __func__); 1830ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed rc = -1; 1840ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 1850ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END, num_cameras = %d\n", __func__, my_cam_app.num_cameras); 1860ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 1870ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 1880ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 1890ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedstatic void notify_evt_cb(uint32_t camera_handle, 1900ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_event_t *evt,void *user_data) 1910ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 1920ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:E evt = %d",__func__,evt->event_type); 1930ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 1940ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed switch(evt->event_type) 1950ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed { 1960ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case MM_CAMERA_EVT_TYPE_CH: 1970ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 1980ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case MM_CAMERA_EVT_TYPE_CTRL: 1990ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 2000ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case MM_CAMERA_EVT_TYPE_STATS: 2010ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 2020ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case MM_CAMERA_EVT_TYPE_INFO: 2030ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 2040ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed default: 2050ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 2060ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2070ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:X",__func__); 2080ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 2090ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2100ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_open(uint8_t cam_id) 2110ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 2120ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 2130ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = NULL; 2140ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int i; 2150ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_event_type_t evt; 2160ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2170ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme = mm_app_get_cam_obj(cam_id); 2180ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2190ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:BEGIN\n", __func__); 2200ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(pme != NULL) { 2210ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:cam already open.nop\n",__func__); 2220ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed goto end; 2230ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2240ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.cam_open = cam_id; 2250ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.obj[cam_id] = (mm_camera_app_obj_t *)malloc(sizeof(mm_camera_app_obj_t)); 2260ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme = my_cam_app.obj[cam_id]; 2270ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2280ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->mem_cam = (mm_camear_mem_vtbl_t *)malloc(sizeof(mm_camear_mem_vtbl_t)); 2290ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(pme->mem_cam,0,sizeof(mm_camear_mem_vtbl_t)); 2300ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->mem_cam->user_data = pme; 2310ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2320ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam = my_cam_app.hal_lib.mm_camera_open(cam_id,pme->mem_cam); 2330ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(pme->cam == NULL) { 2340ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:dev open error=%d\n", __func__, rc); 2350ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(pme,0, sizeof(pme)); 2360ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 2370ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2380ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("Open Camera id = %d handle = %d",cam_id,pme->cam->camera_handle); 2390ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2400ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->ch_id = cam_id; 241f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang pme->open_flag = true; 2420ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_app_set_dim_def(&pme->dim); 2430ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2440ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed for (i = 0; i < MM_CAMERA_EVT_TYPE_MAX; i++) { 2450ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed evt = (mm_camera_event_type_t) i; 2460ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam->ops->register_event_notify(pme->cam->camera_handle,notify_evt_cb,pme,evt); 2470ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2480ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam_state = CAMERA_STATE_OPEN; 2490ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam_mode = CAMERA_MODE; 2500ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->fullSizeSnapshot = 0; 2510ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2520ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->ch_id = pme->cam->ops->ch_acquire(pme->cam->camera_handle); 2530ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("Channel Acquired Successfully %d",pme->ch_id); 2540ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedend: 2550ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END, rc=%d\n", __func__, rc); 2560ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 2570ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 2580ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2590ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_close(int8_t cam_id) 2600ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 2610ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 2620ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 2630ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2640ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:BEGIN\n", __func__); 2650ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(!pme->cam) { 2660ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:cam already closed. nop\n",__func__); 2670ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed goto end; 2680ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2690ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2700ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam->ops->ch_release(pme->cam->camera_handle,pme->ch_id); 2710ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam->ops->camera_close(pme->cam->camera_handle); 272f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang pme->open_flag = false; 2730ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam = NULL; 2740ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->my_id = 0; 2750ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed free(pme->mem_cam); 2760ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->mem_cam = NULL; 2770ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(&pme->dim, 0, sizeof(pme->dim)); 2780ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memset(&pme->dim, 0, sizeof(pme->dim)); 2790ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2800ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed free(pme); 2810ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme = NULL; 2820ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.obj[cam_id] = NULL; 2830ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2840ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedend: 2850ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END, rc=%d\n", __func__, rc); 2860ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 2870ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 2880ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 2890ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid switchRes(int cam_id) 2900ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 2910ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 2920ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 2930ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed switch(pme->cam_state) { 2940ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_RECORD: 2950ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != stopRecording(cam_id)){ 2960ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc); 2970ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 2980ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 2990ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_PREVIEW: 3000ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != mm_app_stop_preview(cam_id)){ 3010ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__); 3020ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 3030ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3040ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 3050ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_SNAPSHOT: 3060ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed default: 3070ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 3080ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3090ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 3100ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid switchCamera(int cam_id) 3110ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 3120ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 3130ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 3140ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3150ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(my_cam_app.cam_open == cam_id){ 3160ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return; 3170ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3180ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3190ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed switch(pme->cam_state) { 3200ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_RECORD: 3210ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != stopRecording(cam_id)){ 3220ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc); 3230ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 3240ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3250ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_PREVIEW: 3260ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != mm_app_stop_preview(cam_id)){ 3270ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__); 3280ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return -1; 3290ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3300ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 3310ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed case CAMERA_STATE_SNAPSHOT: 3320ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed default: 3330ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed break; 3340ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3350ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3360ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_app_close(my_cam_app.cam_open); 3370ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_app_open(cam_id); 3380ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 3390ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3400ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_set_dim(int8_t cam_id, cam_ctrl_dimension_t *dim) 3410ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 3420ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 3430ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 3440ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3450ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:BEGIN\n", __func__); 3460ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3470ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memcpy(&pme->dim, dim, sizeof(cam_ctrl_dimension_t)); 3480ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != (rc = pme->cam->ops->set_parm( 3490ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam->camera_handle,MM_CAMERA_PARM_DIMENSION, &pme->dim))) 3500ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed { 3510ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG_ERROR("%s: set dimension err=%d\n", __func__, rc); 3520ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3530ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END, rc=%d\n", __func__, rc); 3540ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 3550ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 3560ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3570ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_get_dim(int8_t cam_id, cam_ctrl_dimension_t *dim) 3580ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 3590ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed int rc = MM_CAMERA_OK; 3600ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#if 0 3610ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 3620ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:BEGIN\n", __func__); 363f5198bf2ec5f39e8a46552172124bd7411f5c63fShuzhen Wang if(pme->open_flag != true) { 3640ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s: dev not open yet\n", __func__); 3650ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed rc = -MM_CAMERA_E_INVALID_OPERATION; 3660ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed goto end; 3670ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3680ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed /* now we only use the upper portion. TBD: needs to be fixed later */ 3690ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed //memcpy(&pme->dim, dim, sizeof(cam_ctrl_dimension_t)); 3700ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(MM_CAMERA_OK != (rc = pme->cam->cfg->get_parm(pme->cam, 3710ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed MM_CAMERA_PARM_DIMENSION, &pme->dim))) { 3720ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s: set dimension err=%d\n", __func__, rc); 3730ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed } 3740ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s: raw_w=%d,raw_h=%d\n", 3750ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed __func__, pme->dim.orig_picture_width, pme->dim.orig_picture_height); 3760ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed if(dim) 3770ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed memcpy(dim, &pme->dim, sizeof(cam_ctrl_dimension_t)); 3780ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3790ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedend: 3800ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END, rc=%d\n", __func__, rc); 3810ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed#endif 3820ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return rc; 3830ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 3840ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3850ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedvoid mm_app_close_ch(int cam_id, int ch_type) 3860ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 3870ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 3880ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3890ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed pme->cam->ops->ch_release(pme->cam->camera_handle,pme->ch_id); 3900ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed CDBG("%s:END,cam_id = %d, ch = %d\n", __func__, cam_id, ch_type); 3910ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3920ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 3930ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 3940ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_unit_test() 3950ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 3960ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.run_sanity = 1; 3970ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_app_unit_test_entry(&my_cam_app); 3980ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return 0; 3990ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 4000ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed 4010ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syedint mm_app_dual_test() 4020ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed{ 4030ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed my_cam_app.run_sanity = 1; 4040ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed mm_app_dual_test_entry(&my_cam_app); 4050ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed return 0; 4060ac1f42da2fc99003156c512fcea3fc6338912ceAzam Sadiq Pasha Kapatrala Syed} 407