Эксп. - коды Голомба какого порядка ??
Если вам необходимо проанализировать поток битов H.264 (я имею в виду транспортный уровень), вы можете написать простые функции для доступа к скицифицированным битам в бесконечном потоке битов. Индексирование битов слева направо.
inline u_dword get_bit(const u_byte * const base, u_dword offset)
{
return ((*(base + (offset >> 0x3))) >> (0x7 - (offset & 0x7))) & 0x1;
}
Эта функция реализует декодирование кодов exp-Golomb нулевого диапазона (используется в H.264).
u_dword DecodeUGolomb(const u_byte * const base, u_dword * const offset)
{
u_dword zeros = 0;
// calculate zero bits. Will be optimized.
while (0 == get_bit(base, (*offset)++)) zeros++;
// insert first 1 bit
u_dword info = 1 << zeros;
for (s_dword i = zeros - 1; i >= 0; i--)
{
info |= get_bit(base, (*offset)++) << i;
}
return (info - 1);
}
u_dword означает 4-байтовое целое число без знака.
u_byte означает 1-байтовое целое число без знака.
Обратите внимание, что первый байт каждого блока NAL - это заданная структура с запрещенным битом, ссылкой NAL и типом NAL.