根据“切片头语法”(在ITU中描述)。h264)、frame_num
、pic_order_cnt_lsb
和slice_group_change_cycle
都有u(v)
描述符,它是使用可变位数的无符号整数。
医生说
“位数的变化取决于其他语法元素的值。”
您知道如何计算用于存储frame_num
、pic_order_cnt_lsb
和slice_group_change_cycle
的位数吗?
引用的文档指向read_bits(n)
函数,不幸的是,我无法自己解决它。你能帮上忙吗?
发布于 2014-06-01 13:30:49
其他比特流值定义要读取的位数。
frame_num
作为图片的标识符,应以比特流中的log2_max_frame_num_minus4 +4位表示。
例如,以下是FFmpeg所做的工作:
log2_max_frame_num_minus4 = get_ue_golomb(&h->gb);
// ...
sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;
// ...
h->frame_num = get_bits(&h->gb, h->sps.log2_max_frame_num);
pic_order_cnt_lsb
指定编码帧的顶部字段或编码字段的图像顺序计数模MaxPicOrderCntLsb。 pic_order_cnt_lsb语法元素的大小是 log2_max_pic_order_cnt_lsb_minus4 +4位。 pic_order_cnt_lsb值应在0到MaxPicOrderCntLsb - 1的范围内(包括在内).
slice_group_change_cycle
slice_group_change_cycle的值在比特流中由以下位单元表示( Log2( PicSizeInMapUnitsχ2 SliceGroupChangeRate +1))
位读取示例:SliceHeader.cpp,第170行
https://stackoverflow.com/questions/23963078
复制相似问题