Синтаксис h264 (детали синтаксиса P-кадров) - PullRequest
5 голосов
/ 22 апреля 2011

Я анализирую HAL 642 единицы NAL. В моей последовательности - есть блоки 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-кадром, поэтому его frame_num равен 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?

Спасибо

1 Ответ

1 голос
/ 22 апреля 2011

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

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

...