int jpegenc_init(int w, int h) { memset(&jpeg, 0x00, sizeof(jpeg)); jpeg.size.w = w; jpeg.size.h = h; pthread_mutex_init(&jpeg.lock, NULL); pthread_cond_init(&jpeg.cond, NULL); jpeg.handle = jpeg_open(&jpeg.ops, NULL, jpeg.size, NULL); if (0 == jpeg.handle) { loge("fail to call jpeg_open"); return -EINVAL; } /* init parameters */ jpeg.out.size = w * h * 3 / 2; jpeg.out.addr = (uint8_t*)buffer_allocate(&jpeg.out, 0); if (NULL == jpeg.out.addr) { jpeg.ops.close(jpeg.handle); jpeg.handle = 0; loge("fail to allocate buffer"); return -EINVAL; } jpeg.in.size = w * h * 3 / 2; jpeg.in.addr = (uint8_t*)buffer_allocate(&jpeg.out, 0); if (NULL == jpeg.in.addr) { jpeg.ops.close(jpeg.handle); jpeg.handle = 0; loge("fail to allocate buffer"); return -EINVAL; } return 0; }
static int encode_test(jpeg_test_input_t *p_input) { int rc = 0; mm_jpeg_intf_test_t jpeg_obj; uint32_t i = 0; memset(&jpeg_obj, 0x0, sizeof(jpeg_obj)); rc = encode_init(p_input, &jpeg_obj); if (rc) { CDBG_ERROR("%s:%d] Error",__func__, __LINE__); return -1; } mm_dimension pic_size; memset(&pic_size, 0, sizeof(mm_dimension)); pic_size.w = (uint32_t)p_input->width; pic_size.h = (uint32_t)p_input->height; jpeg_obj.handle = jpeg_open(&jpeg_obj.ops, pic_size); if (jpeg_obj.handle == 0) { CDBG_ERROR("%s:%d] Error",__func__, __LINE__); goto end; } rc = jpeg_obj.ops.create_session(jpeg_obj.handle, &jpeg_obj.params, &jpeg_obj.job.encode_job.session_id); if (jpeg_obj.job.encode_job.session_id == 0) { CDBG_ERROR("%s:%d] Error",__func__, __LINE__); goto end; } for (i = 0; i < jpeg_obj.num_bufs; i++) { jpeg_obj.job.job_type = JPEG_JOB_TYPE_ENCODE; jpeg_obj.job.encode_job.src_index = (int32_t) i; jpeg_obj.job.encode_job.dst_index = (int32_t) i; jpeg_obj.job.encode_job.thumb_index = (uint32_t) i; if (jpeg_obj.params.burst_mode && jpeg_obj.min_out_bufs) { jpeg_obj.job.encode_job.dst_index = -1; } rc = jpeg_obj.ops.start_job(&jpeg_obj.job, &jpeg_obj.job_id[i]); if (rc) { CDBG_ERROR("%s:%d] Error",__func__, __LINE__); goto end; } } jpeg_obj.job_id[i] = 0; /* usleep(5); jpeg_obj.ops.abort_job(jpeg_obj.job_id[0]); */ pthread_mutex_lock(&jpeg_obj.lock); pthread_cond_wait(&jpeg_obj.cond, &jpeg_obj.lock); pthread_mutex_unlock(&jpeg_obj.lock); jpeg_obj.ops.destroy_session(jpeg_obj.job.encode_job.session_id); jpeg_obj.ops.close(jpeg_obj.handle); end: for (i = 0; i < jpeg_obj.num_bufs; i++) { if (!jpeg_obj.min_out_bufs) { // Save output files CDBG_ERROR("%s:%d] Saving file%s addr %p len %zu", __func__, __LINE__,jpeg_obj.out_filename[i], jpeg_obj.output[i].addr, jpeg_obj.buf_filled_len[i]); DUMP_TO_FILE(jpeg_obj.out_filename[i], jpeg_obj.output[i].addr, jpeg_obj.buf_filled_len[i]); } mm_jpeg_test_free(&jpeg_obj.input[i]); mm_jpeg_test_free(&jpeg_obj.output[i]); } return 0; }