zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Oracle的function存储函数简单实例
    Java保留小数点后两位,解决精度丢失问题
    天津贷款买房提取公积金相关问题
    Springboot配置连接两个数据库
    JDK8:Lambda根据 单个字段、多个字段,分组求和
    原生Ajax方式请求后端导出Excel,在浏览器页面显示下载Excel表(前端请求带header)
    Java实现 微信小程序 + 消息推送
    Centos7安装docker
    将博客搬至CSDN
    读书笔记——数学之美
  • 原文地址:https://www.cnblogs.com/mmix2009/p/3585505.html
Copyright © 2011-2022 走看看