Кто-нибудь может помочь в понимании AVFrame.linesize[]?

Я пытался найти то, что каждая клетка AVFrame.linesize[] значит, но я не нашел.

как я понял linesize[0] это ширина, linesize[1] это высота.

  1. Если я прав, что означают другие клетки?
  2. почему после avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet); значение имеет только linesize[0], а другие ячейки всегда равны 0?

ОБНОВЛЕНО

Я думаю, что AVFrame.data[i] и AVFrame.linesize[i] - это данные определенного цвета в строке и длине строки, я прав?

2 ответа

Решение

В случае плоских данных, таких как YUV420, linesize[i] содержит шаг для iсамолет

Например, для кадра 640x480data[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)

Посмотрите описание форматов видеокадров:

Вы увидите, что форматы разделены на две большие группы: упакованные и плоские, в зависимости от того, хранятся ли компоненты отдельно или с чередованием. У шагов есть немного различное значение для них, и в основном это количество байтов, которые нужно пропустить, чтобы перейти на ряд вперед.

Другие вопросы по тегам