最近在做与视频处理有关的项目,涉及到从ipc从抓拍图像的需求,抓拍的264关键帧经解码后,得到yuv420p格式的图像数据。由于客户需求是希望直接得到jpeg图像,因此需要将yuv420p的图像数据,转换为jpeg进行输出。在网上找了挺多使用libjpeg库示例代码的,但是都无法直接使用,最后经过一些折腾,终于成功实现了使用libjpeg将yuv420p的数据转换为jpeg图像。
代码如下:
// outJpegFileName:输出的jpeg文件名称
// yuvData: yuv420格式的数据,其数据存储顺序为:y->u->v
// quaulity: 输出的jpeg图像质量,有效范围为0-100
int Yuv420PToJpeg(const char * outJpegFileName, unsigned char* yuvData, int image_width, int image_height, int quality)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
FILE * outfile; // target file
if ((outfile = fopen(outJpegFileName, "wb")) == NULL)
{
fprintf(stderr, "can't open %s\n", outJpegFileName);
exit(1);
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_widt