static void mm_camera_read_snapshot_main_frame(mm_camera_obj_t * my_obj) { int rc = 0; int idx; mm_camera_stream_t *stream; mm_camera_frame_queue_t *q; if (!my_obj->ch[MM_CAMERA_CH_SNAPSHOT].acquired) { ALOGV("Snapshot channel is not in acquired state \n"); return; } q = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.main.frame.readyq; stream = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.main; idx = mm_camera_read_msm_frame(my_obj,stream); if (idx < 0) return; CDBG("%s Read Snapshot frame %d ", __func__, idx); if(my_obj->op_mode == MM_CAMERA_OP_MODE_ZSL) { my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.main.frame.ref_count[idx]++; /* Reset match to 0. */ stream->frame.frame[idx].match = 0; stream->frame.frame[idx].valid_entry = 0; mm_camera_zsl_frame_cmp_and_enq(my_obj, &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.main.frame.frame[idx], stream); } else { /* send to HAL */ mm_camera_stream_frame_enq(q, &stream->frame.frame[idx]); if (!my_obj->full_liveshot) mm_camera_snapshot_send_snapshot_notify(my_obj); else mm_camera_snapshot_send_liveshot_notify(my_obj); } }
static void mm_camera_read_snapshot_thumbnail_frame(mm_camera_obj_t * my_obj) { int idx, rc = 0; mm_camera_stream_t *stream; mm_camera_frame_queue_t *q; mm_camera_frame_t *frame; q = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.thumbnail.frame.readyq; stream = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.thumbnail; frame = mm_camera_stream_frame_deq(&stream->frame.freeq); if(frame) { rc = mm_camera_stream_qbuf(my_obj, stream, frame->idx); if(rc < 0) { CDBG("%s: mm_camera_stream_qbuf(idx=%d) err=%d\n", __func__, frame->idx, rc); return; } } idx = mm_camera_read_msm_frame(my_obj,stream); if (idx < 0) return; mm_camera_stream_frame_enq(q, &stream->frame.frame[idx]); mm_camera_snapshot_send_snapshot_notify(my_obj); }
static void mm_camera_read_snapshot_thumbnail_frame(mm_camera_obj_t * my_obj) { int idx, rc = 0; mm_camera_stream_t *stream; mm_camera_frame_queue_t *q; q = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.thumbnail.frame.readyq; stream = &my_obj->ch[MM_CAMERA_CH_SNAPSHOT].snapshot.thumbnail; idx = mm_camera_read_msm_frame(my_obj,stream); if (idx < 0) return; if(my_obj->op_mode != MM_CAMERA_OP_MODE_ZSL) { mm_camera_stream_frame_enq(q, &stream->frame.frame[idx]); mm_camera_snapshot_send_snapshot_notify(my_obj); } else { // CDBG("%s: ZSL does not use thumbnail stream", __func__); rc = mm_camera_stream_qbuf(my_obj, stream, idx); // CDBG("%s Q back thumbnail buffer rc = %d ", __func__, rc); } }