gstreamer/subprojects/gst-plugins-base/gst
Ruben Gonzalez dc4dd415f0 typefind: Add typefinder for VVC/H.266
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/

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7339>
2024-10-14 16:36:46 +02:00
..
adder meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
app meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioconvert base: audio: video: Use more efficient caps/structure API in various places 2024-09-26 19:26:18 +03:00
audiomixer base: audio: video: Use more efficient caps/structure API in various places 2024-09-26 19:26:18 +03:00
audiorate meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioresample base: audio: video: Use more efficient caps/structure API in various places 2024-09-26 19:26:18 +03:00
audiotestsrc audiotestsrc: Initialize all samples in wave=ticks mode 2023-04-22 08:44:02 +00:00
compositor base: audio: video: Use more efficient caps/structure API in various places 2024-09-26 19:26:18 +03:00
debugutils fakevideodec: fix minimum allocation pool size 2024-09-09 19:37:45 +00:00
dsd dsd: Add code for DSD audio support 2023-06-23 01:27:03 +00:00
encoding common: Stop using GQuark-based GstStructure field name API 2024-09-26 19:21:29 +03:00
gio gio: Drop some trailing whitespace in giobasesink 2023-10-04 12:56:03 +00:00
overlaycomposition video-filters: Fix passthrough with ANY caps feature 2023-10-03 21:13:00 +00:00
pbtypes meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
playback decodebin3: do not attempt to remove a null stream 2024-10-03 07:08:37 +00:00
rawparse docs: Correct pipeline examples in rawaudioparse 2024-05-28 22:20:08 +00:00
subparse subparse: remove regex optimized flag explicitly 2024-07-03 03:46:19 +00:00
tcp meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
typefind typefind: Add typefinder for VVC/H.266 2024-10-14 16:36:46 +02:00
videoconvertscale base: audio: video: Use more efficient caps/structure API in various places 2024-09-26 19:26:18 +03:00
videorate videorate: Reset last_ts when a new segment is received 2024-04-02 21:06:21 +00:00
videotestsrc videotestsrc: add mutex around cache buffer to prevent race condition 2024-05-21 12:14:59 +00:00
volume volume: Expose the volume-full-range as another property 2024-02-27 12:33:44 +00:00
meson.build debug: add new element fakevideodec 2023-11-17 15:57:46 +00:00