| 1 | /* GStreamer | 
| 2 |  * Copyright (C) <2018> Edward Hervey <edward@centricular.com> | 
| 3 |  * | 
| 4 |  * This library is free software; you can redistribute it and/or | 
| 5 |  * modify it under the terms of the GNU Library General Public | 
| 6 |  * License as published by the Free Software Foundation; either | 
| 7 |  * version 2 of the License, or (at your option) any later version. | 
| 8 |  * | 
| 9 |  * This library is distributed in the hope that it will be useful, | 
| 10 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 11 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 12 |  * Library General Public License for more details. | 
| 13 |  * | 
| 14 |  * You should have received a copy of the GNU Library General Public | 
| 15 |  * License along with this library; if not, write to the | 
| 16 |  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | 
| 17 |  * Boston, MA 02110-1301, USA. | 
| 18 |  */ | 
| 19 |  | 
| 20 | #ifndef __GST_VIDEO_ANC_H__ | 
| 21 | #define __GST_VIDEO_ANC_H__ | 
| 22 |  | 
| 23 | #include <gst/gst.h> | 
| 24 | #include <gst/video/video-format.h> | 
| 25 | #include <gst/video/video-info.h> | 
| 26 |  | 
| 27 | G_BEGIN_DECLS | 
| 28 |  | 
| 29 | typedef struct _GstVideoAncillary GstVideoAncillary; | 
| 30 |  | 
| 31 | /** | 
| 32 |  * GstVideoAncillary: | 
| 33 |  * @DID: The Data Identifier | 
| 34 |  * @SDID_block_number: The Secondary Data Identifier (if type 2) or the Data | 
| 35 |  *                     Block Number (if type 1) | 
| 36 |  * @data_count: The amount of data (in bytes) in @data (max 255 bytes) | 
| 37 |  * @data: (array length=data_count): The user data content of the Ancillary packet. | 
| 38 |  *    Does not contain the ADF, DID, SDID nor CS. | 
| 39 |  * | 
| 40 |  * Video Ancillary data, according to SMPTE-291M specification. | 
| 41 |  * | 
| 42 |  * Note that the contents of the data are always stored as 8bit data (i.e. do not contain | 
| 43 |  * the parity check bits). | 
| 44 |  * | 
| 45 |  * Since: 1.16 | 
| 46 |  */ | 
| 47 | struct _GstVideoAncillary { | 
| 48 |   guint8 DID; | 
| 49 |   guint8 SDID_block_number; | 
| 50 |   guint8 data_count; | 
| 51 |   guint8 data[256]; | 
| 52 |  | 
| 53 |   /*< private >*/ | 
| 54 |   /* Padding for future extension */ | 
| 55 |   gpointer _gst_reserved[GST_PADDING]; | 
| 56 | }; | 
| 57 |  | 
| 58 | /** | 
| 59 |  * GstVideoAncillaryDID: | 
| 60 |  * | 
| 61 |  * Since: 1.16 | 
| 62 |  */ | 
| 63 | typedef enum { | 
| 64 |   GST_VIDEO_ANCILLARY_DID_UNDEFINED = 0x00, | 
| 65 |   GST_VIDEO_ANCILLARY_DID_DELETION  = 0x80, | 
| 66 |   GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_FIRST = 0xa0, | 
| 67 |   GST_VIDEO_ANCILLARY_DID_HANC_3G_AUDIO_DATA_LAST = 0xa7, | 
| 68 |   GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_FIRST = 0xe0, | 
| 69 |   GST_VIDEO_ANCILLARY_DID_HANC_HDTV_AUDIO_DATA_LAST = 0xe7, | 
| 70 |   GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_FIRST = 0xec, | 
| 71 |   GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_1_LAST = 0xef, | 
| 72 |   GST_VIDEO_ANCILLARY_DID_CAMERA_POSITION = 0xf0, | 
| 73 |   GST_VIDEO_ANCILLARY_DID_HANC_ERROR_DETECTION = 0xf4, | 
| 74 |   GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_FIRST = 0xf8, | 
| 75 |   GST_VIDEO_ANCILLARY_DID_HANC_SDTV_AUDIO_DATA_2_LAST = 0xff, | 
| 76 | } GstVideoAncillaryDID; | 
| 77 |  | 
| 78 | /** | 
| 79 |  * GST_VIDEO_ANCILLARY_DID16: | 
| 80 |  * @anc: a #GstVideoAncillary | 
| 81 |  * | 
| 82 |  * Returns the #GstVideoAncillaryDID16 of the ancillary data. | 
| 83 |  * | 
| 84 |  * Since: 1.16 | 
| 85 |  * | 
| 86 |  * Returns: a #GstVideoAncillaryDID16 identifier | 
| 87 |  */ | 
| 88 | #define GST_VIDEO_ANCILLARY_DID16(anc) ((guint16)((anc)->DID) << 8 | (guint16)((anc)->SDID_block_number)) | 
| 89 |  | 
| 90 | /** | 
| 91 |  * GstVideoAncillaryDID16: | 
| 92 |  * @GST_VIDEO_ANCILLARY_DID16_S334_EIA_708: CEA 708 Ancillary data according to SMPTE 334 | 
| 93 |  * @GST_VIDEO_ANCILLARY_DID16_S334_EIA_608: CEA 608 Ancillary data according to SMPTE 334 | 
| 94 |  * @GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR: AFD/Bar Ancillary data according to SMPTE 2016-3 (Since: 1.18) | 
| 95 |  * | 
| 96 |  * Some know types of Ancillary Data identifiers. | 
| 97 |  * | 
| 98 |  * Since: 1.16 | 
| 99 |  */ | 
| 100 | typedef enum { | 
| 101 |   GST_VIDEO_ANCILLARY_DID16_S334_EIA_708	= 0x6101, | 
| 102 |   GST_VIDEO_ANCILLARY_DID16_S334_EIA_608	= 0x6102, | 
| 103 |   GST_VIDEO_ANCILLARY_DID16_S2016_3_AFD_BAR	= 0x4105, | 
| 104 | } GstVideoAncillaryDID16; | 
| 105 |  | 
| 106 | /** | 
| 107 |  * GstVideoAFDValue: | 
| 108 |  * @GST_VIDEO_AFD_UNAVAILABLE: Unavailable (see note 0 below). | 
| 109 |  * @GST_VIDEO_AFD_16_9_TOP_ALIGNED: For 4:3 coded frame, letterbox 16:9 image, | 
| 110 |  *      at top of the coded frame. For 16:9 coded frame, full frame 16:9 image, | 
| 111 |  *      the same as the coded frame. | 
| 112 |  * @GST_VIDEO_AFD_14_9_TOP_ALIGNED: For 4:3 coded frame, letterbox 14:9 image, | 
| 113 |  *      at top of the coded frame. For 16:9 coded frame, pillarbox 14:9 image, | 
| 114 |  *      horizontally centered in the coded frame. | 
| 115 |  * @GST_VIDEO_AFD_GREATER_THAN_16_9: For 4:3 coded frame, letterbox image with an aspect ratio | 
| 116 |  *      greater than 16:9, vertically centered in the coded frame. For 16:9 coded frame, | 
| 117 |  *      letterbox image with an aspect ratio greater than 16:9. | 
| 118 |  * @GST_VIDEO_AFD_4_3_FULL_16_9_FULL: For 4:3 coded frame, full frame 4:3 image, | 
| 119 |  *      the same as the coded frame. For 16:9 coded frame, full frame 16:9 image, the same as | 
| 120 |  *      the coded frame. | 
| 121 |  * @GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR: For 4:3 coded frame, full frame 4:3 image, the same as | 
| 122 |  *      the coded frame. For 16:9 coded frame, pillarbox 4:3 image, horizontally centered in the | 
| 123 |  *      coded frame. | 
| 124 |  * @GST_VIDEO_AFD_16_9_LETTER_16_9_FULL: For 4:3 coded frame, letterbox 16:9 image, vertically centered in | 
| 125 |  *      the coded frame with all image areas protected. For 16:9 coded frame, full frame 16:9 image, | 
| 126 |  *      with all image areas protected. | 
| 127 |  * @GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR: For 4:3 coded frame, letterbox 14:9 image, vertically centered in | 
| 128 |  *      the coded frame. For 16:9 coded frame, pillarbox 14:9 image, horizontally centered in the | 
| 129 |  *      coded frame. | 
| 130 |  * @GST_VIDEO_AFD_4_3_FULL_14_9_CENTER: For 4:3 coded frame, full frame 4:3 image, with alternative 14:9 | 
| 131 |  *      center. For 16:9 coded frame, pillarbox 4:3 image, with alternative 14:9 center. | 
| 132 |  * @GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER: For 4:3 coded frame, letterbox 16:9 image, with alternative 14:9 | 
| 133 |  *      center. For 16:9 coded frame, full frame 16:9 image, with alternative 14:9 center. | 
| 134 |  * @GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER: For 4:3 coded frame, letterbox 16:9 image, with alternative 4:3 | 
| 135 |  *      center. For 16:9 coded frame, full frame 16:9 image, with alternative 4:3 center. | 
| 136 |  * | 
| 137 |  * Enumeration of the various values for Active Format Description (AFD) | 
| 138 |  * | 
| 139 |  * AFD should be included in video user data whenever the rectangular | 
| 140 |  * picture area containing useful information does not extend to the full height or width of the coded | 
| 141 |  * frame. AFD data may also be included in user data when the rectangular picture area containing | 
| 142 |  * useful information extends to the full height and width of the coded frame. | 
| 143 |  * | 
| 144 |  * For details, see Table 6.14 Active Format in: | 
| 145 |  * | 
| 146 |  * ATSC Digital Television Standard: | 
| 147 |  * Part 4 – MPEG-2 Video System Characteristics | 
| 148 |  * | 
| 149 |  * https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf | 
| 150 |  * | 
| 151 |  * and Active Format Description in Complete list of AFD codes | 
| 152 |  * | 
| 153 |  * https://en.wikipedia.org/wiki/Active_Format_Description#Complete_list_of_AFD_codes | 
| 154 |  * | 
| 155 |  * and SMPTE ST2016-1 | 
| 156 |  * | 
| 157 |  * Notes: | 
| 158 |  * | 
| 159 |  * 1) AFD 0 is undefined for ATSC and SMPTE ST2016-1, indicating that AFD data is not available: | 
| 160 |  * If Bar Data is not present, AFD '0000' indicates that exact information | 
| 161 |  * is not available and the active image should be assumed to be the same as the coded frame. AFD '0000'. | 
| 162 |  * AFD '0000' accompanied by Bar Data signals that the active image’s aspect ratio is narrower than 16:9, | 
| 163 |  * but is not 4:3 or 14:9. As the exact aspect ratio cannot be conveyed by AFD alone, wherever possible, | 
| 164 |  * AFD ‘0000’ should be accompanied by Bar Data to define the exact vertical or horizontal extent | 
| 165 |  * of the active image. | 
| 166 |  * 2) AFD 0 is reserved for DVB/ETSI | 
| 167 |  * 3) values 1, 5, 6, 7, and 12 are reserved for both ATSC and DVB/ETSI | 
| 168 |  * 4) values 2 and 3 are not recommended for ATSC, but are valid for DVB/ETSI | 
| 169 |  * | 
| 170 |  * Since: 1.18 | 
| 171 |  */ | 
| 172 | typedef enum { | 
| 173 |   GST_VIDEO_AFD_UNAVAILABLE = 0, | 
| 174 |   GST_VIDEO_AFD_16_9_TOP_ALIGNED = 2, | 
| 175 |   GST_VIDEO_AFD_14_9_TOP_ALIGNED = 3, | 
| 176 |   GST_VIDEO_AFD_GREATER_THAN_16_9 = 4, | 
| 177 |   GST_VIDEO_AFD_4_3_FULL_16_9_FULL = 8, | 
| 178 |   GST_VIDEO_AFD_4_3_FULL_4_3_PILLAR = 9, | 
| 179 |   GST_VIDEO_AFD_16_9_LETTER_16_9_FULL = 10, | 
| 180 |   GST_VIDEO_AFD_14_9_LETTER_14_9_PILLAR = 11, | 
| 181 |   GST_VIDEO_AFD_4_3_FULL_14_9_CENTER = 13, | 
| 182 |   GST_VIDEO_AFD_16_9_LETTER_14_9_CENTER = 14, | 
| 183 |   GST_VIDEO_AFD_16_9_LETTER_4_3_CENTER = 15 | 
| 184 | } GstVideoAFDValue; | 
| 185 |  | 
| 186 | /** | 
| 187 |  * GstVideoAFDSpec: | 
| 188 |  * @GST_VIDEO_AFD_SPEC_DVB_ETSI: AFD value is from DVB/ETSI standard | 
| 189 |  * @GST_VIDEO_AFD_SPEC_ATSC_A53: AFD value is from ATSC A/53 standard | 
| 190 |  * @GST_VIDEO_AFD_SPEC_SMPT_ST2016_1 : AFD value is from SMPTE ST2016-1 standard | 
| 191 |  * | 
| 192 |  * Enumeration of the different standards that may apply to AFD data: | 
| 193 |  * | 
| 194 |  * 0) ETSI/DVB: | 
| 195 |  * https://www.etsi.org/deliver/etsi_ts/101100_101199/101154/02.01.01_60/ts_101154v020101p.pdf | 
| 196 |  * | 
| 197 |  * 1) ATSC A/53: | 
| 198 |  * https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf | 
| 199 |  * | 
| 200 |  * 2) SMPTE ST2016-1: | 
| 201 |  * | 
| 202 |  * Since: 1.18 | 
| 203 |  */ | 
| 204 | typedef enum { | 
| 205 |   GST_VIDEO_AFD_SPEC_DVB_ETSI, | 
| 206 |   GST_VIDEO_AFD_SPEC_ATSC_A53, | 
| 207 |   GST_VIDEO_AFD_SPEC_SMPTE_ST2016_1 | 
| 208 | } GstVideoAFDSpec; | 
| 209 |  | 
| 210 | /** | 
| 211 |  * GstVideoAFDMeta: | 
| 212 |  * @meta: parent #GstMeta | 
| 213 |  * @field: 0 for progressive or field 1 and 1 for field 2 | 
| 214 |  * @spec: #GstVideoAFDSpec that applies to @afd | 
| 215 |  * @afd: #GstVideoAFDValue AFD value | 
| 216 |  * | 
| 217 |  * Active Format Description (AFD) | 
| 218 |  * | 
| 219 |  * For details, see Table 6.14 Active Format in: | 
| 220 |  * | 
| 221 |  * ATSC Digital Television Standard: | 
| 222 |  * Part 4 – MPEG-2 Video System Characteristics | 
| 223 |  * | 
| 224 |  * https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf | 
| 225 |  * | 
| 226 |  * and Active Format Description in Complete list of AFD codes | 
| 227 |  * | 
| 228 |  * https://en.wikipedia.org/wiki/Active_Format_Description#Complete_list_of_AFD_codes | 
| 229 |  * | 
| 230 |  * and SMPTE ST2016-1 | 
| 231 |  * | 
| 232 |  * Since: 1.18 | 
| 233 |  */ | 
| 234 | typedef struct { | 
| 235 |   GstMeta meta; | 
| 236 |  | 
| 237 |   guint8 field; | 
| 238 |   GstVideoAFDSpec spec; | 
| 239 |   GstVideoAFDValue afd; | 
| 240 | } GstVideoAFDMeta; | 
| 241 |  | 
| 242 | GST_VIDEO_API GType gst_video_afd_meta_api_get_type (void); | 
| 243 | #define GST_VIDEO_AFD_META_API_TYPE (gst_video_afd_meta_api_get_type()) | 
| 244 |  | 
| 245 | GST_VIDEO_API const GstMetaInfo *gst_video_afd_meta_get_info (void); | 
| 246 | #define GST_VIDEO_AFD_META_INFO (gst_video_afd_meta_get_info()) | 
| 247 |  | 
| 248 | /** | 
| 249 |  * gst_buffer_get_video_afd_meta: | 
| 250 |  * @b: A #GstBuffer | 
| 251 |  * | 
| 252 |  * Gets the #GstVideoAFDMeta that might be present on @b. | 
| 253 |  * | 
| 254 |  * Note: there may be two #GstVideoAFDMeta structs for interlaced video. | 
| 255 |  * | 
| 256 |  * Since: 1.18 | 
| 257 |  * | 
| 258 |  * Returns: The first #GstVideoAFDMeta present on @b, or %NULL if | 
| 259 |  * no #GstVideoAFDMeta are present | 
| 260 |  */ | 
| 261 | #define gst_buffer_get_video_afd_meta(b) \ | 
| 262 |         ((GstVideoAFDMeta*)gst_buffer_get_meta((b),GST_VIDEO_AFD_META_API_TYPE)) | 
| 263 |  | 
| 264 | GST_VIDEO_API | 
| 265 | GstVideoAFDMeta *gst_buffer_add_video_afd_meta (GstBuffer * buffer, guint8 field, | 
| 266 | 						GstVideoAFDSpec spec, | 
| 267 | 						GstVideoAFDValue afd); | 
| 268 | /** | 
| 269 |  * GstVideoBarMeta: | 
| 270 |  * @meta: parent #GstMeta | 
| 271 |  * @field: 0 for progressive or field 1 and 1 for field 2 | 
| 272 |  * @is_letterbox: if true then bar data specifies letterbox, otherwise pillarbox | 
| 273 |  * @bar_data1: If @is_letterbox is true, then the value specifies the | 
| 274 |  *      last line of a horizontal letterbox bar area at top of reconstructed frame. | 
| 275 |  *      Otherwise, it specifies the last horizontal luminance sample of a vertical pillarbox | 
| 276 |  *      bar area at the left side of the reconstructed frame | 
| 277 |  * @bar_data2: If @is_letterbox is true, then the value specifies the | 
| 278 |  *      first line of a horizontal letterbox bar area at bottom of reconstructed frame. | 
| 279 |  *      Otherwise, it specifies the first horizontal | 
| 280 |  *      luminance sample of a vertical pillarbox bar area at the right side of the reconstructed frame. | 
| 281 |  * | 
| 282 |  * Bar data should be included in video user data | 
| 283 |  * whenever the rectangular picture area containing useful information | 
| 284 |  * does not extend to the full height or width of the coded frame | 
| 285 |  * and AFD alone is insufficient to describe the extent of the image. | 
| 286 |  * | 
| 287 |  * Note: either vertical or horizontal bars are specified, but not both. | 
| 288 |  * | 
| 289 |  * For more details, see: | 
| 290 |  * | 
| 291 |  * https://www.atsc.org/wp-content/uploads/2015/03/a_53-Part-4-2009.pdf | 
| 292 |  * | 
| 293 |  * and SMPTE ST2016-1 | 
| 294 |  * | 
| 295 |  * Since: 1.18 | 
| 296 |  */ | 
| 297 | typedef struct { | 
| 298 |   GstMeta meta; | 
| 299 |  | 
| 300 |   guint8 field; | 
| 301 |   gboolean is_letterbox; | 
| 302 |   guint bar_data1; | 
| 303 |   guint bar_data2; | 
| 304 | } GstVideoBarMeta; | 
| 305 |  | 
| 306 | GST_VIDEO_API GType gst_video_bar_meta_api_get_type (void); | 
| 307 | #define GST_VIDEO_BAR_META_API_TYPE (gst_video_bar_meta_api_get_type()) | 
| 308 |  | 
| 309 | GST_VIDEO_API const GstMetaInfo *gst_video_bar_meta_get_info (void); | 
| 310 | #define GST_VIDEO_BAR_META_INFO (gst_video_bar_meta_get_info()) | 
| 311 | /** | 
| 312 |  * gst_buffer_get_video_bar_meta: | 
| 313 |  * @b: A #GstBuffer | 
| 314 |  * | 
| 315 |  * Gets the #GstVideoBarMeta that might be present on @b. | 
| 316 |  * | 
| 317 |  * Since: 1.18 | 
| 318 |  * | 
| 319 |  * Returns: The first #GstVideoBarMeta present on @b, or %NULL if | 
| 320 |  * no #GstVideoBarMeta are present | 
| 321 |  */ | 
| 322 | #define gst_buffer_get_video_bar_meta(b) \ | 
| 323 |         ((GstVideoBarMeta*)gst_buffer_get_meta((b),GST_VIDEO_BAR_META_API_TYPE)) | 
| 324 |  | 
| 325 | GST_VIDEO_API | 
| 326 | GstVideoBarMeta *gst_buffer_add_video_bar_meta (GstBuffer * buffer, guint8 field, | 
| 327 |     gboolean is_letterbox, guint bar_data1, guint bar_data2); | 
| 328 |  | 
| 329 | /* Closed Caption support */ | 
| 330 | /** | 
| 331 |  * GstVideoCaptionType: | 
| 332 |  * @GST_VIDEO_CAPTION_TYPE_UNKNOWN: Unknown type of CC | 
| 333 |  * @GST_VIDEO_CAPTION_TYPE_CEA608_RAW: CEA-608 as byte pairs. Note that | 
| 334 |  *      this format is not recommended since is does not specify to | 
| 335 |  *      which field the caption comes from and therefore assumes | 
| 336 |  *      it comes from the first field (and that there is no information | 
| 337 |  *      on the second field). Use @GST_VIDEO_CAPTION_TYPE_CEA708_RAW | 
| 338 |  *      if you wish to store CEA-608 from two fields and prefix each byte pair | 
| 339 |  *      with 0xFC for the first field and 0xFD for the second field. | 
| 340 |  * @GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A: CEA-608 as byte triplets as defined | 
| 341 |  *      in SMPTE S334-1 Annex A. The second and third byte of the byte triplet | 
| 342 |  *      is the raw CEA608 data, the first byte is a bitfield: The top/7th bit is | 
| 343 |  *      0 for the second field, 1 for the first field, bit 6 and 5 are 0 and | 
| 344 |  *      bits 4 to 0 are a 5 bit unsigned integer that represents the line | 
| 345 |  *      offset relative to the base-line of the original image format (line 9 | 
| 346 |  *      for 525-line field 1, line 272 for 525-line field 2, line 5 for | 
| 347 |  *      625-line field 1 and line 318 for 625-line field 2). | 
| 348 |  * @GST_VIDEO_CAPTION_TYPE_CEA708_RAW: CEA-708 as cc_data byte triplets. They | 
| 349 |  *      can also contain 608-in-708 and the first byte of each triplet has to | 
| 350 |  *      be inspected for detecting the type. | 
| 351 |  * @GST_VIDEO_CAPTION_TYPE_CEA708_CDP: CEA-708 (and optionally CEA-608) in | 
| 352 |  *      a CDP (Caption Distribution Packet) defined by SMPTE S-334-2. | 
| 353 |  *      Contains the whole CDP (starting with 0x9669). | 
| 354 |  * | 
| 355 |  * The various known types of Closed Caption (CC). | 
| 356 |  * | 
| 357 |  * Since: 1.16 | 
| 358 |  */ | 
| 359 | typedef enum { | 
| 360 |   GST_VIDEO_CAPTION_TYPE_UNKNOWN                = 0, | 
| 361 |   GST_VIDEO_CAPTION_TYPE_CEA608_RAW		= 1, | 
| 362 |   GST_VIDEO_CAPTION_TYPE_CEA608_S334_1A		= 2, | 
| 363 |   GST_VIDEO_CAPTION_TYPE_CEA708_RAW		= 3, | 
| 364 |   GST_VIDEO_CAPTION_TYPE_CEA708_CDP		= 4 | 
| 365 | } GstVideoCaptionType; | 
| 366 |  | 
| 367 | GST_VIDEO_API | 
| 368 | GstVideoCaptionType | 
| 369 | gst_video_caption_type_from_caps (const GstCaps *caps); | 
| 370 |  | 
| 371 | GST_VIDEO_API | 
| 372 | GstCaps * | 
| 373 | gst_video_caption_type_to_caps (GstVideoCaptionType type); | 
| 374 |  | 
| 375 | /** | 
| 376 |  * GstVideoCaptionMeta: | 
| 377 |  * @meta: parent #GstMeta | 
| 378 |  * @caption_type: The type of Closed Caption contained in the meta. | 
| 379 |  * @data: (array length=size): The Closed Caption data. | 
| 380 |  * @size: The size in bytes of @data | 
| 381 |  * | 
| 382 |  * Extra buffer metadata providing Closed Caption. | 
| 383 |  * | 
| 384 |  * Since: 1.16 | 
| 385 |  */ | 
| 386 | typedef struct { | 
| 387 |   GstMeta meta; | 
| 388 |  | 
| 389 |   GstVideoCaptionType caption_type; | 
| 390 |   guint8 *data; | 
| 391 |   gsize size; | 
| 392 | } GstVideoCaptionMeta; | 
| 393 |  | 
| 394 | GST_VIDEO_API | 
| 395 | GType	gst_video_caption_meta_api_get_type (void); | 
| 396 | #define GST_VIDEO_CAPTION_META_API_TYPE (gst_video_caption_meta_api_get_type()) | 
| 397 |  | 
| 398 | GST_VIDEO_API | 
| 399 | const GstMetaInfo *gst_video_caption_meta_get_info (void); | 
| 400 | #define GST_VIDEO_CAPTION_META_INFO (gst_video_caption_meta_get_info()) | 
| 401 |  | 
| 402 | /** | 
| 403 |  * gst_buffer_get_video_caption_meta: | 
| 404 |  * @b: A #GstBuffer | 
| 405 |  * | 
| 406 |  * Gets the #GstVideoCaptionMeta that might be present on @b. | 
| 407 |  * | 
| 408 |  * Since: 1.16 | 
| 409 |  * | 
| 410 |  * Returns: The first #GstVideoCaptionMeta present on @b, or %NULL if | 
| 411 |  * no #GstVideoCaptionMeta are present | 
| 412 |  */ | 
| 413 | #define gst_buffer_get_video_caption_meta(b) \ | 
| 414 |         ((GstVideoCaptionMeta*)gst_buffer_get_meta((b),GST_VIDEO_CAPTION_META_API_TYPE)) | 
| 415 |  | 
| 416 | GST_VIDEO_API | 
| 417 | GstVideoCaptionMeta *gst_buffer_add_video_caption_meta    (GstBuffer   * buffer, | 
| 418 | 							   GstVideoCaptionType caption_type, | 
| 419 | 							   const guint8 *data, | 
| 420 | 							   gsize size); | 
| 421 |  | 
| 422 | /** | 
| 423 |  * GstVideoVBIParser: | 
| 424 |  * | 
| 425 |  * A parser for detecting and extracting @GstVideoAncillary data from | 
| 426 |  * Vertical Blanking Interval lines of component signals. | 
| 427 |  * | 
| 428 |  * Since: 1.16 | 
| 429 |  */ | 
| 430 |  | 
| 431 | typedef struct _GstVideoVBIParser GstVideoVBIParser; | 
| 432 |  | 
| 433 | GST_VIDEO_API | 
| 434 | GType gst_video_vbi_parser_get_type (void); | 
| 435 |  | 
| 436 | /** | 
| 437 |  * GstVideoVBIParserResult: | 
| 438 |  * @GST_VIDEO_VBI_PARSER_RESULT_DONE: No line were provided, or no more Ancillary data was found. | 
| 439 |  * @GST_VIDEO_VBI_PARSER_RESULT_OK: A #GstVideoAncillary was found. | 
| 440 |  * @GST_VIDEO_VBI_PARSER_RESULT_ERROR: An error occurred | 
| 441 |  * | 
| 442 |  * Return values for #GstVideoVBIParser | 
| 443 |  * | 
| 444 |  * Since: 1.16 | 
| 445 |  */ | 
| 446 | typedef enum { | 
| 447 |   GST_VIDEO_VBI_PARSER_RESULT_DONE  = 0, | 
| 448 |   GST_VIDEO_VBI_PARSER_RESULT_OK    = 1, | 
| 449 |   GST_VIDEO_VBI_PARSER_RESULT_ERROR = 2 | 
| 450 | } GstVideoVBIParserResult; | 
| 451 |  | 
| 452 | GST_VIDEO_API | 
| 453 | GstVideoVBIParserResult gst_video_vbi_parser_get_ancillary(GstVideoVBIParser *parser, | 
| 454 | 							   GstVideoAncillary *anc); | 
| 455 |  | 
| 456 | GST_VIDEO_API | 
| 457 | GstVideoVBIParser *gst_video_vbi_parser_new (GstVideoFormat format, guint32 pixel_width); | 
| 458 |  | 
| 459 | GST_VIDEO_API | 
| 460 | GstVideoVBIParser *gst_video_vbi_parser_copy (const GstVideoVBIParser *parser); | 
| 461 |  | 
| 462 | GST_VIDEO_API | 
| 463 | void               gst_video_vbi_parser_free (GstVideoVBIParser *parser); | 
| 464 |  | 
| 465 | GST_VIDEO_API | 
| 466 | void		   gst_video_vbi_parser_add_line (GstVideoVBIParser *parser, const guint8 *data); | 
| 467 |  | 
| 468 | /** | 
| 469 |  * GstVideoVBIEncoder: | 
| 470 |  * | 
| 471 |  * An encoder for writing ancillary data to the | 
| 472 |  * Vertical Blanking Interval lines of component signals. | 
| 473 |  * | 
| 474 |  * Since: 1.16 | 
| 475 |  */ | 
| 476 |  | 
| 477 | typedef struct _GstVideoVBIEncoder GstVideoVBIEncoder; | 
| 478 |  | 
| 479 | GST_VIDEO_API | 
| 480 | GType gst_video_vbi_encoder_get_type (void); | 
| 481 |  | 
| 482 | GST_VIDEO_API | 
| 483 | GstVideoVBIEncoder *gst_video_vbi_encoder_new  (GstVideoFormat format, guint32 pixel_width); | 
| 484 |  | 
| 485 | GST_VIDEO_API | 
| 486 | GstVideoVBIEncoder *gst_video_vbi_encoder_copy (const GstVideoVBIEncoder *encoder); | 
| 487 |  | 
| 488 | GST_VIDEO_API | 
| 489 | void               gst_video_vbi_encoder_free  (GstVideoVBIEncoder *encoder); | 
| 490 |  | 
| 491 | GST_VIDEO_API | 
| 492 | gboolean gst_video_vbi_encoder_add_ancillary   (GstVideoVBIEncoder *encoder, | 
| 493 |                                                 gboolean            composite, | 
| 494 |                                                 guint8              DID, | 
| 495 |                                                 guint8              SDID_block_number, | 
| 496 |                                                 const guint8       *data, | 
| 497 |                                                 guint               data_count); | 
| 498 |  | 
| 499 | GST_VIDEO_API | 
| 500 | void gst_video_vbi_encoder_write_line (GstVideoVBIEncoder *encoder, guint8 *data); | 
| 501 |  | 
| 502 | G_END_DECLS | 
| 503 |  | 
| 504 | #endif /* __GST_VIDEO_ANC_H__ */ | 
| 505 |  |