14f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar/* 26b41912bc74d1c799fbf7888e7d6af28ad3164ffDuy TruongCopyright (c) 2011-2012, The Linux Foundation. All rights reserved. 34f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 44f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarRedistribution and use in source and binary forms, with or without 54f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarmodification, are permitted provided that the following conditions are 64f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarmet: 74f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar * Redistributions of source code must retain the above copyright 84f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar notice, this list of conditions and the following disclaimer. 94f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar * Redistributions in binary form must reproduce the above 104f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar copyright notice, this list of conditions and the following 114f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar disclaimer in the documentation and/or other materials provided 124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar with the distribution. 136b41912bc74d1c799fbf7888e7d6af28ad3164ffDuy Truong * Neither the name of The Linux Foundation nor the names of its 144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar contributors may be used to endorse or promote products derived 154f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar from this software without specific prior written permission. 164f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarTHIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 184f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 214f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 224f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 234f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 244f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 254f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 264f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 274f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad GaonkarIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 284f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar*/ 294f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <pthread.h> 314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <errno.h> 324f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <sys/ioctl.h> 334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <sys/types.h> 344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <sys/stat.h> 354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <fcntl.h> 364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include <poll.h> 37ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li#include "mm_camera_dbg.h" 384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#include "mm_qcamera_app.h" 394f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#define BUFF_SIZE_128 128 414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 42ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li#ifdef TEST_ABORT_JPEG_ENCODE 43ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Listatic uint8_t aborted_flag = 1; 44ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li#endif 45ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar//static mm_camera_ch_data_buf_t *mCurrentFrameEncoded; 474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int JpegOffset = 0; 484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int raw_snapshot_cnt = 0; 494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int snapshot_cnt = 0; 504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic pthread_mutex_t g_s_mutex; 514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int g_status = 0; 524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic pthread_cond_t g_s_cond_v; 534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabextern void dumpFrameToFile(mm_camera_buf_def_t* newFrame, int w, int h, char* name, int main_422,char *ext); 55ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liextern int mm_app_open_zsl(int cam_id); 56ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liextern int mm_app_open_camera(int cam_id); 57ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liextern int mm_app_start_preview(int cam_id); 58ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liextern int mm_stream_alloc_bufs(mm_camera_app_obj_t *pme, 59ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camear_app_buf_t* app_bufs, 60ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_frame_len_offset *frame_offset_info, 61ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint8_t num_bufs); 62ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liextern int mm_stream_release_bufs(mm_camera_app_obj_t *pme, 63ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camear_app_buf_t* app_bufs); 64eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkarextern int mm_stream_invalid_cache(mm_camera_app_obj_t *pme, 65eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_camera_buf_def_t *frame); 664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic void mm_app_snapshot_done() 684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_mutex_lock(&g_s_mutex); 704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar g_status = TRUE; 714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_cond_signal(&g_s_cond_v); 724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_mutex_unlock(&g_s_mutex); 734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int mm_app_dump_snapshot_frame(struct msm_frame *frame, 764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar uint32_t len, int is_main, int is_raw) 774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar char bufp[BUFF_SIZE_128]; 794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int file_fdp; 804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = 0; 814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (is_raw) { 834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar snprintf(bufp, BUFF_SIZE_128, "/data/main_raw_%d.yuv", raw_snapshot_cnt); 844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } else { 854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (is_main) { 864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar snprintf(bufp, BUFF_SIZE_128, "/data/main_%d.yuv", snapshot_cnt); 874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } else { 884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar snprintf(bufp, BUFF_SIZE_128, "/data/thumb_%d.yuv", snapshot_cnt); 894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar file_fdp = open(bufp, O_RDWR | O_CREAT, 0777); 934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (file_fdp < 0) { 954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("cannot open file %s\n", bufp); 964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 994f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:dump snapshot frame to '%s'\n", __func__, bufp); 1004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar write(file_fdp, 1014f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar (const void *)frame->buffer, len); 1024f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar close(file_fdp); 1034f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 1044f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 1054f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1064f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1084f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic void mm_app_dump_jpeg_frame(const void * data, uint32_t size, char* name, char* ext, int index) 1094f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1104f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar char buf[32]; 1114f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int file_fd; 1124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if ( data != NULL) { 1134f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar char * str; 114492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang snprintf(buf, sizeof(buf), "/data/%s_%d.%s", name, index, ext); 11577572031d0000db5619707b9c17ad11343aa5f7dMuhua Li CDBG("%s: %s size =%d, jobId=%d", __func__, buf, size, index); 1164f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar file_fd = open(buf, O_RDWR | O_CREAT, 0777); 1174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar write(file_fd, data, size); 1184f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar close(file_fd); 1194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 1204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1214f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 122ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Listatic int mm_app_set_thumbnail_fmt(int cam_id, mm_camera_image_fmt_t *fmt) 1234f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1244f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 1254f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 1264f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1274f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->meta_header = MM_CAMEAR_META_DATA_TYPE_DEF; 1284f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->fmt = pme->dim.thumb_format; 1294f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->width = pme->dim.thumbnail_width; 1304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->height = pme->dim.thumbnail_height; 131492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang if (cam_id == 0) { 132492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang /* back camera, rotate 90 */ 133492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang fmt->rotation = 90; 134492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang } 1354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("Thumbnail Dimension = %dX%d",fmt->width,fmt->height); 1364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 1374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 139ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liint mm_app_set_snapshot_fmt(int cam_id, mm_camera_image_fmt_t *fmt) 1404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 1434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 1444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->meta_header = MM_CAMEAR_META_DATA_TYPE_DEF; 1454f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->fmt = pme->dim.main_img_format; 1464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->width = pme->dim.picture_width; 1474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->height = pme->dim.picture_height; 148492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang if (cam_id == 0) { 149492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang /* back camera, rotate 90 */ 150492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang fmt->rotation = 90; 151492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang } 1524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("Snapshot Dimension = %dX%d",fmt->width,fmt->height); 1534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 1544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 156ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liint mm_app_set_live_snapshot_fmt(int cam_id, mm_camera_image_fmt_t *fmt) 1574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 1594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 1604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->meta_header = MM_CAMEAR_META_DATA_TYPE_DEF; 1614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->fmt = pme->dim.enc_format; 1624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->width = pme->dim.video_width; 1634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar fmt->height = pme->dim.video_height; 1644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("Livesnapshot Dimension = %dX%d",fmt->width,fmt->height); 1654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 1664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 16838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_set_raw_snapshot_fmt(int cam_id,mm_camera_image_fmt_t *fmt) 1694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 1714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 1724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 17338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab fmt->meta_header = MM_CAMEAR_META_DATA_TYPE_DEF; 17438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab fmt->fmt = pme->dim.raw_img_format; 17538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab fmt->width = pme->dim.raw_picture_width; 17638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab fmt->height = pme->dim.raw_picture_height; 17738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (cam_id == 0) { 17838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab /* back camera, rotate 90 */ 17938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab fmt->rotation = 90; 1804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 18138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: Raw Snapshot Dimension = %d X %d",__func__,pme->dim.raw_picture_width,pme->dim.raw_picture_height); 1824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 1834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 1844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar/* This callback is received once the complete JPEG encoding is done */ 186ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Listatic void jpeg_encode_cb(jpeg_job_status_t status, 187ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint8_t thumbnailDroppedFlag, 188ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t client_hdl, 189ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t jobId, 190ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint8_t* out_data, 191ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t data_size, 192ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li void *userData) 1934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc; 1954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int i = 0; 1964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_buf_def_t *main_frame = NULL; 1974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_buf_def_t *thumb_frame = NULL; 1984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = NULL; 199ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s: BEGIN\n", __func__); 2004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 201ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme = (mm_camera_app_obj_t *)userData; 202ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (jobId != pme->current_job_id || !pme->current_job_frames) { 203ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: NULL current job frames or not matching job ID (%d, %d)", 204ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li __func__, jobId, pme->current_job_id); 205ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return; 206ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 2074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 208ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* dump jpeg img */ 209ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: job %d, status=%d, thumbnail_dropped=%d", 210ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li __func__, jobId, status, thumbnailDroppedFlag); 211ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (status == JPEG_JOB_STATUS_DONE) { 212492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang mm_app_dump_jpeg_frame(out_data, data_size, "jpeg_dump", "jpg", pme->my_id); 213ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 2144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 215ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* buf done current encoding frames */ 216ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_id = 0; 217ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li for (i=0; i<pme->current_job_frames->num_bufs; i++) { 218ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->current_job_frames->camera_handle, 219ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames->ch_id, 220ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames->bufs[i])) { 221ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: Failed in Qbuf\n", __func__); 222ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 223ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 224ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li free(pme->current_job_frames); 225ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames = NULL; 2264f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 227ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* signal snapshot is done */ 228ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_app_snapshot_done(); 229ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li} 2304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 231ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Listatic int encodeData(mm_camera_app_obj_t *pme, 232ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_super_buf_t* recvd_frame) 233ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li{ 234ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li int rc = -1; 235eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar int i,index = -1; 236ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_jpeg_job job; 237ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_buf_def_t *main_frame = NULL; 238ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_buf_def_t *thumb_frame = NULL; 239ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li src_image_buffer_info* main_buf_info = NULL; 240ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li src_image_buffer_info* thumb_buf_info = NULL; 241ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_frame_len_offset main_offset; 242ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_frame_len_offset thumb_offset; 243ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 244ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* dump raw img for debug purpose */ 245ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s : total streams = %d",__func__,recvd_frame->num_bufs); 246ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li for (i=0; i<recvd_frame->num_bufs; i++) { 247ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id == recvd_frame->bufs[i]->stream_id) { 248ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_frame = recvd_frame->bufs[i]; 249ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("mainframe frame_idx = %d fd = %d frame length = %d",main_frame->frame_idx,main_frame->fd,main_frame->frame_len); 25038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab dumpFrameToFile(main_frame,pme->dim.picture_width,pme->dim.picture_height,"main", 1,"yuv"); 251ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } else if (pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id == recvd_frame->bufs[i]->stream_id){ 252ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_frame = recvd_frame->bufs[1]; 253ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("thumnail frame_idx = %d fd = %d frame length = %d",thumb_frame->frame_idx,thumb_frame->fd,thumb_frame->frame_len); 25438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab dumpFrameToFile(thumb_frame,pme->dim.thumbnail_width,pme->dim.thumbnail_height,"thumb", 1,"yuv"); 255ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 2564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 2574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 258ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (main_frame == NULL) { 259ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: Main frame is NULL", __func__); 260ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 261ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 2624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 263ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* remember current frames being encoded */ 264ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames = 265ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li (mm_camera_super_buf_t *)malloc(sizeof(mm_camera_super_buf_t)); 266ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (!pme->current_job_frames) { 267ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: No memory for current_job_frames", __func__); 268ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 269ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 270ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li memcpy(pme->current_job_frames, recvd_frame, sizeof(mm_camera_super_buf_t)); 271ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 272ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li memset(&job, 0, sizeof(job)); 273ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.job_type = JPEG_JOB_TYPE_ENCODE; 274ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.jpeg_cb = jpeg_encode_cb; 275ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.userdata = (void*)pme; 276ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.exif_data = NULL; 277ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.exif_numEntries = 0; 278ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.rotation = 0; 279ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.buf_info.src_imgs.src_img_num = recvd_frame->num_bufs; 280492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang job.encode_job.encode_parm.rotation = 0; 281492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang if (pme->my_id == 0) { 282492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang /* back camera, rotate 90 */ 283492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang job.encode_job.encode_parm.rotation = 90; 284492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang } 285ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 286ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* fill in main src img encode param */ 287ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info = &job.encode_job.encode_parm.buf_info.src_imgs.src_img[JPEG_SRC_IMAGE_TYPE_MAIN]; 288ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->type = JPEG_SRC_IMAGE_TYPE_MAIN; 289ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->color_format = MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2; //TODO 290ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->quality = 85; 291ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_dim.width = pme->dim.picture_width; 292ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_dim.height = pme->dim.picture_height; 293ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->out_dim.width = pme->dim.picture_width; 294ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->out_dim.height = pme->dim.picture_height; 295ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->crop.width = pme->dim.picture_width; 296ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->crop.height = pme->dim.picture_height; 297ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->crop.offset_x = 0; 298ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->crop.offset_y = 0; 299ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->img_fmt = JPEG_SRC_IMAGE_FMT_YUV; 300ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->num_bufs = 1; 301ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_image[0].fd = main_frame->fd; 302ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_image[0].buf_vaddr = main_frame->buffer; 303ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->cam->ops->get_stream_parm(pme->cam->camera_handle, 304ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->ch_id, 305ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id, 306ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li MM_CAMERA_STREAM_OFFSET, 307ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &main_buf_info->src_image[0].offset); 308ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s: main offset: num_planes=%d, frame length=%d, y_offset=%d, cbcr_offset=%d", 309ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li __func__, main_buf_info->src_image[0].offset.num_planes, 310ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_image[0].offset.frame_len, 311ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_image[0].offset.mp[0].offset, 312ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li main_buf_info->src_image[0].offset.mp[1].offset); 313ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 314eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_clear_invalid_cache(pme,main_frame); 315eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar 316ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (thumb_frame) { 317ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* fill in thumbnail src img encode param */ 318ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info = &job.encode_job.encode_parm.buf_info.src_imgs.src_img[JPEG_SRC_IMAGE_TYPE_THUMB]; 319ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->type = JPEG_SRC_IMAGE_TYPE_THUMB; 320ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->color_format = MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2; //TODO 321ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->quality = 85; 322ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->src_dim.width = pme->dim.thumbnail_width; 323ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->src_dim.height = pme->dim.thumbnail_height; 324ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->out_dim.width = pme->dim.thumbnail_width; 325ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->out_dim.height = pme->dim.thumbnail_height; 326ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->crop.width = pme->dim.thumbnail_width; 327ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->crop.height = pme->dim.thumbnail_height; 328ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->crop.offset_x = 0; 329ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->crop.offset_y = 0; 330ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->img_fmt = JPEG_SRC_IMAGE_FMT_YUV; 331ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->num_bufs = 1; 332ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->src_image[0].fd = thumb_frame->fd; 333ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li thumb_buf_info->src_image[0].buf_vaddr = thumb_frame->buffer; 334ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->cam->ops->get_stream_parm(pme->cam->camera_handle, 335ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->ch_id, 336ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id, 337ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li MM_CAMERA_STREAM_OFFSET, 338ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &thumb_buf_info->src_image[0].offset); 339ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 340ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 341ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* fill in sink img param */ 342ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.buf_info.sink_img.buf_len = pme->jpeg_buf.bufs[0].frame_len; 343ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.buf_info.sink_img.buf_vaddr = pme->jpeg_buf.bufs[0].buffer; 344ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li job.encode_job.encode_parm.buf_info.sink_img.fd = pme->jpeg_buf.bufs[0].fd; 345ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 346eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_clear_invalid_cache(pme,thumb_frame); 347eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar 348ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li rc = pme->jpeg_ops.start_job(pme->jpeg_hdl, &job, &pme->current_job_id); 349ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if ( 0 != rc ) { 350ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li free(pme->current_job_frames); 351ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames = NULL; 352ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 3534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 354ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 3554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 3564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 35738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabstatic void snapshot_yuv_cb(mm_camera_super_buf_t *bufs, 358ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li void *user_data) 3594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 3604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 361ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li int rc; 362ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li int i = 0; 363ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_buf_def_t *main_frame = NULL; 364ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_buf_def_t *thumb_frame = NULL; 365ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_app_obj_t *pme = NULL; 36677572031d0000db5619707b9c17ad11343aa5f7dMuhua Li char* cmd = "This is a private cmd from test app"; 367ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 368ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s: BEGIN\n", __func__); 369ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 370ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme = (mm_camera_app_obj_t *)user_data; 371ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 37277572031d0000db5619707b9c17ad11343aa5f7dMuhua Li CDBG("%s: send private ioctl here", __func__); 37377572031d0000db5619707b9c17ad11343aa5f7dMuhua Li pme->cam->ops->send_command(bufs->camera_handle, 37477572031d0000db5619707b9c17ad11343aa5f7dMuhua Li MM_CAMERA_CMD_TYPE_PRIVATE, 37577572031d0000db5619707b9c17ad11343aa5f7dMuhua Li 0, 37677572031d0000db5619707b9c17ad11343aa5f7dMuhua Li strlen(cmd) + 1, 37777572031d0000db5619707b9c17ad11343aa5f7dMuhua Li (void *)cmd); 37877572031d0000db5619707b9c17ad11343aa5f7dMuhua Li 379ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* start jpeg encoding job */ 380ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li rc = encodeData(pme, bufs); 381ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 382ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* buf done rcvd frames in error case */ 383ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if ( 0 != rc ) { 384ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li for (i=0; i<bufs->num_bufs; i++) { 385ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, 386ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li bufs->ch_id, 387ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li bufs->bufs[i])) { 388d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG_ERROR("%s: Failed in Qbuf\n", __func__); 389ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 390eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_invalid_cache(pme,bufs->bufs[i]); 391ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 3924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 393ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li#ifdef TEST_ABORT_JPEG_ENCODE 394ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li else { 395ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (aborted_flag) { 396ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li aborted_flag = 0; 397ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* abort the job */ 398ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s: abort jpeg encode job here", __func__); 399ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li rc = pme->jpeg_ops.abort_job(pme->jpeg_hdl, pme->current_job_id); 400ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (NULL != pme->current_job_frames) { 401ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li free(pme->current_job_frames); 402ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames = NULL; 403ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 404ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG("%s: abort jpeg encode job returns %d", __func__, rc); 405ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li for (i=0; i<bufs->num_bufs; i++) { 406ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != pme->cam->ops->qbuf(bufs->camera_handle, 407ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li bufs->ch_id, 408ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li bufs->bufs[i])) { 409ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: Failed in Qbuf\n", __func__); 410ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 411eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_invalid_cache(pme,bufs->bufs[i]); 412ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 4134f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 414ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* signal snapshot is done */ 415ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_app_snapshot_done(); 416ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 417ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 418ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li#endif 4194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 420d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG("%s: END\n", __func__); 4214f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 4224f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 42338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabstatic void snapshot_raw_cb(mm_camera_super_buf_t *recvd_frame, 42438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab void *user_data) 42538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab{ 42638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int rc; 42738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int i = 0; 42838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_buf_def_t *main_frame = NULL; 42938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = NULL; 43038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 43138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: BEGIN\n", __func__); 43238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 43338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme = (mm_camera_app_obj_t *)user_data; 43438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 43538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id == recvd_frame->bufs[i]->stream_id) { 43638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab main_frame = recvd_frame->bufs[i]; 43738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("mainframe frame_idx = %d fd = %d frame length = %d",main_frame->frame_idx,main_frame->fd,main_frame->frame_len); 43838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab dumpFrameToFile(main_frame,pme->dim.raw_picture_width,pme->dim.raw_picture_height,"raw_main", 1,"raw"); 43938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 44038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->cam->camera_handle,pme->ch_id, 44138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab main_frame)) { 44238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s: Failed in Qbuf\n", __func__); 44338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 44438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 44538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_app_snapshot_done(); 44638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab} 44738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 4484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic int encodeDisplayAndSave(mm_camera_super_buf_t* recvd_frame, 4494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int enqueued, mm_camera_app_obj_t *pme) 4504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 4514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int ret = -1; 4524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar#if 0 4534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Send frame for encoding", __func__); 4564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar ret = encodeData(recvd_frame, pme->snapshot_buf.frame_len, 4574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar enqueued, pme); 4584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (!ret) { 4594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Failure configuring JPEG encoder", __func__); 4604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 4614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 462d2288970ead06a397966b05878c05026ed150af3Muhua Li LOGD("%s: X", __func__); 463d2288970ead06a397966b05878c05026ed150af3Muhua Li#endif 4644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return ret; 4654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 466ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 4674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_add_snapshot_stream(int cam_id) 4684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 4694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 4704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 4714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id = pme->cam->ops->add_stream(pme->cam->camera_handle,pme->ch_id, 4734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar NULL,pme, 4744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar MM_CAMERA_SNAPSHOT_MAIN, 0); 4754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("Add Snapshot main is successfull stream ID = %d",pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id); 4774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (!pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id) { 4786137a0ca1ffe6fa00c11b3d38400c3713cd067d5Lakshmi Narayana Kalavala CDBG_ERROR("%s:snapshot main streaming err=%d\n", __func__, rc); 4794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 4804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 4814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 4824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id = pme->cam->ops->add_stream(pme->cam->camera_handle,pme->ch_id, 4844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar NULL,pme, 4854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar MM_CAMERA_SNAPSHOT_THUMBNAIL, 0); 4864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (!pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id) { 4876137a0ca1ffe6fa00c11b3d38400c3713cd067d5Lakshmi Narayana Kalavala CDBG_ERROR("%s:snapshot thumbnail streaming err=%d\n", __func__, rc); 4884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 4894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 4904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 4914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 4924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 4934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 4944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 4954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 4964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarvoid mm_app_set_snapshot_mode(int cam_id,int op_mode) 4974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 49877572031d0000db5619707b9c17ad11343aa5f7dMuhua Li denoise_param_t wnr; 4994f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 5004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam->ops->set_parm(pme->cam->camera_handle,MM_CAMERA_PARM_OP_MODE, &op_mode); 5014f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 50277572031d0000db5619707b9c17ad11343aa5f7dMuhua Li /* set wnr enabled */ 50377572031d0000db5619707b9c17ad11343aa5f7dMuhua Li memset(&wnr, 0, sizeof(denoise_param_t)); 504492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang wnr.denoise_enable = 0; 50577572031d0000db5619707b9c17ad11343aa5f7dMuhua Li wnr.process_plates = 0; 506492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang // pme->cam->ops->set_parm(pme->cam->camera_handle, MM_CAMERA_PARM_WAVELET_DENOISE, &wnr); 5074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 5084f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 50938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_config_raw_format(int cam_id) 51038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab{ 51138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int rc = MM_CAMERA_OK; 51238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 51338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_image_fmt_t *m_fmt = NULL; 51438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_image_fmt_t *t_fmt = NULL; 51538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 51638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_app_set_raw_snapshot_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.fmt); 51738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 51838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.need_stream_on = 1; 51938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.num_of_bufs = 1; 52038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 52138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id, 52238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab &pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config))) { 52338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc); 52438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab goto end; 52538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 52638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 52738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabend: 52838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: END, rc=%d\n", __func__, rc); 52938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 53038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 53138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab} 53238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 5334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_config_snapshot_format(int cam_id) 5344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 5354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 5364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 5374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_set_snapshot_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.fmt); 5394f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_set_thumbnail_fmt(cam_id,&pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.fmt); 5414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.need_stream_on = 1; 5434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config.num_of_bufs = 1; 5444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5454f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id, 5464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar &pme->stream[MM_CAMERA_SNAPSHOT_MAIN].str_config))) { 5474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc); 5484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 5494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 5504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.need_stream_on = 1; 5524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config.num_of_bufs = 1; 5534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->config_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id, 5554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar &pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].str_config))) { 5564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:preview streaming err=%d\n", __func__, rc); 5574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 5584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 5594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 5604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 5614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 5624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 5644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_streamon_snapshot(int cam_id) 5664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 5674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 568ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t stream[2]; 5694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_bundle_attr_t attr; 5704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 5724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 5744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[1] = pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id; 5754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.notify_mode = MM_CAMERA_SUPER_BUF_NOTIFY_BURST; 5774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.burst_num = 1; 5784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.look_back = 2; 5794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.post_frame_skip = 0; 5804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.water_mark = 2; 5814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->init_stream_bundle( 58338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->cam->camera_handle,pme->ch_id,snapshot_yuv_cb,pme,&attr,2,stream))) { 5844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:init_stream_bundle err=%d\n", __func__, rc); 5854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 5864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 5874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 5884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->start_streams(pme->cam->camera_handle,pme->ch_id, 5894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 2, stream))) { 5904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:start_streams err=%d\n", __func__, rc); 5914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 5924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 5934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 594d2288970ead06a397966b05878c05026ed150af3Muhua Li if (MM_CAMERA_OK != (rc =pme->cam->ops->request_super_buf(pme->cam->camera_handle,pme->ch_id, attr.burst_num))) { 5954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:request_super_buf err=%d\n", __func__, rc); 5964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 5974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 5984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam_state = CAMERA_STATE_SNAPSHOT; 5994f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 6004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 6014f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 6024f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 6034f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 60438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_streamon_raw(int cam_id) 60538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab{ 60638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int rc = MM_CAMERA_OK; 60738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab uint32_t stream[2]; 60838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_bundle_attr_t attr; 60938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 61038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 61138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 61238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 61338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 61438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab attr.notify_mode = MM_CAMERA_SUPER_BUF_NOTIFY_BURST; 61538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab attr.burst_num = 1; 61638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab attr.look_back = 2; 61738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab attr.post_frame_skip = 0; 61838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab attr.water_mark = 2; 61938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 62038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->init_stream_bundle( 62138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->cam->camera_handle,pme->ch_id,snapshot_raw_cb,pme,&attr,1,stream))) { 62238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:init_stream_bundle err=%d\n", __func__, rc); 62338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab goto end; 62438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 62538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 62638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->start_streams(pme->cam->camera_handle,pme->ch_id, 62738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 1, stream))) { 62838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:start_streams err=%d\n", __func__, rc); 62938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab goto end; 63038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 63138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 63238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc =pme->cam->ops->request_super_buf(pme->cam->camera_handle,pme->ch_id, attr.burst_num))) { 63338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:request_super_buf err=%d\n", __func__, rc); 63438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab goto end; 63538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 63638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->cam_state = CAMERA_STATE_SNAPSHOT; 63738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabend: 63838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: END, rc=%d\n", __func__, rc); 63938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 64038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab} 64138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 6424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_streamoff_snapshot(int cam_id) 6434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 6444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 645ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t stream[2]; 6464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 6484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 6504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[1] = pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id; 6514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 652ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != (rc = pme->cam->ops->stop_streams(pme->cam->camera_handle,pme->ch_id,2,stream))) { 6534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot Stream off Error",__func__); 6544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 6554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 6564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("Stop snapshot main successfull"); 6574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->destroy_stream_bundle(pme->cam->camera_handle,pme->ch_id))) { 6594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot destroy_stream_bundle Error",__func__); 6604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 6614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 6624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id))) { 6644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot main image del_stream Error",__func__); 6654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 6664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 6674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("del_stream successfull"); 6684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_THUMBNAIL].id))) { 6704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot thumnail image del_stream Error",__func__); 6714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 6724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 6734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("del_stream successfull"); 6744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 6764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 6774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 6784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_start_snapshot(int cam_id) 6804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 6814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 6824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int stream[2]; 683d2288970ead06a397966b05878c05026ed150af3Muhua Li int op_mode = 0; 684ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint8_t initial_reg_flag; 685ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li mm_camera_frame_len_offset frame_offset_info; 6864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_bundle_attr_t attr; 6884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 6914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 6924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_stop_preview(cam_id)) { 6934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Stop preview Failed cam_id=%d\n",__func__,cam_id); 6944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 6954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 6964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar op_mode = MM_CAMERA_OP_MODE_CAPTURE; 6974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_set_snapshot_mode(cam_id,op_mode); 698492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang usleep(20*1000); 699492988f0919d8dfdca0558fd590d5a94baf203bdShuzhen Wang// pme->cam->ops->prepare_snapshot(pme->cam->camera_handle,pme->ch_id,0); 7004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7014f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = mm_app_add_snapshot_stream(cam_id))) { 7024f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Add Snapshot stream err",__func__); 703ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 7044f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 7054f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7064f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = mm_app_config_snapshot_format(cam_id))) { 7074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Config Snapshot stream err",__func__); 708ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 7094f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 7104f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7114f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = mm_app_streamon_snapshot(cam_id))) { 7124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Stream on Snapshot stream err",__func__); 713ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 7144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 7154f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 716ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* init jpeg buf */ 717ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->cam->ops->get_stream_parm(pme->cam->camera_handle, 718ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->ch_id, 719ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id, 720ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li MM_CAMERA_STREAM_OFFSET, 721ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &frame_offset_info); 722ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s : alloc jpeg buf (len=%d)",__func__, frame_offset_info.frame_len); 723ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li rc = mm_stream_alloc_bufs(pme, 724ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &pme->jpeg_buf, 725ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &frame_offset_info, 726ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 1); 727ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (0 != rc) { 728ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s : mm_stream_alloc_bufs err",__func__); 729ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li return rc; 730ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 7314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7324f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 7334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 7344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 7354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 73638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_start_raw(int cam_id) 73738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab{ 73838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int rc = MM_CAMERA_OK; 73938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int op_mode = 0; 74038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 74138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 74238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 74338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != mm_app_stop_preview(cam_id)) { 74438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s: Stop preview Failed cam_id=%d\n",__func__,cam_id); 74538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return -1; 74638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 74738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab op_mode = MM_CAMERA_OP_MODE_RAW; 74838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->cam->ops->set_parm(pme->cam->camera_handle,MM_CAMERA_PARM_OP_MODE, &op_mode); 74938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab usleep(20*1000); 75038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 75138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id = pme->cam->ops->add_stream(pme->cam->camera_handle,pme->ch_id, 75238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab NULL,pme, 75338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab MM_CAMERA_SNAPSHOT_MAIN, 0); 75438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 75538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("Add RAW main is successfull stream ID = %d",pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id); 75638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (!pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id) { 75738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:Raw main streaming err=%d\n", __func__, rc); 75838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab rc = -1; 75938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 76038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 76138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 76238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = mm_app_config_raw_format(cam_id))) { 76338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s : Config Raw Snapshot stream err",__func__); 76438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 76538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 76638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 76738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = mm_app_streamon_raw(cam_id))) { 76838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s : Stream on Raw Snapshot stream err",__func__); 76938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 77038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 77138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 77238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: END, rc=%d\n", __func__, rc); 77338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 77438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab} 7754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_stop_snapshot(int cam_id) 7774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 7784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 779ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li int i; 7804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 7814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 7824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 783ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (pme->current_job_id) { 784ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* have current jpeg encoding running, abort the job */ 785ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (pme->jpeg_ops.abort_job) { 786ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->jpeg_ops.abort_job(pme->jpeg_hdl, pme->current_job_id); 787ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_id = 0; 788ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 789ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 790ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (pme->current_job_frames) { 791ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li for (i=0; i<pme->current_job_frames->num_bufs; i++) { 792ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->current_job_frames->camera_handle, 793ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames->ch_id, 794ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames->bufs[i])) { 795ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: Failed in Qbuf\n", __func__); 796ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 797eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_invalid_cache(pme,pme->current_job_frames->bufs[i]); 798ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 799ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li free(pme->current_job_frames); 800ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li pme->current_job_frames = NULL; 801ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 802ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li } 8034f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8044f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = mm_app_streamoff_snapshot(cam_id))) { 8054f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Stream off Snapshot stream err",__func__); 8064f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 8074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam_state = CAMERA_STATE_OPEN; 808ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li 809ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li /* deinit jpeg buf */ 810ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li rc = mm_stream_release_bufs(pme, 811ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li &pme->jpeg_buf); 812ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Liend: 8134f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 8144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8154f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 8164f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 8174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 81838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_stop_raw(int cam_id) 8194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 8204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 82138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int i; 82238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab uint32_t stream[1]; 8234f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 82438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 8254f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 82638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 8274f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 82838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->stop_streams(pme->cam->camera_handle,pme->ch_id,1,stream))) { 82938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s : Snapshot Stream off Error",__func__); 8304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 8314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 83238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("Stop snapshot main successfull"); 83338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 83438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->destroy_stream_bundle(pme->cam->camera_handle,pme->ch_id))) { 83538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s : Snapshot destroy_stream_bundle Error",__func__); 8364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 8374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 8384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 83938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = pme->cam->ops->del_stream(pme->cam->camera_handle,pme->ch_id,pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id))) { 84038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s : Snapshot main image del_stream Error",__func__); 8414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 8424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 84338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("del_stream successfull"); 84438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 84538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab pme->cam_state = CAMERA_STATE_OPEN; 84638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabend: 8474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 8484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 8494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic void mm_app_snapshot_wait(int cam_id) 8514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 8524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_mutex_lock(&g_s_mutex); 8534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (FALSE == g_status) { 8544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_cond_wait(&g_s_cond_v, &g_s_mutex); 8554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar g_status = FALSE; 8564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 8574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pthread_mutex_unlock(&g_s_mutex); 8584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 8594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarstatic void mm_app_live_notify_cb(mm_camera_super_buf_t *bufs, 8614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar void *user_data) 8624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 8634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc; 8654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int i = 0; 8664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_buf_def_t *main_frame = NULL; 8674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = NULL; 868d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG("%s: BEGIN\n", __func__); 8694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme = (mm_camera_app_obj_t *)user_data; 8714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s : total streams = %d",__func__,bufs->num_bufs); 8734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar main_frame = bufs->bufs[0]; 8744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar //thumb_frame = bufs->bufs[1]; 8754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("mainframe frame_idx = %d fd = %d frame length = %d",main_frame->frame_idx,main_frame->fd,main_frame->frame_len); 8774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar //CDBG("thumnail frame_idx = %d fd = %d frame length = %d",thumb_frame->frame_idx,thumb_frame->fd,thumb_frame->frame_len); 8784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar //dumpFrameToFile(main_frame->frame,pme->dim.picture_width,pme->dim.picture_height,"main", 1); 8804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 88138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab dumpFrameToFile(main_frame,pme->dim.picture_width,pme->dim.picture_height,"liveshot_main", 1,"yuv"); 8824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->cam->camera_handle,pme->ch_id,main_frame)) { 884d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG_ERROR("%s: Failed in thumbnail Qbuf\n", __func__); 8854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 886eb657309f06b358c28f123c64935372e1f906427Guruprasad Gaonkar mm_stream_invalid_cache(pme,main_frame); 8874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar /*if(MM_CAMERA_OK != pme->cam->ops->qbuf(pme->cam->camera_handle,pme->ch_id,thumb_frame)) 8884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar { 889d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG_ERROR("%s: Failed in thumbnail Qbuf\n", __func__); 8904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar }*/ 8914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_snapshot_done(); 893d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG("%s: END\n", __func__); 8944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 8974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 8984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_prepare_live_snapshot(int cam_id) 8994f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 9004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = 0; 901ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t stream[1]; 9024f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_bundle_attr_t attr; 9034f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int value = 0; 9044f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9054f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 9064f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 9074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9084f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 9094f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar //stream[1] = pme->stream[MM_CAMERA_PREVIEW].id; //Need to clarify 9104f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9114f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.notify_mode = MM_CAMERA_SUPER_BUF_NOTIFY_BURST; 9124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.burst_num = 1; 9134f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.look_back = 2; 9144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.post_frame_skip = 0; 9154f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar attr.water_mark = 2; 9164f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9184f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->set_parm( 9194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam->camera_handle,MM_CAMERA_PARM_FULL_LIVESHOT, (void *)&value))) { 9204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: set dimension err=%d\n", __func__, rc); 9214f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9224f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9234f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->init_stream_bundle( 9244f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam->camera_handle,pme->ch_id,mm_app_live_notify_cb,pme,&attr,1,stream))) { 9254f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:init_stream_bundle err=%d\n", __func__, rc); 9264f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 9274f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 9284f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9294f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->start_streams(pme->cam->camera_handle,pme->ch_id, 9314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1, stream))) { 9324f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:start_streams err=%d\n", __func__, rc); 9334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 9344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 9354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 9394f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:END, cam_id=%d\n",__func__,cam_id); 9404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 9414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 9424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_unprepare_live_snapshot(int cam_id) 9444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 9454f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = 0; 946ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li uint32_t stream[2]; 9474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 9494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 9504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar stream[0] = pme->stream[MM_CAMERA_SNAPSHOT_MAIN].id; 952ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li if (MM_CAMERA_OK != (rc = pme->cam->ops->stop_streams(pme->cam->camera_handle,pme->ch_id,1,stream))) { 9534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot Stream off Error",__func__); 9544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 9554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = pme->cam->ops->destroy_stream_bundle(pme->cam->camera_handle,pme->ch_id))) { 9584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s : Snapshot destroy_stream_bundle Error",__func__); 9594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 9604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:END, cam_id=%d\n",__func__,cam_id); 9624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 9634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 9644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_take_live_snapshot(int cam_id) 9664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 9674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = 0; 9684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int stream[3]; 9694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_bundle_attr_t attr; 9704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 9724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 9744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 975d2288970ead06a397966b05878c05026ed150af3Muhua Li if (pme->cam_mode == RECORDER_MODE && 9764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar pme->cam_state == CAMERA_STATE_RECORD) { 9774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar //Code to get live shot 9784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (mm_app_prepare_live_snapshot(cam_id) != MM_CAMERA_OK) { 9794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Failed prepare liveshot",__func__); 9804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 9814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 982d2288970ead06a397966b05878c05026ed150af3Muhua Li if (MM_CAMERA_OK != (rc =pme->cam->ops->request_super_buf(pme->cam->camera_handle,pme->ch_id, 1))) { 9834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:request_super_buf err=%d\n", __func__, rc); 9844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 9854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:waiting images\n",__func__); 9874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_snapshot_wait(cam_id); 9884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK !=mm_app_unprepare_live_snapshot(cam_id)) { 9904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Snapshot Stop error",__func__); 9914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 9934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } else { 9944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Should not come here for liveshot",__func__); 9954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 9964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 9974f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 9984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 99938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_take_picture_raw(int cam_id) 100038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab{ 100138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 100238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab int rc; 100338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 100438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 100538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 100638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 100738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != mm_app_start_raw(cam_id)) { 100838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s: cam_id=%d\n",__func__,cam_id); 100938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab rc = -1; 101038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab goto end; 101138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 101238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 101338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s:waiting images\n",__func__); 101438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_app_snapshot_wait(cam_id); 101538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 101638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK !=mm_app_stop_raw(cam_id)) { 101738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s: Snapshot Stop error",__func__); 101838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 101938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 102038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabpreview: 102138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != (rc = mm_app_start_preview(cam_id))) { 102238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s:preview start stream err=%d\n", __func__, rc); 102338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 102438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab end: 102538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s:END, cam_id=%d\n",__func__,cam_id); 102638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return rc; 102738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab} 102838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 10294f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_take_picture_zsl(int cam_id) 10304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 10314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 10324f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int value = 1; 10334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int op_mode; 10344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 10364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Take picture ZSL",__func__); 10384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1039d2288970ead06a397966b05878c05026ed150af3Muhua Li if (MM_CAMERA_OK != (rc =pme->cam->ops->request_super_buf(pme->cam->camera_handle,pme->ch_id, 1))) { 10404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:request_super_buf err=%d\n", __func__, rc); 10414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 10424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 10434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Start ZSL Preview",__func__); 10454f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 10474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: END, rc=%d\n", __func__, rc); 10484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 10494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 10504f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_take_picture_yuv(int cam_id) 10524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 10534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc; 10544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 10554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 10574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_start_snapshot(cam_id)) { 1059d2288970ead06a397966b05878c05026ed150af3Muhua Li CDBG_ERROR("%s: cam_id=%d\n",__func__,cam_id); 10604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar rc = -1; 10614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar goto end; 10624f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 10634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:waiting images\n",__func__); 10654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_snapshot_wait(cam_id); 10664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK !=mm_app_stop_snapshot(cam_id)) { 10684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Snapshot Stop error",__func__); 10694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 10704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar preview: 10724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != (rc = mm_app_start_preview(cam_id))) { 10734f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:preview start stream err=%d\n", __func__, rc); 10744f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 10754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar end: 10764f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:END, cam_id=%d\n",__func__,cam_id); 10774f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 10784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 10794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_take_zsl(int cam_id) 10814f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 10824f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = MM_CAMERA_OK; 10834f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10844f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 10854f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10864f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 10874f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 10884f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (pme->cam_mode == RECORDER_MODE) { 10894f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar switch (pme->cam_state) { 10904f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_RECORD: 10914f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_stop_video(cam_id)) { 10924f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc); 10934f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 10944f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 10954f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_PREVIEW: 10964f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_open_zsl(cam_id)) { 1097ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li CDBG_ERROR("%s: Cannot switch to camera mode\n", __func__); 10984f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 10994f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11004f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar break; 11014f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_SNAPSHOT: 11024f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar default: 11034f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Cannot normal pciture in record mode\n", __func__); 1104d2288970ead06a397966b05878c05026ed150af3Muhua Li break; 11054f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11064f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } else if (pme->cam_mode == CAMERA_MODE) { 11074f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar switch (pme->cam_state) { 11084f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_PREVIEW: 11094f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_open_zsl(cam_id); 11104f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar break; 11114f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_SNAPSHOT: 11134f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_RECORD: 11144f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar default: 11154f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Cannot normal pciture in record mode\n", __func__); 1116d2288970ead06a397966b05878c05026ed150af3Muhua Li break; 11174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11184f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (pme->cam_mode == ZSL_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) { 11214f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_take_picture_zsl(cam_id); 11224f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11234f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 11244f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 11254f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11264f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkarint mm_app_take_picture(int cam_id) 11274f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 11284f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar int rc = 0; 11294f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11304f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 11314f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11324f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 11334f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11344f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (pme->cam_mode == RECORDER_MODE) { 11354f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar switch (pme->cam_state) { 11364f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_RECORD: 11374f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_stop_video(cam_id)) { 11384f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc); 11394f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 11404f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11414f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_PREVIEW: 11424f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (MM_CAMERA_OK != mm_app_open_camera(cam_id)) { 11434f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__,rc); 11444f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return -1; 11454f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11464f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar break; 11474f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_SNAPSHOT: 11484f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar default: 11494f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Cannot normal pciture in record mode\n", __func__); 1150d2288970ead06a397966b05878c05026ed150af3Muhua Li break; 11514f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11524f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } else if (pme->cam_mode == ZSL_MODE) { 11534f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar switch (pme->cam_state) { 11544f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_PREVIEW: 11554f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_open_camera(cam_id); 11564f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar break; 11574f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11584f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_SNAPSHOT: 11594f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar case CAMERA_STATE_RECORD: 11604f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar default: 11614f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s: Cannot normal pciture in record mode\n", __func__); 1162d2288970ead06a397966b05878c05026ed150af3Muhua Li break; 11634f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11644f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11654f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11664f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s : Takepicture : mode = %d state = %d, rc = %d",__func__,pme->cam_mode,pme->cam_state,rc); 11674f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar if (pme->cam_mode == CAMERA_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) { 11684f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_app_take_picture_yuv(cam_id); 11694f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 11704f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 11714f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 11724f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 117338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 117438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftabint mm_app_take_raw(int cam_id) 11754f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar{ 1176ae3e8d3d891a6e69db7a72a7c93348b25862866bMuhua Li int rc = 0; 117738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 11784f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar mm_camera_app_obj_t *pme = mm_app_get_cam_obj(cam_id); 11794f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 11804f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar CDBG("%s:BEGIN, cam_id=%d\n",__func__,cam_id); 118138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 118238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (pme->cam_mode == RECORDER_MODE) { 118338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab switch (pme->cam_state) { 118438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_RECORD: 118538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != mm_app_stop_video(cam_id)) { 118638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s:Cannot stop video err=%d\n", __func__, rc); 118738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return -1; 118838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 118938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_PREVIEW: 119038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (MM_CAMERA_OK != mm_app_open_camera(cam_id)) { 119138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG_ERROR("%s: Cannot switch to camera mode=%d\n", __func__,rc); 119238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab return -1; 119338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 119438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab break; 119538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_SNAPSHOT: 119638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab default: 119738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: Cannot normal pciture in record mode\n", __func__); 119838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab break; 119938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 120038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } else if (pme->cam_mode == ZSL_MODE) { 120138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab switch (pme->cam_state) { 120238d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_PREVIEW: 120338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_app_open_camera(cam_id); 120438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab break; 120538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 120638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_SNAPSHOT: 120738d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab case CAMERA_STATE_RECORD: 120838d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab default: 120938d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s: Cannot normal pciture in record mode\n", __func__); 121038d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab break; 121138d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab } 12124f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 121338d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab 121438d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab CDBG("%s : Takepicture RAW: mode = %d state = %d, rc = %d",__func__,pme->cam_mode,pme->cam_state,rc); 121538d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab if (pme->cam_mode == CAMERA_MODE && pme->cam_state == CAMERA_STATE_PREVIEW) { 121638d1b73e80dc7448ff9c00a797d8930e40b12756Mansoor Aftab mm_app_take_picture_raw(cam_id); 12174f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar } 12184f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar return rc; 12194f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar} 12204f1840512d13ecd42597ca0936bea2fc7ee71bbeGuruprasad Gaonkar 1221