/* This callback is received once the complete JPEG encoding is done */ static void jpeg_encode_cb(jpeg_job_status_t status, uint8_t thumbnailDroppedFlag, uint32_t client_hdl, uint32_t jobId, uint8_t* out_data, uint32_t data_size, void *userData) { int rc; int i = 0; mm_camera_buf_def_t *main_frame = NULL; mm_camera_buf_def_t *thumb_frame = NULL; mm_camera_app_obj_t *pme = NULL; CDBG("%s: BEGIN\n", __func__); pme = (mm_camera_app_obj_t *)userData; if (jobId != pme->current_job_id || !pme->current_job_frames) { CDBG_ERROR("%s: NULL current job frames or not matching job ID (%d, %d)", __func__, jobId, pme->current_job_id); return; } /* dump jpeg img */ CDBG_ERROR("%s: job %d, status=%d, thumbnail_dropped=%d", __func__, jobId, status, thumbnailDroppedFlag); if (status == JPEG_JOB_STATUS_DONE) { mm_app_dump_jpeg_frame(out_data, data_size, "jpeg_dump", "jpg", pme->my_id); } /* buf done current encoding frames */ pme->current_job_id = 0; for (i=0; i<pme->current_job_frames->num_bufs; i++) { if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->current_job_frames->camera_handle, pme->current_job_frames->ch_id, pme->current_job_frames->bufs[i])) { CDBG_ERROR("%s: Failed in Qbuf\n", __func__); } } free(pme->current_job_frames); pme->current_job_frames = NULL; /* signal snapshot is done */ mm_app_snapshot_done(); }
/* This callback is received once the complete JPEG encoding is done */ static void jpeg_encode_cb(jpeg_job_status_t status, uint32_t client_hdl, uint32_t jobId, mm_jpeg_output_t *p_buf, void *userData) { uint32_t i = 0; mm_camera_test_obj_t *pme = NULL; LOGD(" BEGIN\n"); pme = (mm_camera_test_obj_t *)userData; if (pme->jpeg_hdl != client_hdl || jobId != pme->current_job_id || !pme->current_job_frames) { LOGE(" NULL current job frames or not matching job ID (%d, %d)", jobId, pme->current_job_id); return; } /* dump jpeg img */ LOGE(" job %d, status=%d", jobId, status); if (status == JPEG_JOB_STATUS_DONE && p_buf != NULL) { mm_app_dump_jpeg_frame(p_buf->buf_vaddr, p_buf->buf_filled_len, "jpeg", "jpg", jobId); } /* buf done current encoding frames */ pme->current_job_id = 0; for (i = 0; i < pme->current_job_frames->num_bufs; i++) { if (MM_CAMERA_OK != pme->cam->ops->qbuf(pme->current_job_frames->camera_handle, pme->current_job_frames->ch_id, pme->current_job_frames->bufs[i])) { LOGE(" Failed in Qbuf\n"); } mm_app_cache_ops((mm_camera_app_meminfo_t *) pme->current_job_frames->bufs[i]->mem_info, ION_IOC_INV_CACHES); } mm_app_deallocate_ion_memory(&pme->jpeg_buf); free(pme->current_job_frames); pme->current_job_frames = NULL; /* signal snapshot is done */ mm_camera_app_done(); }