Skip to content

typefind: Add typefinder for VVC/H.266

Rubén Gonzalez requested to merge rgonzalez/gstreamer:typefind_h266 into main

H.266 NAL unit header syntax [1] is similar to H.265 NAL unit header syntax[2]:

              H.265                               H.266
+---------------+---------------+   +---------------+---------------+
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|   |0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|F| NALType   | LayerId   | TID |   |F|U| LayerId | NALType   | TID |
+-------------+-----------+-----+   +-------------+-----------------+

Where

* F: `forbidden_zero_bit`: f(1)
* U: `nuh_reserved_zero_bit`: u(1) only H.266
* LayerId: `nuh_layer_id`: u(6)
* NALType: `nal_unit_type`: u(6) in H.265 and u(5) in H.266
* TID: `nuh_temporal_id_plus1`: u(3)

NAL unit types have different values:

NALType H.265 H.266
VPS HEVC_NAL_VPS(32) VVC_VPS_NUT(14)
SPS HEVC_NAL_SPS(33) VVC_SPS_NUT(15)
PPS HEVC_NAL_PPS(34) VVC_PPS_NUT(16)
IRAP BLA_W_LP(19)..HEVC_NAL_CRA_NUT(21) IDR_W_RADL(7)..CRA_NUT(9)

Implementation of h266_video_type_find is based on h265_video_type_find with next differences:

  • NAL unit header syntax for H.265 and H.266
  • Diff NAL unit types values
  • Avoid checking nuh_layer_id is zero. H.266 conformance test suite[3] contains examples with more than one layer.

This typefind was tested with H.266 conformance test suite [3]. Also, with the help of fluster[4], with H.264 and H.265 conformance test suites to avoid regresions. Pending test vectors to fix:

  • 8b422_H_Sony_4
  • DEBLOCKING_E_Ericsson_3

[1] https://www.itu.int/rec/T-REC-H.266
[2] https://www.itu.int/rec/T-REC-H.265
[3] https://www.itu.int/wftp3/av-arch/jvet-site/bitstream_exchange/VVC/draft_conformance/draft6/
[4] https://github.com/fluendo/fluster/

H.266

Edited by Rubén Gonzalez

Merge request reports

Loading