MPP Encoder 设计及接口说明
Read time: 2 minute(s)
MPP Encoder 目前只支持 JPEG 图片编码。接口设计如下:
函数原型 | int mpp_encode_jpeg(struct mpp_frame* frame, int quality, int dma_buf_fd, int buf_len, int* len) |
---|---|
功能说明 | 编码一帧 JPEG 图片 |
参数定义 |
|
返回值 | 0: 成功 <0:失败 |
注意事项 | - |
提示: 输出 JPEG 图片的缓存 buffer 由调用者申请,但调用者并不知道编码后图片的实际大小, 为避免
VE 写输出数据时越界,该 buffer 需要预先申请较大的内存。
MPP Decoder 参考 demo
以下 demo 为基本流程调用,具体实现可以参考代码 mpp/mpp_test/jpeg_encoder_test.c
//* 1. 获取 dma-buf device 句柄 int dma_fd = dmabuf_device_open(); //* 2. 设置输入 YUV 数据结构体 struct mpp_frame frame; // .... //* 3. 申请编码输出 buffer int len = 0; int buf_len = width * height * 4/5 * quality / 100; int jpeg_data_fd = dmabuf_alloc(dma_fd, buf_len); //* 4. 编码 JPEG 图片 mpp_encode_jpeg(&frame, quality, jpeg_data_fd, buf_len, &len)。 //* 5. 保存编码后 JPEG 图片 unsigned char* jpeg_vir_addr = dmabuf_mmap(jpeg_data_fd, buf_len); FILE* fp_save = fopen("/save.jpg", "wb"); fwrite(jpeg_vir_addr, 1, len, fp_save); fclose(fp_save); //* 6. 释放资源 dmabuf_munmap(jpeg_vir_addr, buf_len); dmabuf_free(jpeg_data_fd); dmabuf_device_close(dma_fd);