qtdemux: Add basic support for AVC-Intra video
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>
Tue, 17 Jan 2023 14:04:10 +0000 (15:04 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 18 Jan 2023 10:01:30 +0000 (10:01 +0000)
AVC-Intra is a range of H.264-compliant intra-only codecs from
Panasonic. The codes and descriptions have been taken from VLC.

The (encumbered) sample I have here produces byte-stream H.264,
including SPS and PPS and no `avcC` box.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3739>

subprojects/gst-plugins-good/gst/isomp4/fourcc.h
subprojects/gst-plugins-good/gst/isomp4/qtdemux.c
subprojects/gst-plugins-good/gst/isomp4/qtdemux_types.c

index 8e15bf7..0831b4c 100644 (file)
@@ -86,6 +86,18 @@ G_BEGIN_DECLS
 #define FOURCC_aART     GST_MAKE_FOURCC('a','A','R','T')
 #define FOURCC_ac_3     GST_MAKE_FOURCC('a','c','-','3')
 #define FOURCC_agsm     GST_MAKE_FOURCC('a','g','s','m')
+#define FOURCC_ai12     GST_MAKE_FOURCC('a','i','1','2')
+#define FOURCC_ai13     GST_MAKE_FOURCC('a','i','1','3')
+#define FOURCC_ai15     GST_MAKE_FOURCC('a','i','1','5')
+#define FOURCC_ai16     GST_MAKE_FOURCC('a','i','1','6')
+#define FOURCC_ai1p     GST_MAKE_FOURCC('a','i','1','p')
+#define FOURCC_ai1q     GST_MAKE_FOURCC('a','i','1','q')
+#define FOURCC_ai52     GST_MAKE_FOURCC('a','i','5','2')
+#define FOURCC_ai53     GST_MAKE_FOURCC('a','i','5','3')
+#define FOURCC_ai55     GST_MAKE_FOURCC('a','i','5','5')
+#define FOURCC_ai56     GST_MAKE_FOURCC('a','i','5','6')
+#define FOURCC_ai5p     GST_MAKE_FOURCC('a','i','5','p')
+#define FOURCC_ai5q     GST_MAKE_FOURCC('a','i','5','q')
 #define FOURCC_alac     GST_MAKE_FOURCC('a','l','a','c')
 #define FOURCC_fLaC     GST_MAKE_FOURCC('f','L','a','C')
 #define FOURCC_dfLa     GST_MAKE_FOURCC('d','f','L','a')
index 7b1209b..2eb94a5 100644 (file)
@@ -14835,6 +14835,23 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
           "stream-format", G_TYPE_STRING, "avc3",
           "alignment", G_TYPE_STRING, "au", NULL);
       break;
+    case FOURCC_ai12:
+    case FOURCC_ai13:
+    case FOURCC_ai15:
+    case FOURCC_ai16:
+    case FOURCC_ai1p:
+    case FOURCC_ai1q:
+    case FOURCC_ai52:
+    case FOURCC_ai53:
+    case FOURCC_ai55:
+    case FOURCC_ai56:
+    case FOURCC_ai5p:
+    case FOURCC_ai5q:
+      _codec ("H.264 / AVC");
+      caps = gst_caps_new_simple ("video/x-h264",
+          "stream-format", G_TYPE_STRING, "byte-stream",
+          "alignment", G_TYPE_STRING, "au", NULL);
+      break;
     case FOURCC_H265:
     case FOURCC_hvc1:
     case FOURCC_dvh1:
index f9bb7c3..5e6d735 100644 (file)
@@ -190,6 +190,18 @@ static const QtNodeType qt_node_types[] = {
   {FOURCC_avc3, "AV codec configuration v3", 0},
   {FOURCC_dva1, "AVC-based Dolby Vision derived from avc1", 0},
   {FOURCC_dvav, "AVC-based Dolby Vision derived from avc3", 0},
+  {FOURCC_ai12, "AVC-Intra 100M 1080p25/50", 0},
+  {FOURCC_ai13, "AVC-Intra 100M 1080p24/30/60", 0},
+  {FOURCC_ai15, "AVC-Intra 100M 1080i50", 0},
+  {FOURCC_ai16, "AVC-Intra 100M 1080i60", 0},
+  {FOURCC_ai1p, "AVC-Intra 100M 720p24/30/60", 0},
+  {FOURCC_ai1q, "AVC-Intra 100M 720p25/50", 0},
+  {FOURCC_ai52, "AVC-Intra 50M 1080p25/50", 0},
+  {FOURCC_ai53, "AVC-Intra 50M 1080p24/30/60", 0},
+  {FOURCC_ai55, "AVC-Intra 50M 1080i50", 0},
+  {FOURCC_ai56, "AVC-Intra 50M 1080i60", 0},
+  {FOURCC_ai5p, "AVC-Intra 50M 720p24/30/60", 0},
+  {FOURCC_ai5q, "AVC-Intra 50M 720p25/50", 0},
   {FOURCC_mp4s, "VOBSUB codec configuration", 0},
   {FOURCC_hvc1, "HEVC codec configuration", 0},
   {FOURCC_hev1, "HEVC codec configuration", 0},