【video】yuv420p转rgb24经验分享
环境:ubuntu版本:12.04ffmpeg版本:0.10.16Qt版本:5.6.2ffmpeg编译命令:./configure --disable-yasm--enable-shared --enable-gpl--enable-libx264makemake install代码:// 为rgbBuffer分配内存int rgbBytes = avpi...
·
环境:
ubuntu版本:12.04
ffmpeg版本:0.10.16
Qt版本: 5.6.2
ffmpeg编译命令:
./configure --disable-yasm --enable-shared --enable-gpl --enable-libx264 --disable-hwaccels
make
make install
代码:
// 为rgbBuffer分配内存
int rgbBytes = avpicture_get_size(PIX_FMT_RGB24, rgbFrame->width,rgbFrame->height);
rgbBuffer = (uint8_t*) av_malloc(rgbBytes);
if (NULL == rgbBuffer){
return 1;
}
// 和rgbFrame建立关联
ret = avpicture_fill((AVPicture *) rgbFrame, rgbBuffer, PIX_FMT_RGB24, rgbFrame->width,rgbFrame->height);
// 获取转换转换上下文
img_convert_ctx = sws_getContext(yuvFrame->width, yuvFrame->height, PIX_FMT_YUV420P,
rgbFrame->width, rgbFrame->height, PIX_FMT_RGB24,
SWS_BILINEAR, NULL, NULL, NULL);
// 进行格式转换
ret = sws_scale(img_convert_ctx, yuvFrame->data, yuvFrame->linesize, 0, yuvFrame->height, rgbFrame->data, rgbFrame->linesize);
// 用QImage加载转换后的数据
QImage tmpImg((uchar *)rgbBuffer , rgbFrame->width, rgbFrame->height, QImage::Format_RGB888);
注意事项:
- sws_scale函数的第4个参数的确是0。
- 转换为QImage时使用的是rgbBuffer,而不是rgbFrame->data。
更多推荐


所有评论(0)