video-anc: Replace GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW with CEA608_S334_1A
authorSebastian Dröge <sebastian@centricular.com>
Mon, 10 Dec 2018 13:55:49 +0000 (15:55 +0200)
committerSebastian Dröge <slomo@coaxion.net>
Sat, 15 Dec 2018 21:31:14 +0000 (21:31 +0000)
CEA608_IN_CEA708_RAW is the same format as CEA708_RAW. It's only
difference is that it must contain only CEA608 and a format like this
does not exist in practice. In practice every element that handles raw
cc_data triplets must check each triplet for their actual content and
handle them accordingly.

For CC-only streams a parser could signal the existence of CEA608 and/or
CEA708 inside the caps but for metas this can only potentially be
signalled via the ALLOCATION query for negotiation purposes.

A separate format for this is not very useful and instead it should be a
format qualifier.

CEA608_S334_1A is the format defined by SMPTE S334-1 Annex A and which
is used for transferring CEA608 over SDI instead of CEA708 CDP packets.

gst-libs/gst/video/video-anc.c
gst-libs/gst/video/video-anc.h

index ec9635e..f88c4df 100644 (file)
@@ -946,7 +946,7 @@ gst_buffer_add_video_caption_meta (GstBuffer * buffer,
 
   switch (caption_type) {
     case GST_VIDEO_CAPTION_TYPE_CEA608_RAW:
-    case GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW:
+    case GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A:
     case GST_VIDEO_CAPTION_TYPE_CEA708_RAW:
     case GST_VIDEO_CAPTION_TYPE_CEA708_CDP:
       break;
index 2c48265..834874b 100644 (file)
@@ -104,16 +104,20 @@ typedef enum {
  *      this format is not recommended since is does not specify to
  *      which field the caption comes from and therefore assumes
  *      it comes from the first field (and that there is no information
- *      on the second field). Use @@GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW
- *      if you wish to store CEA-608 from two fields.
- * @GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW: CEA-608 as cc_data byte triplets.
- *      The first byte of each triplet shall specify the field as in CEA-708
- *      (i.e: 0xFC for the first field or 0xFD for the second field.). The 2nd
- *      and 3rd byte of each triplet are the cc1 and cc2 bytes. Use this if
- *      there is *only* CEA-608 caption. If there is also CEA-708 caption,
- *      use @GST_VIDEO_CAPTION_TYPE_CEA708_RAW.
+ *      on the second field). Use @GST_VIDEO_CAPTION_TYPE_CEA708_RAW
+ *      if you wish to store CEA-608 from two fields and prefix each byte pair
+ *      with 0xFC for the first field and 0xFD for the second field.
+ * @GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A: CEA-608 as byte triplets as defined
+ *      in SMPTE S334-1 Annex A. The second and third byte of the byte triplet
+ *      is the raw CEA608 data, the first byte is a bitfield: The top/7th bit is
+ *      0 for the second field, 1 for the first field, bit 6 and 5 are 0 and
+ *      bits 4 to 0 are a 5 bit unsigned integer that represents 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).
  * @GST_VIDEO_CAPTION_TYPE_CEA708_RAW: CEA-708 as cc_data byte triplets. They
- *      can also contain 608-in-708.
+ *      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
  *      a CDP (Caption Distribution Packet) defined by SMPTE S-334-2.
  *      Contains the whole CDP (starting with 0x9669).
@@ -125,7 +129,7 @@ typedef enum {
 typedef enum {
   GST_VIDEO_CAPTION_TYPE_UNKNOWN                = 0,
   GST_VIDEO_CAPTION_TYPE_CEA608_RAW            = 1,
-  GST_VIDEO_CAPTION_TYPE_CEA608_IN_CEA708_RAW   = 2,
+  GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A                = 2,
   GST_VIDEO_CAPTION_TYPE_CEA708_RAW            = 3,
   GST_VIDEO_CAPTION_TYPE_CEA708_CDP            = 4
 } GstVideoCaptionType;