Может ли кто-нибудь помочь в понимании AVFrame.linesize []? - программирование
Подтвердить что ты не робот

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

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

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

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

ОБНОВЛЕНО

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

4b9b3361

Ответ 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 есть немного другое значение для тех, и в основном это количество байтов, которые вам нужно пропустить, чтобы продвигаться по строке.