Кто-нибудь может помочь в понимании AVFrame.linesize[]?
Я пытался найти то, что каждая клетка AVFrame.linesize[]
значит, но я не нашел.
как я понял linesize[0]
это ширина, linesize[1]
это высота.
- Если я прав, что означают другие клетки?
- почему после
avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet);
значение имеет только linesize[0], а другие ячейки всегда равны 0?
ОБНОВЛЕНО
Я думаю, что AVFrame.data[i] и AVFrame.linesize[i] - это данные определенного цвета в строке и длине строки, я прав?
2 ответа
В случае плоских данных, таких как 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
)
Посмотрите описание форматов видеокадров:
Вы увидите, что форматы разделены на две большие группы: упакованные и плоские, в зависимости от того, хранятся ли компоненты отдельно или с чередованием. У шагов есть немного различное значение для них, и в основном это количество байтов, которые нужно пропустить, чтобы перейти на ряд вперед.