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