Как получить необработанные данные кадра из AVFrame.data [] и AVFrame.linesize [] без указания формата пикселей?

Я получаю общее представление о том, что frame.data[] интерпретируется в зависимости от того, какой формат пикселей является видео (RGB или YUV). Но есть ли общий способ получить все пиксельные данные из фрейма? Я просто хочу вычислить хэш данных фрейма, не интерпретируя его для отображения изображения.

Согласно AVFrame.h:

uint8_t* AVFrame::data[AV_NUM_DATA_POINTERS]

указатель на плоскость изображения/канала.

int AVFrame::linesize[AV_NUM_DATA_POINTERS]

Для видео, размер в байтах каждой строки изображения.

Означает ли это, что если я просто извлечу из data[i] для linesize[i] байт, тогда я получу полную информацию о кадре о кадре?

Ответ 1

linesize[i] содержит шаг для i -й плоскости.

Чтобы получить весь буфер, используйте функцию из avcodec.h

/**
 * Copy pixel data from an AVPicture into a buffer, always assume a
 * linesize alignment of 1. */   
int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt,
                 int width, int height,
                 unsigned char *dest, int dest_size);

Используйте

int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);

чтобы вычислить необходимый размер буфера.