Opened 3 years ago

Last modified 3 years ago

#1348 new defect

Inconsistency in HEVC spec and between the spec and HM

Reported by: gaow02 Owned by:
Priority: major Milestone:
Component: Text Version: D10 (L1003) v33
Keywords: Cc: bbross, wjhan, jct-vc@…

Description

We found some inconsistency in HEVC spec and between the spec and HM software. We would appreciate if someone can help to clarify them.

1.Use of “concatenation_flag”:
The meaning of this flag being either “0” or “1” as described in Annex C.2.3 Eq(C-11)(on “concatenationFlag”) is different from that described later in Annex D.3.2 (on “concatenation_flag”). Based on common sense and also as implemented in HM encoder, it seems that the description in Annex C.2.3 would be correct, i.e. concatenation_flag = 0, meaning no extra constraint related w/ prevNonDiscardablePic is needed, and the derivation of nominal removal time would be simpler and the same as in AVC.

2.The setting of “nuh_temporal_id_plus1”:
In HEVC spec 7.4.2.2, when explaining the setting of right values for “TemporalId for non-VCL NAL units”,the last statement is that “Otherwise, TemporalId shall be greater than or equal to the TemporalId of the access unit containing the NAL unit.” However, in the following “NOTE 9”, it says “When the NAL unit is a non-VCL NAL unit, the value of TemporalId is equal to the minimum value of the TemporalId values of all access units to which the non-VCL NAL unit applies.” The “greater than” in the 1st statement is contradictory w/ the “minimum” in the 2nd statement. From HM encoder, we see that it is implemented to be the “minimum” as stated in the 2nd statement.

  1. Inconsistency between HM encoder and HEVC spec:

For HEVC VPS and SPS parameters “sps_max_dec_pic_buffering_minus1[i]”, and “sps_num_reorder_pics[i]” (same things for “vps_” as well), they are coded in HM encoder functions CodeSPS() and CodeVPS(). The related variables NumReorderPics and MaxDecPicBuffering of layer i are set the same value of the involved layer index, i.e. “i”, which can be seen by tracing all the code w/ key words “setNumReorderPics” and “setMaxDecPicBuffering”. This setting, however, violates w/ the value constraint of vps/sps_max_num_reorder_pics[i] as stated in HEVC spec 7.4.3.1 and 7.4.3.2, where it basically says max_num_reorder_pics[i] has to be in the range of 0 to max_dec_pic_buffering_minus1[i], inclusive. Now, the current HM setting value of NumReorderPics is equal to the value of MaxDecPicBuffering, which will violate the constraint as stated in the spec.

==========
Note that: the version of the HEVC spec we are using is L1003_v34. However, I couldn't find that version in the list. So I choose the closest one, L1003_v33.

Change History (4)

comment:1 Changed 3 years ago by DefaultCC Plugin

  • Cc bbross wjhan jct-vc@… added

comment:2 Changed 3 years ago by yk

Thanks!

The first two points are about the text only, not between text and software. It would have been clearer to people on the list to use another thread, as some people may have never touched the software though played a lot with the text :-)

  1. Could you please clarify which specific aspects in the semantics of concatenation_flag in D.3.2 are contradicting with the equation in C.2.3? Alternatively, maybe if you suggest changes I would also understand the issue better.
  1. It seems that there is a misunderstanding here about the meaning of AUs a non-VCL NAL unit applies to. A PPS can be present in the very first AU of a bitstream, but it does not apply to the very first AU. As said in one of the sentences in the note: "When nal_unit_type is equal to PPS_NUT, TemporalId may be greater than or equal to the TemporalId of the containing access unit, as all PPSs may be included in the beginning of a bitstream, wherein the first coded picture has TemporalId equal to 0." Due to the existence of the sentence in the note, I think it should be clear. Please suggest if you think some more clarification would be helpful.
  1. I'd let someone else who is familiar with the software to comment on this point.

comment:3 Changed 3 years ago by gaow02

Replied by WG

Please see our reply embedded in your comments.

The first two points are about the text only, not between text and
software. It would have been clearer to people on the list to use another
thread, as some people may have never touched the software though played a
lot with the text :-)

  1. Could you please clarify which specific aspects in the semantics of

concatenation_flag in D.3.2 are contradicting with the equation in C.2.3?
Alternatively, maybe if you suggest changes I would also understand the
issue better.

[reply]: The suggested change for D.3.2 text below au_cpb_removal_delay_delta_minus1 is shown as follows.

When the current picture contains a buffering period SEI message and concatenation_flag is equal to 0 [Herein, should be 1] and the current picture is not the first picture in the bitstream in decoding order, it is a requirement of bitstream conformance that the following constraint applies:

– If the picture prevNonDiscardablePic is not associated with a buffering period SEI message, the au_cpb_removal_delay_minus1 of the current picture shall be equal to the au_cpb_removal_delay_minus1 of prevNonDiscardablePic plus au_cpb_removal_delay_delta_minus1 + 1.

– Otherwise, au_cpb_removal_delay_minus1 shall be equal to au_cpb_removal_delay_delta_minus1.

NOTE 3 – When the current picture contains a buffering period SEI message and concatenation_flag is equal to 1 [Herein, should be 0], the au_cpb_removal_delay_minus1 for the current picture is not used.


  1. It seems that there is a misunderstanding here about the meaning of AUs

a non-VCL NAL unit applies to. A PPS can be present in the very first AU
of a bitstream, but it does not apply to the very first AU. As said in one
of the sentences in the note: "When nal_unit_type is equal to PPS_NUT,
TemporalId may be greater than or equal to the TemporalId of the
containing access unit, as all PPSs may be included in the beginning of a
bitstream, wherein the first coded picture has TemporalId equal to 0." Due
to the existence of the sentence in the note, I think it should be clear.
Please suggest if you think some more clarification would be helpful.

[Reply]: One possible counter example for the non-VCL TemporalId prescription in Section 7.4.2.2. may be as follows.

A non-VCL unit is contained by an AU w/ TemporalId >0 (e.g. 2), while it is not applied to its containing AU, but some subset of the following AUs, among which the minimum TemporalId is a value smaller than its containing AU’s TemporalId (e.g. the minimum TemporalId is 0). In this case, the conformance to the last sentence before Note 9, and the conformance to the first sentence of Note 9, would be conflicting each other.

Would this example be possible from the spec? If not, what prescriptions on the use of non-VCL unit can fully prevent it? ….

FYI, the last sentence before Note 9 and Note 9 in Section 7.4.2.2 on non-VCL TemporalId is attached as follows:

– Otherwise, TemporalId shall be greater than or equal to the TemporalId of the access unit containing the NAL unit.

NOTE 9 – When the NAL unit is a non-VCL NAL unit, the value of TemporalId is equal to the minimum value of the TemporalId values of all access units to which the non-VCL NAL unit applies. When nal_unit_type is equal to PPS_NUT, TemporalId may be greater than or equal to the TemporalId of the containing access unit, as all PPSs may be included in the beginning of a bitstream, wherein the first coded picture has TemporalId equal to 0. When nal_unit_type is equal to PREFIX_SEI_NUT or SUFFIX_SEI_NUT, TemporalId may be greater than or equal to the TemporalId of the containing access unit, as an SEI NAL unit may contain information, e.g. in a buffering period SEI message or a picture timing SEI message, that applies to a bitstream subset that includes access units for which the TemporalId values are greater than the TemporalId of the access unit containing the SEI NAL unit.


[Reply] Also, regarding this non-VCL TemporalId conformance, one question to the current HM encoder is that: from the spec, there cannot find any difference between buffering period and picture timing SEI messages on that. But in current HM encoder, buffering period SEI NAL unit is always hard-forced set its TemporalId to be 0, but not the TemporalId from its containing AU. HM encoder sets the TemporalId of its picture timing SEI to be the TemporalId of its containing AU, which is as prescribed in the spec. So, for HM encoder buffering period SEI, is it implicitly assuming that: its containing AU (i.e. an I-slice) will always be having TemoralId = 0? If so, is this assumption valid from the spec? …

comment:4 Changed 3 years ago by yk

Hi Wen,

I think the wording regarding the equation in C.2.3 involving concatenationFlag and the semantics wording in D.2.3 are consistent, and the values of 0 and 1 should not be swapped as you suggested below. Maybe Lihua or Gary could double check (Lihua and Gary were the proponents of the concatenation_flag).

Regarding the 2nd point on non-VCL NAL unit location: the example you gave (a non-VCL NAL unit having TemporalId less than the TemporalId of the containing AU) is disallowed by the entire sentence before the Note 9 unless nal_unit_type is equal to EOS_NUT or EOB_NUT. The entire sentence is copied below for convenience:

The value of TemporalId for non-VCL NAL units is constrained as follows:
– If nal_unit_type is equal to VPS_NUT or SPS_NUT, TemporalId shall be equal to 0 and the TemporalId of the access unit containing the NAL unit shall be equal to 0.
– Otherwise if nal_unit_type is equal to EOS_NUT or EOB_NUT, TemporalId shall be equal to 0.
– Otherwise, if nal_unit_type is equal to AUD_NUT or FD_NUT, TemporalId shall be equal to the TemporalId of the access unit containing the NAL unit.
– Otherwise, TemporalId shall be greater than or equal to the TemporalId of the access unit containing the NAL unit.

Note that notes in the spec are only for information, they don’t define conformance. And to my current understanding, there is nothing wrong with the note 9 – though improvement suggestions are always welcome.

BR, YK

Note: See TracTickets for help on using tickets.

This list contains all users that will be notified about changes made to this ticket.

These roles will be notified: Reporter, Owner, Subscriber, Participant

  • Benjamin Bross(Subscriber)
  • David Flynn(Always)
  • jct-vc@…(Subscriber)
  • Karl Sharman(Always)
  • Karsten Suehring(Always)
  • Wen Gao(Reporter, Participant)
  • Woo-Jin Han(Subscriber)
  • Ye-Kui Wang(Participant)