h264 u(v)frame_num,pic_order_cnt_lsb和slice_group_change_cycle的解码

dl_*_*dl_ 5 decoding avfoundation h.264

根据"Slice Header Syntax"(在ITU-T Rec.h264中描述)frame_num,pic_order_cnt_lsb并且slice_group_change_cycle具有u(v)描述符,该描述符是使用可变位数的无符号整数.

该文件指出

"比特数的变化取决于其他语法元素的值."

你知道如何找出用来存储位的数量frame_num,pic_order_cnt_lsbslice_group_change_cycle

[引用的文档指出read_bits(n)功能,不幸的是我无法自己解决.你能帮我吗?]

Rom*_* R. 5

其他比特流值定义要读取的位数。

\n\n

frame_num

\n\n
\n

用作图片的标识符,由 log2_max_frame_num_minus4 + 4 位表示比特流中的 log2_max_frame_num_minus4 + 4 位表示。

\n
\n\n

例如,以下是 FFmpeg 的作用:

\n\n
log2_max_frame_num_minus4 = get_ue_golomb(&h->gb);\n// ...\nsps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;\n// ...\nh->frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num);\n
Run Code Online (Sandbox Code Playgroud)\n\n

pic_order_cnt_lsb

\n\n
\n

指定编码帧的顶部字段或编码字段的图片顺序计数模 MaxPicOrderCntLsb。pic_order_cnt_lsb 语法元素的大小为log2_max_pic_order_cnt_lsb_minus4+4比特。

\n\n

pic_order_cnt_lsb 的值应在 0 至 MaxPicOrderCntLsb \xe2\x80\x93 1(含)范围内。

\n
\n\n

slice_group_change_cycle

\n\n
\n

slice_group_change_cycle 的值在比特流中由以下位数表示\n Ceil( Log2( PicSizeInMapUnits \xc3\xb7 SliceGroupChangeRate + 1 ) )

\n
\n\n

位读取示例:SliceHeader.cpp,第 170 行

\n