Я пытаюсь научиться пользоваться libav. Я следил за самым первым уроком на dranger.com, но в какой-то момент меня немного запутал.
// Write pixel data
for(y=0; y<height; y++)
fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile);
Этот код явно работает, но я не совсем понимаю, почему, особенно я не понять, как хранятся данные кадра в pFrame->data
, зависит ли это от используемого формата / кода c, почему pFrame->data
и pFrame->linesize
всегда ссылаются на индекс 0, и почему мы добавляем y к pFrame->data[0]
.
В учебнике написано
Мы собираемся немного схематично описывать сам формат PPM; поверьте нам, это работает.
Я не уверен, что запись в формате ppm является причиной того, что этот процесс кажется мне таким странным. Было бы очень полезно разъяснить, почему этот код такой и как libav хранит данные кадра. Я не очень хорошо знаком с кодированием / декодированием мультимедиа в целом, поэтому я пытаюсь учиться.