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);  
目录
相关文章
|
6月前
RGB颜色模型和HSV颜色模型
RGB颜色模型和HSV颜色模型“【5月更文挑战第22天】”
162 2
|
8天前
|
存储 编解码 监控
RGB 和 YUV 区别
【10月更文挑战第26天】RGB和YUV在色彩表示原理、数据存储方式、应用场景以及转换关系等方面都存在着明显的区别,它们各自在不同的领域发挥着重要的作用。
|
存储 编解码 Android开发
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888等图像色彩编码格式区别
NV21、NV12、YV12、RGB、YUV、RGBA、RGBX8888都是常见的图像颜色编码格式,它们之间的主要区别在于色彩空间和数据排列方式。
208 0
|
计算机视觉
计算机图形|RGB与HSV模型的转化
计算机图形|RGB与HSV模型的转化
150 0
计算机图形|RGB与HSV模型的转化
|
编解码 计算机视觉
CV13 图像分辨率操作(图像金字塔与resize()函数)
其中,高斯核卷积运算就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值(券种不同)经过加权平均后得到。常见的 33与 55 高斯核(CV9 2D卷积与图像滤波)
200 0
RGB颜色模型
RGB颜色模型
436 0
RGB颜色模型
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术—daidingdaiding
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术—daidingdaiding
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术—daidingdaiding
|
编解码
理解 RGB & YUV 颜色编码
理解 RGB & YUV 颜色编码
477 0
理解 RGB & YUV 颜色编码
|
算法 Java Android开发
常用的像素操作算法:Resize、Flip、Rotate
常用的像素操作算法:Resize、Flip、Rotate
383 0
常用的像素操作算法:Resize、Flip、Rotate
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术
DL之pix2pix(cGAN)之AC:基于pix2pix(cGAN)模型实现对图像实现Auto Color自动上色技术