• FFmpeg编译出错_img_convert 找不到


    问题出现在下载的ffmpeg的版本不一样,在0.4.8以前的版本中还有img_convert这个函数,新版本中用sws_getContext和sws_scale代替了。简单说明如下:

    新版本的ffmpeg添加了新的接口:libswscale来处理图像缩放。

    以前使用img_convert来把RGB转换成YUV12,现在使用新的接口。新接口更加标准和快速,而且里面有了MMX优化代码。换句话说,它是做缩放更好的方式。

    用来缩放的基本函数是sws_scale。但一开始,必需建立一个SwsContext的概念。这将进行想要的转换,然后把它传递给 sws_scale函数。类似于在SQL中的预备阶段或者是在Python中编译的规则表达式regexp。要准备这个上下文,使用 sws_getContext函数,它需要源的宽度和高度,我们想要的宽度和高度,源的格式和想要转换成的格式,同时还有一些其它的参数和标志。然后我们像使用img_convert一样来使用sws_scale函数,唯一不同的是我们传递给的是SwsContext。

    解决办法是将原有的img_convert函数改为sws_scale函数,原来的函数调用为:

    img_convert((AVPicture *)pFrameRGB, PIX_FMT_BGR24, (AVPicture*)pFrame,
        pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height)

    修改为

    struct SwsContext *pSwsCtx;

    pSwsCtx = sws_getContext (pCodecCtx->width,
        pCodecCtx->height,
        pCodecCtx->pix_fmt,
        pCodecCtx->width,
        pCodecCtx->height,
        PIX_FMT_BGR24,
        SWS_BICUBIC,
        NULL, NULL, NULL);

    //反转图像 ,否则生成的图像是上下调到的
       pFrame->data[0] += pFrame->linesize[0] * (pCodecCtx->height - 1);
       pFrame->linesize[0] *= -1;
       pFrame->data[1] += pFrame->linesize[1] * (pCodecCtx->height / 2 - 1);
       pFrame->linesize[1] *= -1;
       pFrame->data[2] += pFrame->linesize[2] * (pCodecCtx->height / 2 - 1);
       pFrame->linesize[2] *= -1;
      //转换图像格式,将解压出来的YUV420P的图像转换为BRG24的图像

    sws_scale (pSwsCtx, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

  • 相关阅读:
    操作系统
    OSI协议
    5、hadoop常见端口汇总
    20、Linux 常用命令ll失效
    java 图形化工具Swing 监听键盘输入字符触发动作getInputMap();getActionMap();
    java 图形化工具Swing 基本使用
    java 图形化小工具Abstract Window Toolit ImageIO缩放图片,添加水印
    java 图形化小工具Abstract Window Toolit 画笔 处理位图
    java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏
    java 图形化小工具Abstract Window Toolit 菜单项
  • 原文地址:https://www.cnblogs.com/mmix2009/p/3585505.html
Copyright © 2020-2023  润新知