Example #1
0
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;
}