Синтаксис h264 (детали синтаксиса P-кадров)

Разбираю H264 NAL Units. В моей последовательности есть блоки NAL с заданными параметрами изображения, заданными параметрами последовательности, I-кадры (они же IDR) и P-кадры (I- и P-кадры состоят из одного слайса). (вообще нет B-кадров)

Итак, у меня поток NAL Units выглядит так:

[SPS] [PPS] [I(IDR)] [P] [P] [P] ... [P] [P] [SPS] [PPS] [I(IDR)] [P] [P] [P] ....

Каждый кадр I в моем потоке также является кадром IDR, поэтому его номер кадра равен 0 (согласно стандарту h.264).

Также каждый P-кадр имеет frame_num на единицу больше, чем предыдущий кадр.

Но меня смущает pic_order_cnt_lsb.

Что представляет собой pic_order_cnt_lsb?

В моей последовательности:

  • если кадр P имеет frame_num==2 его pic_order_cnt_lsb==4
  • если кадр P имеет frame_num==3, его pic_order_cnt_lsb==6
  • если кадр P имеет frame_num==4 его pic_order_cnt_lsb==8
  • и т.д... (в моей ситуации pic_order_cnt_lsb == 2*frame_num)

И почему такая корреляция между frame_num и pic_order_cnt_lsb?

Спасибо,


person stemm    schedule 22.04.2011    source источник


Ответы (1)


Похоже, у вас есть чересстрочные данные. При чересстрочных данных один кадр состоит из двух полей. Другое поле каждого кадра будет иметь нечетные значения для pic_order_cnt_lsb.

pic_order_cnt_lsb — это всего лишь младшие биты счетчика, отслеживающего порядок изображений. Если (как в типичных чересстрочных данных) у вас есть два изображения на кадр, то оно будет увеличиваться на два при каждом изменении в frame_num. Если бы ваш поток был прогрессивным, а не чересстрочным, они бы увеличивались вместе.

person Jerry Coffin    schedule 22.04.2011