isomp4/qtmux: allow renegotiating when tier / level / profile change
authorMathieu Duponchelle <mathieu@centricular.com>
Mon, 9 Aug 2021 22:51:36 +0000 (00:51 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 20 Aug 2021 00:16:43 +0000 (00:16 +0000)
Those are carried either in codec_data or in-band SPS (for avc3),
and it is OK for those to change, though decoders obviously need
to support it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1047>

gst/isomp4/gstqtmux.c

index eb55e80..bae5ff7 100644 (file)
@@ -5740,9 +5740,18 @@ check_field (GQuark field_id, const GValue * value, gpointer user_data)
 
   if (g_strcmp0 (name, "video/x-h264") == 0 ||
       g_strcmp0 (name, "video/x-h265") == 0) {
-    /* we support muxing multiple codec_data structures */
+    /* We support muxing multiple codec_data structures, and the new SPS
+     * will contain updated tier / level / profiles, which means we do
+     * not need to fail renegotiation when those change.
+     */
     if (g_strcmp0 (g_quark_to_string (field_id), "codec_data") == 0) {
       return TRUE;
+    } else if (g_strcmp0 (g_quark_to_string (field_id), "tier") == 0) {
+      return TRUE;
+    } else if (g_strcmp0 (g_quark_to_string (field_id), "level") == 0) {
+      return TRUE;
+    } else if (g_strcmp0 (g_quark_to_string (field_id), "profile") == 0) {
+      return TRUE;
     }
   }