我正在将YUV(YV12)帧写入YUV文件。我正好保存101帧。但是当我播放输出YUV文件时,我的帧数增加了2倍,而第二帧总是空的。
这是我的代码:
size_t lenght=_viewWidth * _viewHeight * 3;
BYTE *bytes=(BYTE*)malloc(lenght);
/////////////// read pixels from tex /////////////////////
glBindTexture(GL_TEXTURE_2D,tex);
glGetTexImage(GL_TEXTURE_2D,0,GL_RGB,GL_UNSIGNED_BYTE,bytes);
glBindTexture(GL_TEXTURE_2D,0);
BYTE *uvOut= new uint8_t[_viewWidth * _viewHeight *3];
if(cfg.seqStart <= cfg.seqEnd)
{
hOutFile = fopen( outFileName.c_str(), cfg.appendMode ? "ab" : "wb" );
assert(hOutFile!=0);
RGBtoYUV420PSameSize(bytes,uvOut,3,0,_viewWidth,_viewHeight);
fwrite(uvOut,_viewWidth* 3, _viewHeight, hOutFile); // Write V line
fclose(hOutFile);
cfg.seqStart++;
}else{
printf("done");
}
delete uvOut;
free(bytes);
我运行了101次此块,再次检查了它。
最佳答案
对opengl一无所知,但是YV12格式的帧的大小为
width * height * 1.5
即,色度部分在水平和垂直方向上均按因子2进行二次采样。
在上方,我看到了很多
3
,请将其值更改为1.5
。如果您对YUV格式转换工具感兴趣,请 check out this(我用python编写)。还有一个基于SDL的查看器here。那里有很多灵感:-)
关于c++ - 将YUV写入文件会导致帧重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15463415/