avframe中的linesize与width的关系

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 08:15   23   0

在看别人的代码时,发现有这个

for (int i=0; i < nheight; i++) 
        { 
         memcpy(m_pYUVBuffer + nYUVBufsize , m_pYUVFrame->data[0] + i * m_pYUVFrame->linesize[0], 
          nwidth); 
         nYUVBufsize += nwidth; 
        } 
        for (int i=0; i < nheight/2; i++) 
        { 
         memcpy(m_pYUVBuffer + nYUVBufsize , m_pYUVFrame->data[1] + i * m_pYUVFrame->linesize[1],
          nwidth/2); 
         nYUVBufsize += nwidth/2; 
        } 
        for (int i=0; i < nheight/2; i++) 
        {
         memcpy(m_pYUVBuffer + nYUVBufsize , m_pYUVFrame->data[2] + i * m_pYUVFrame->linesize[2],
          nwidth/2); 
         nYUVBufsize += nwidth/2; 
        }

为什么不直接使用

memcpy(m_pYUVBuffer + nYUVBufsize, m_pYUVFrame->data[0], nheight*nwidth);
        nYUVBufsize += nheight*nwidth;
        memcpy(m_pYUVBuffer + nYUVBufsize, m_pYUVFrame->data[1], nheight*nwidth/4);
        nYUVBufsize += nheight*nwidth/4;
        memcpy(m_pYUVBuffer + nYUVBufsize, m_pYUVFrame->data[2], nheight*nwidth/4);
        nYUVBufsize += nheight*nwidth/4;
        
后来发现这样是不行的,因为linesize是指每一行占多少字节,可能比宽度nwidth要大,它是根据cpu来对齐的,可能是16或32的整数倍,不同的cpu有不同的对齐方式。

要通过上面的for循环将yuv数据放到一个bufer中

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP