【问题标题】:h264 u(v) decode of frame_num, pic_order_cnt_lsb and slice_group_change_cycleh264 u(v) 解码 frame_num、pic_order_cnt_lsb 和 slice_group_change_cycle
【发布时间】:2014-07-20 17:08:26
【问题描述】:

根据“Slice Header Syntax”(在 ITU-T Rec. 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)函数,不幸的是我自己无法弄清楚。你能帮忙吗?]

【问题讨论】:

    标签: avfoundation h.264 decoding


    【解决方案1】:

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

    frame_num

    作为图片的标识,用log2_max_frame_num_minus4 + 4 bits表示 比特流。

    以下是 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 bits。

    pic_order_cnt_lsb 的值应在 0 到 MaxPicOrderCntLsb – 1 的范围内。

    slice_group_change_cycle

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

    位读取示例:SliceHeader.cpp, line 170

    【讨论】:

    • 罗马,很好的答案。这正是我想要的。我还在“H.264/AVC 参考软件解码器文档”中查看了它here
    猜你喜欢
    • 2021-11-25
    • 2011-11-24
    • 2010-12-02
    • 2014-10-25
    • 1970-01-01
    • 2012-06-22
    • 2012-02-11
    • 2018-10-17
    • 2016-10-27
    相关资源
    最近更新 更多