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