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

简介:
AVFrame* pFrame;                    //  Frame 
AVCodecContext* pContext;           //  Codec Context
int nUsedBytes = avcodec_decode_video(pContext, pFrame,  &nFrame, pSrcBuffer, nSrcLength);
if(nUsedBytes > 0)
{
    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)
    {
        if(avpicture_alloc((AVPicture *)&out_pic, PIX_FMT_RGB24, nDestW, nDestH)>=0)
        {
            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);  
目录
相关文章
|
8月前
|
计算机视觉
RGB色彩空间
【5月更文挑战第11天】RGB色彩空间。
61 3
|
存储 编解码 Android开发
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888等图像色彩编码格式区别
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888都是常见的图像颜色编码格式,它们之间的主要区别在于色彩空间和数据排列方式。
231 0
|
计算机视觉
计算机图形|RGB与HSV模型的转化
计算机图形|RGB与HSV模型的转化
170 0
计算机图形|RGB与HSV模型的转化
|
编解码 计算机视觉
CV13 图像分辨率操作(图像金字塔与resize()函数)
其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)
222 0
|
算法 Java Android开发
常用的像素操作算法:Resize、Flip、Rotate
常用的像素操作算法:Resize、Flip、Rotate
396 0
常用的像素操作算法:Resize、Flip、Rotate
使用FFMPEG的sws_scale函数实现各种原始颜色格式互转(YUV\RGB\)
使用FFMPEG的sws_scale函数实现各种原始颜色格式互转(YUV\RGB\)
889 0