![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
得到了YUV三个分量的缓冲区指针,如何转化为一个YUV420的码流?
得到了Y,U,V三个分量的缓冲区BYTE*yPointer,BYTE*uPointer,BYTE*vPointer,如何转化为一个YUV420的码流,放在缓冲区里。因为现...
得到了Y,U,V三个分量的缓冲区BYTE* yPointer, BYTE* uPointer, BYTE* vPointer,如何转化为一个YUV420的码流,放在缓冲区里。因为现在需要YUV420码流,但回调中是三个分量,没有跨度。
之前如下:
int nSize = Height*Width;//Height,Width分别为一帧的高和宽
char*p = m_pBuf;//m_pBuf为存放YUV420码流的缓存,足够大
memcpy(p, yPointer, nSize);//yPointer指向Y分量的缓冲区
p += nSize;
memcpy(p, uPointer, nSize/4);
p += nSize/4;
memcpy(p, vPointer, nSize/4);
int len = nSize*3/2; //len为YUV420码流的长度
通过上面的代码m_pBuf就保存了YUV420的数据
可是用yuvplay播放,结果画面扭曲.
问题解决了,是SDK回调上来的宽和高不对,重新修改过宽高后,就可以正常播放了。 展开
之前如下:
int nSize = Height*Width;//Height,Width分别为一帧的高和宽
char*p = m_pBuf;//m_pBuf为存放YUV420码流的缓存,足够大
memcpy(p, yPointer, nSize);//yPointer指向Y分量的缓冲区
p += nSize;
memcpy(p, uPointer, nSize/4);
p += nSize/4;
memcpy(p, vPointer, nSize/4);
int len = nSize*3/2; //len为YUV420码流的长度
通过上面的代码m_pBuf就保存了YUV420的数据
可是用yuvplay播放,结果画面扭曲.
问题解决了,是SDK回调上来的宽和高不对,重新修改过宽高后,就可以正常播放了。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询