Blob Blame History Raw
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/221

Index: gst-plugins-base-1.22.0/gst-libs/gst/video/video-anc.c
===================================================================
--- gst-plugins-base-1.22.0.orig/gst-libs/gst/video/video-anc.c
+++ gst-plugins-base-1.22.0/gst-libs/gst/video/video-anc.c
@@ -1017,6 +1017,8 @@ gst_buffer_add_video_caption_meta (GstBu
   switch (caption_type) {
     case GST_VIDEO_CAPTION_TYPE_CEA608_RAW:
     case GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A:
+    case GST_VIDEO_CAPTION_TYPE_CEA608_SCTE_20:
+    case GST_VIDEO_CAPTION_TYPE_CEA608_ADDITIONAL_CEA_608:
     case GST_VIDEO_CAPTION_TYPE_CEA708_RAW:
     case GST_VIDEO_CAPTION_TYPE_CEA708_CDP:
       break;
@@ -1066,6 +1068,10 @@ gst_video_caption_type_from_caps (const
       return GST_VIDEO_CAPTION_TYPE_CEA608_RAW;
     } else if (g_strcmp0 (format, "s334-1a") == 0) {
       return GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A;
+    } else if (g_strcmp0 (format, "scte-20") == 0) {
+      return GST_VIDEO_CAPTION_TYPE_CEA608_SCTE_20;
+    } else if (g_strcmp0 (format, "additional-cea-608") == 0) {
+      return GST_VIDEO_CAPTION_TYPE_CEA608_ADDITIONAL_CEA_608;
     }
   } else if (gst_structure_has_name (s, "closedcaption/x-cea-708")) {
     if (g_strcmp0 (format, "cc_data") == 0) {
@@ -1103,6 +1109,14 @@ gst_video_caption_type_to_caps (GstVideo
       caption_caps = gst_caps_new_simple ("closedcaption/x-cea-608",
           "format", G_TYPE_STRING, "s334-1a", NULL);
       break;
+    case GST_VIDEO_CAPTION_TYPE_CEA608_SCTE_20:
+      caption_caps = gst_caps_new_simple ("closedcaption/x-cea-608",
+          "format", G_TYPE_STRING, "scte-20", NULL);
+      break;
+    case GST_VIDEO_CAPTION_TYPE_CEA608_ADDITIONAL_CEA_608:
+      caption_caps = gst_caps_new_simple ("closedcaption/x-cea-608",
+          "format", G_TYPE_STRING, "additional-cea-608", NULL);
+      break;
     case GST_VIDEO_CAPTION_TYPE_CEA708_RAW:
       caption_caps = gst_caps_new_simple ("closedcaption/x-cea-708",
           "format", G_TYPE_STRING, "cc_data", NULL);
Index: gst-plugins-base-1.22.0/gst-libs/gst/video/video-anc.h
===================================================================
--- gst-plugins-base-1.22.0.orig/gst-libs/gst/video/video-anc.h
+++ gst-plugins-base-1.22.0/gst-libs/gst/video/video-anc.h
@@ -345,7 +345,53 @@ GstVideoBarMeta *gst_buffer_add_video_ba
  *      offset relative to the base-line of the original image format (line 9
  *      for 525-line field 1, line 272 for 525-line field 2, line 5 for
  *      625-line field 1 and line 318 for 625-line field 2).
- * @GST_VIDEO_CAPTION_TYPE_CEA708_RAW: CEA-708 as cc_data byte triplets. They
+ * @GST_VIDEO_CAPTION_TYPE_CEA608_SCTE_20: CEA 608 closed caption data as defined in
+ *      ANSI/SCTE 20
+ *      https://www.scte.org/documents/pdf/standards/SCTE%2020%202012.pdf
+ *      Section 5.5
+ *      This format is used for the carriage of CEA 608 closed caption data
+ *      originating in Vertical Blanking Interval (VBI) service, and transported
+ *      in MPEG-2 compliant bitstreams.
+ *      The first byte must equal 1000 0001 to indicate valid data.
+ *      The next five bits specify the number of CEA 608 closed caption triplets,
+ *      followed by the sequence of triplets, laid out as follows for each triplet:
+ *      cc priority : 2 bits
+ *      field number: 2 bits
+ *      line offset:  5 bits
+ *      cc data 1:    8 bits
+ *      cc data 2:    8 bits
+ *      Notes:
+ *      cc_priority is a number between 0 and 3 indicating the priority of constructs
+ *      in picture reconstruction where different levels of hardware capability exist
+ *      field number specifies the number of the field, in display order, from  which
+ *      the VBI data originated, specified as follows:
+ *      00 Forbidden
+ *      01 1st display field
+ *      10 2nd display field
+ *      11 3rd display field (the repeated field in film mode).
+ *      line offset is a five-bit integer giving the offset in lines from which
+ *      the VBI data originated, relative to the base VBI frame line
+ *      (line 10 of NTSC field 1, line 273 of NTSC field 2, line 6 of PAL field 1,
+ *      and line 319 of PAL field 2).
+ * @GST_VIDEO_CAPTION_TYPE_CEA608_ADDITIONAL_CEA_608: CEA-608 byte triplets as defined
+ *      in ANSI/SCTE 21
+ *      6.4 Additional CEA-608 Data
+ *      https://www.scte.org/documents/pdf/Standards/ANSI_SCTE%2021%202012.pdf.
+ *      This format, also known as telecine, is used for the carriage of CEA 608
+ *      closed caption data originating in Vertical Blanking Interval (VBI) service,
+ *      and transported over cable digital transport streams.
+ *      The second and third byte of the byte triplet
+ *      is the raw CEA608 data, the first byte is a bitfield: The top/7th bit must
+ *      equal 1 to indicate a valid triplet. Bits 6-2 represent the
+ *      line offset relative to the base-line of the original image format (line 9
+ *      for 525-line field 1, line 272 for 525-line field 2, line 5 for
+ *      625-line field 1 and line 318 for 625-line field 2).
+ *      Bits 1-0 represent the field number, as follows:
+ *      00 Forbidden
+ *      01 1st display field
+ *      10 2nd display field
+ *      11 3rd display field (the repeated field in film mode).
+  * @GST_VIDEO_CAPTION_TYPE_CEA708_RAW: CEA-708 as cc_data byte triplets. They
  *      can also contain 608-in-708 and the first byte of each triplet has to
  *      be inspected for detecting the type.
  * @GST_VIDEO_CAPTION_TYPE_CEA708_CDP: CEA-708 (and optionally CEA-608) in
@@ -361,7 +407,9 @@ typedef enum {
   GST_VIDEO_CAPTION_TYPE_CEA608_RAW		= 1,
   GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A		= 2,
   GST_VIDEO_CAPTION_TYPE_CEA708_RAW		= 3,
-  GST_VIDEO_CAPTION_TYPE_CEA708_CDP		= 4
+  GST_VIDEO_CAPTION_TYPE_CEA708_CDP		= 4,
+  GST_VIDEO_CAPTION_TYPE_CEA608_SCTE_20 = 5,
+  GST_VIDEO_CAPTION_TYPE_CEA608_ADDITIONAL_CEA_608 = 6
 } GstVideoCaptionType;
 
 GST_VIDEO_API