Может ли кто-нибудь помочь в понимании AVFrame.linesize []?
Я попытался найти, что означает каждая ячейка AVFrame.linesize[]
, но я не нашел.
Как я понял, linesize[0]
- ширина, linesize[1]
- высота.
- Если я прав, что означают другие ячейки?
- почему после
avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);
только lineize [0] имеет значение, а другие ячейки всегда равны 0?
ОБНОВЛЕНО
Я думаю, что AVFrame.data [i] и AVFrame.linesize [i] - это данные определенного цвета в строке и длине строки, правильно ли я?
Ответы
Ответ 1
В случае плоских данных, таких как YUV420
, linesize[i]
содержит шаг для i
-й плоскости.
Например, для фрейма 640x480
data[0]
содержит указатель на компонент Y
, data[1]
и data[2]
содержит указатели на плоскости U
и V
. В этом случае linesize[0] == 640
, linesize[1] == linesize[2] == 320
(поскольку плоскости U
и V
меньше, чем Y
половина плоскости)
В случае данных пикселя (RGB24
) существует только одна плоскость (data[0]
) и linesize[0] == width * channels
(640 * 3
для RGB24
)
Ответ 2
Посмотрите описание форматов видеофрагментов:
Вы увидите, что форматы разделены на две большие группы: упакованы и плоские, в зависимости от того, хранятся ли компоненты отдельно или чередуются. У Strides есть немного другое значение для тех, и в основном это количество байтов, которые вам нужно пропустить, чтобы продвигаться по строке.