matroska-mux: support H264 avc3 / H265 hev1
authorMathieu Duponchelle <mathieu@centricular.com>
Mon, 9 Aug 2021 22:53:57 +0000 (00:53 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 20 Aug 2021 00:16:43 +0000 (00:16 +0000)
commit9bd8d608d5bae27ec5ff09e733f76ca32b17420c
tree006c24cb55c6c4e1d4b5139f055f9977ae8c4843
parentcb75eda13b20b5633546e40e7d8fcc0d479ee901
matroska-mux: support H264 avc3 / H265 hev1

The matroska codec specs is unfortunately vague on the subject,
stating for H264:

AVC/H.264 stored as described in [@!ISO.14496-15]

and for H265:

HEVC/H.265 stored as described in [@!ISO.14496-15]

This spec however specifies multiple stream formats, our
implementation has opted for interpreting this as avc1 / hvc1,
both of which disallow in-band SPS.

Most decoders however will support in-band SPS / PPS, and
this commit gives the option to explicitly mux in avc3 / hev1,
which allows changing stream parameters on the fly, that is
useful for smart encoding for example.

When either of these stream formats are picked as the input,
changes in codec_data / tier / level / profile do not cause
renegotiation failure, a warning is logged however as it isn't
clear how compliant such a stream is.

The stream-format field is correctly ordered in the template
caps to avoid selecting potentially non-compliant options on
automatic negotiation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1047>
docs/gst_plugins_cache.json
gst/matroska/matroska-mux.c