Я долго искал возможность заставить avcodec использовать невыровненную память для своих данных AVFrame.
В зависимости от формата пикселя горизонтальные плоскости данных AVFrame-> могут быть дополнены дополнительными данными для выравнивания в памяти для повышения производительности.
например: видео 1920 * 1080 с 4 байтами на пиксель будет иметь 1920 * 4 = 7680 байтов на плоскость.
С avcodec, если вы декодируете это видео, оно создаст 7808 байт на плоскость.
Это добавляет 7808 - 7680 = 128 байт дополнительного заполнения.
Для моих целей я хотел бы заставить avcodec использовать невыровненные данные, чтобы я мог копировать весь непрерывный фрагмент данных кадра вместо того, чтобы копировать и форматировать более мелкие фрагменты по одному в непрерывный фрагмент.
В заголовках обнаружен следующий флаг:
/* encoding support
These flags can be passed in AVCodecContext.flags before initialization.
Note: Not everything is supported yet.
*/
/**
* Allow decoders to produce frames with data planes that are not aligned
* to CPU requirements (e.g. due to cropping).
*/
#define CODEC_FLAG_UNALIGNED 0x0001
Если установить для этого AVCodecContext.flags значение CODEC_FLAG_UNALIGNED, предполагается, что данные AVFrame-> теперь не выровнены, это не так.
Я не уверен, что смотрю в нужное место или правильно использую этот флаг.
С уважением,
Любопытный Джордж