onRenderVideoFrame和onCaptureVideoFrame同一摄像头VideoFrame的yuv buffer长度不一样

环境:官网demo Basic-Video-Call-master.zip:OpenVideoCall-Windows-MFC
SDK:Agora_Native_SDK_for_Windows_v3_5_0_4_FULL .zip

网页测试端:Basic Video Call -- Agora

问题表现:
A.接收数据: 先用网页端进入房间,后用编译的MFC窗口端进入同一房间,MFC端开启filter监听onRenderVideoFrame每帧画面数据。
B.监听直接捕获的摄像头数据:直接编译器启动MFC窗口端进入房间开启filter监听在onCaptureVideoFrame收到的画面数据。
结果:VideoFrame的宽高都是640x480,type都是FRAME_TYPE_YUV420。不同的是onRenderVideoFrame收到的YUV Stride分别是704:352:352,本地onCaptureVideoFrame是640:320:320。onCaptureVideoFrame数据是正常,buffer符合预期yBuffer长度等于widthheight,uBuffer和vBuffer长度等于widthheight/4.

建议运行下API example看下现象https://github.com/AgoraIO/API-Examples/tree/master/windows

谢谢,我已经解决了。YUV在内存中占用的实际长度计算公式应该是用Stride计算而不是用图像宽:

yBufferLength=yStridexheight;
uBufferLength=uStridexheight / 2;
vBufferLength=vStride x height / 2;
yStride=2 x uStride=2 x vStride;

yuv的解析博客都是按照width等于yStride的特列解说的,总以为是Buffer长度应该用图像的宽高来计算,所以产生了误导。