环境:
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);

注意事项:

  1. sws_scale函数的第4个参数的确是0。
  2. 转换为QImage时使用的是rgbBuffer,而不是rgbFrame->data。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐