1
我正在將YUV(YV12)幀寫入YUV文件。我準確地保存了101幀。但是當我播放輸出YUV文件時,我有兩個更多的幀,而每個第二幀總是空的。將YUV寫入文件結果的複製幀
這裏是我的代碼:
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 times.I雙重檢查it.Where不另一幀是從哪裏來的?
因此,fwrite應該考慮尺寸寬*高* 1.5? ,count參數是一樣的嗎?感謝您的信息,順便說一句! – 2013-03-17 22:10:48
是的,看起來像它 – 2013-03-17 22:23:44
@MichaelIV:關心1.5的Carefull!如果您在計算中使用浮點數,則容易出現舍入誤差。改用3/2;這當然意味着您的圖像寬度必須是可被2整除的數字(這是色度子採樣的限制)。 – datenwolf 2013-03-17 23:31:07