Как получить необработанные данные кадра из 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);
чтобы вычислить необходимый размер буфера.