Запись YUV в файл результатов в дублированных кадрах

Я записываю кадры 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 раз. Я дважды проверил его. Откуда появился другой кадр?

1

Решение

Ничего не знаю про opengl, но размер кадра в формате YV12

width * height * 1.5

т. е. часть обрезки отбирается с коэффициентом 2 по горизонтали и вертикали.
Выше я вижу 3 много, измените это значение на 1.5 вместо.

Если вы заинтересованы в оформлении инструмента конвертации формата YUV этот который я написал на питоне. И зритель на основе SDL Вот. Много вдохновения там 🙂

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]