sws_scale解出来的RGB图像颠倒问题

简介:
AVFrame* pFrame;                    //  Frame 
AVCodecContext* pContext;           //  Codec Context
int nUsedBytes = avcodec_decode_video(pContext, pFrame,  &nFrame, pSrcBuffer, nSrcLength);
if(nUsedBytes > 0)
ExpandedBlockStart.gif {
    AVFrame  out_pic;
    SwsContext* img_convert_ctx = sws_getContext(pContext->width, pContext->height, pContext->pix_fmt, nDestW, nDestH,(PixelFormat)PIX_FMT_BGR24,SWS_BICUBIC, NULL, NULL, NULL);
    if(img_convert_ctx != NULL)
ExpandedSubBlockStart.gif    {
        if(avpicture_alloc((AVPicture *)&out_pic, PIX_FMT_RGB24, nDestW, nDestH)>=0)
ExpandedSubBlockStart.gif        {
            pFrame->data[0] = pFrame->data[0]+pFrame->linesize[0]*(pContext->height-1);
            pFrame->data[1] = pFrame->data[1]+pFrame->linesize[0]*pContext->height/4-1;
       pFrame->data[2] = pFrame->data[2]+pFrame->linesize[0]*pContext->height/4-1;
            pFrame->linesize[0] *= -1;
            pFrame->linesize[1] *= -1;
       pFrame->linesize[2] *= -1;
       sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize, 0, pContext->height, out_pic.data, out_pic.linesize);
            avpicture_free((AVPicture *)&out_pic);
        }

        sws_freeContext(img_convert_ctx);
    }

}

AVFrame的data和linesize:

YUV: linesize[0] =  width + padding size(16+16),linesize[1]=linesize[0]/2

        data[0],data[1],data[2]分别代表yuv 

RGB: linesize[0] = width*pixel_size  for RGB
        data[0]为packet rgb


  pFrame->data[0] = pFrame->data[0]+pFrame->linesize[0]*(pContext->height-1);
  pFrame->data[1] = pFrame->data[1]+pFrame->linesize[1]*(pContext->height/2-1);
  pFrame->data[2] = pFrame->data[2]+pFrame->linesize[2]*(pContext->height/2-1);  
目录
相关文章
|
5月前
|
存储 并行计算 算法
C++进程间通信之共享内存
C++进程间通信之共享内存
318 0
|
开发工具 Windows
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
关于 fatal error LNK1158: 无法运行“rc.exe” 的解决方法
|
Ubuntu 编译器
Ubuntu18.4下交叉编译X264和FFMPEG到ARM平台(aarch64-linux-gcc)
Ubuntu18.4下交叉编译X264和FFMPEG到ARM平台(aarch64-linux-gcc)
1048 0
|
开发框架 前端开发 Linux
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
开源项目推荐:C++ Web/Http Server/Rest开发框架(请重点关注Oat++和搜狗workflow)
3332 0
|
10月前
|
编解码 监控 算法
嵌入式linux下的FFmpeg交叉编译(最全面)
嵌入式linux下的FFmpeg交叉编译(最全面)
|
编解码
FFMpeg编译支持NVidia CODEC(成功)
FFMpeg编译支持NVidia CODEC(成功)
222 0
|
编解码 并行计算 开发工具
FFmpeg引入NVIDIA硬件编解码扩展
FFmpeg引入NVIDIA硬件编解码扩展
602 0
|
Rust Linux 编译器
Android中使用Rust构建so库
Android中使用Rust构建so库
Android中使用Rust构建so库
ES选举:Elasticsearch中Master选举完全解读
ES选举:Elasticsearch中Master选举完全解读
ES选举:Elasticsearch中Master选举完全解读