video.h 24.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/* GStreamer
 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
 * Library       <2002> Ronald Bultje <rbultje@ronald.bitfreak.net>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

Thomas Vander Stichele's avatar
muhaha  
Thomas Vander Stichele committed
21 22
#ifndef __GST_VIDEO_H__
#define __GST_VIDEO_H__
23 24 25

#include <gst/gst.h>

26 27
G_BEGIN_DECLS

28
#include <gst/video/video-enumtypes.h>
29

30 31
/**
 * GstVideoFormat:
32
 * @GST_VIDEO_FORMAT_UNKNOWN: Unknown or unset video format id
33 34 35 36 37
 * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV
 * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped)
 * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...)
 * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) 
 * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...)
38 39 40 41 42 43 44 45 46 47
 * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last
 * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last
 * @GST_VIDEO_FORMAT_xRGB: sparse rgb packed into 32 bit, space first
 * @GST_VIDEO_FORMAT_xBGR: sparse reverse rgb packed into 32 bit, space first
 * @GST_VIDEO_FORMAT_RGBA: rgb with alpha channel last
 * @GST_VIDEO_FORMAT_BGRA: reverse rgb with alpha channel last
 * @GST_VIDEO_FORMAT_ARGB: rgb with alpha channel first
 * @GST_VIDEO_FORMAT_ABGR: reverse rgb with alpha channel first
 * @GST_VIDEO_FORMAT_RGB: rgb
 * @GST_VIDEO_FORMAT_BGR: reverse rgb
48 49
 * @GST_VIDEO_FORMAT_Y41B: planar 4:1:1 YUV (Since: 0.10.18)
 * @GST_VIDEO_FORMAT_Y42B: planar 4:2:2 YUV (Since: 0.10.18)
50
 * @GST_VIDEO_FORMAT_YVYU: packed 4:2:2 YUV (Y0-V0-Y1-U0 Y2-V2-Y3-U2 Y4 ...) (Since: 0.10.23)
51 52 53
 * @GST_VIDEO_FORMAT_Y444: planar 4:4:4 YUV (Since: 0.10.24)
 * @GST_VIDEO_FORMAT_v210: packed 4:2:2 10-bit YUV, complex format (Since: 0.10.24)
 * @GST_VIDEO_FORMAT_v216: packed 4:2:2 16-bit YUV, Y0-U0-Y1-V1 order (Since: 0.10.24)
54 55
 * @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane (Since: 0.10.26)
 * @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane (Since: 0.10.26)
56 57 58
 * @GST_VIDEO_FORMAT_GRAY8: 8-bit grayscale (Since: 0.10.29)
 * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first (Since: 0.10.29)
 * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first (Since: 0.10.29)
59
 * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV (Since: 0.10.29)
60 61 62 63 64 65
 * @GST_VIDEO_FORMAT_Y800: same as GST_VIDEO_FORMAT_GRAY8 (Since: 0.10.30)
 * @GST_VIDEO_FORMAT_Y16: same as GST_VIDEO_FORMAT_GRAY16_LE (Since: 0.10.30)
 * @GST_VIDEO_FORMAT_RGB16: rgb 5-6-5 bits per component (Since: 0.10.30)
 * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component (Since: 0.10.30)
 * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component (Since: 0.10.30)
 * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component (Since: 0.10.30)
66
 * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) (Since: 0.10.31)
67
 * @GST_VIDEO_FORMAT_A420: planar 4:4:2:0 AYUV (Since: 0.10.31)
68
 * @GST_VIDEO_FORMAT_RGB8_PALETTED: 8-bit paletted RGB (Since: 0.10.32)
69 70 71
 * @GST_VIDEO_FORMAT_YUV9: planar 4:1:0 YUV (Since: 0.10.32)
 * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) (Since: 0.10.32)
 * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) (Since: 0.10.32)
David Schleef's avatar
David Schleef committed
72
 * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits per channel (Since: 0.10.33)
73
 * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) (Since: 0.10.33)
David Schleef's avatar
David Schleef committed
74
 * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel (Since: 0.10.33)
75 76 77
 *
 * Enum value describing the most common video formats.
 */
78 79 80 81 82 83 84 85 86 87
typedef enum {
  GST_VIDEO_FORMAT_UNKNOWN,
  GST_VIDEO_FORMAT_I420,
  GST_VIDEO_FORMAT_YV12,
  GST_VIDEO_FORMAT_YUY2,
  GST_VIDEO_FORMAT_UYVY,
  GST_VIDEO_FORMAT_AYUV,
  GST_VIDEO_FORMAT_RGBx,
  GST_VIDEO_FORMAT_BGRx,
  GST_VIDEO_FORMAT_xRGB,
88 89 90 91 92 93
  GST_VIDEO_FORMAT_xBGR,
  GST_VIDEO_FORMAT_RGBA,
  GST_VIDEO_FORMAT_BGRA,
  GST_VIDEO_FORMAT_ARGB,
  GST_VIDEO_FORMAT_ABGR,
  GST_VIDEO_FORMAT_RGB,
94 95
  GST_VIDEO_FORMAT_BGR,
  GST_VIDEO_FORMAT_Y41B,
96
  GST_VIDEO_FORMAT_Y42B,
97 98 99
  GST_VIDEO_FORMAT_YVYU,
  GST_VIDEO_FORMAT_Y444,
  GST_VIDEO_FORMAT_v210,
Benjamin Otte's avatar
Benjamin Otte committed
100 101
  GST_VIDEO_FORMAT_v216,
  GST_VIDEO_FORMAT_NV12,
102 103 104
  GST_VIDEO_FORMAT_NV21,
  GST_VIDEO_FORMAT_GRAY8,
  GST_VIDEO_FORMAT_GRAY16_BE,
105
  GST_VIDEO_FORMAT_GRAY16_LE,
106 107
  GST_VIDEO_FORMAT_v308,
  GST_VIDEO_FORMAT_Y800,
108
  GST_VIDEO_FORMAT_Y16,
109 110 111
  GST_VIDEO_FORMAT_RGB16,
  GST_VIDEO_FORMAT_BGR16,
  GST_VIDEO_FORMAT_RGB15,
David Schleef's avatar
David Schleef committed
112
  GST_VIDEO_FORMAT_BGR15,
113
  GST_VIDEO_FORMAT_UYVP,
114
  GST_VIDEO_FORMAT_A420,
115 116 117
  GST_VIDEO_FORMAT_RGB8_PALETTED,
  GST_VIDEO_FORMAT_YUV9,
  GST_VIDEO_FORMAT_YVU9,
David Schleef's avatar
David Schleef committed
118 119
  GST_VIDEO_FORMAT_IYU1,
  GST_VIDEO_FORMAT_ARGB64,
David Schleef's avatar
David Schleef committed
120 121
  GST_VIDEO_FORMAT_AYUV64,
  GST_VIDEO_FORMAT_r210
122 123
} GstVideoFormat;

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
#define GST_VIDEO_BYTE1_MASK_32  "0xFF000000"
#define GST_VIDEO_BYTE2_MASK_32  "0x00FF0000"
#define GST_VIDEO_BYTE3_MASK_32  "0x0000FF00"
#define GST_VIDEO_BYTE4_MASK_32  "0x000000FF"

#define GST_VIDEO_BYTE1_MASK_24  "0x00FF0000"
#define GST_VIDEO_BYTE2_MASK_24  "0x0000FF00"
#define GST_VIDEO_BYTE3_MASK_24  "0x000000FF"

#define GST_VIDEO_BYTE1_MASK_32_INT  0xFF000000
#define GST_VIDEO_BYTE2_MASK_32_INT  0x00FF0000
#define GST_VIDEO_BYTE3_MASK_32_INT  0x0000FF00
#define GST_VIDEO_BYTE4_MASK_32_INT  0x000000FF

#define GST_VIDEO_BYTE1_MASK_24_INT  0x00FF0000
#define GST_VIDEO_BYTE2_MASK_24_INT  0x0000FF00
#define GST_VIDEO_BYTE3_MASK_24_INT  0x000000FF

142 143 144
#define GST_VIDEO_COMP1_MASK_16 "0xf800"
#define GST_VIDEO_COMP2_MASK_16 "0x07e0"
#define GST_VIDEO_COMP3_MASK_16 "0x001f"
145

146 147 148
#define GST_VIDEO_COMP1_MASK_15 "0x7c00"
#define GST_VIDEO_COMP2_MASK_15 "0x03e0"
#define GST_VIDEO_COMP3_MASK_15 "0x001f"
149

150 151 152
#define GST_VIDEO_COMP1_MASK_16_INT 0xf800
#define GST_VIDEO_COMP2_MASK_16_INT 0x07e0
#define GST_VIDEO_COMP3_MASK_16_INT 0x001f
153

154 155 156
#define GST_VIDEO_COMP1_MASK_15_INT 0x7c00
#define GST_VIDEO_COMP2_MASK_15_INT 0x03e0
#define GST_VIDEO_COMP3_MASK_15_INT 0x001f
157

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
#ifndef GST_DISABLE_DEPRECATED
#define GST_VIDEO_RED_MASK_16 GST_VIDEO_COMP1_MASK_16
#define GST_VIDEO_GREEN_MASK_16 GST_VIDEO_COMP2_MASK_16
#define GST_VIDEO_BLUE_MASK_16 GST_VIDEO_COMP3_MASK_16

#define GST_VIDEO_RED_MASK_15 GST_VIDEO_COMP1_MASK_15
#define GST_VIDEO_GREEN_MASK_15 GST_VIDEO_COMP2_MASK_15
#define GST_VIDEO_BLUE_MASK_15 GST_VIDEO_COMP3_MASK_15

#define GST_VIDEO_RED_MASK_16_INT GST_VIDEO_COMP1_MASK_16_INT
#define GST_VIDEO_GREEN_MASK_16_INT GST_VIDEO_COMP2_MASK_16_INT
#define GST_VIDEO_BLUE_MASK_16_INT GST_VIDEO_COMP3_MASK_16_INT

#define GST_VIDEO_RED_MASK_15_INT GST_VIDEO_COMP1_MASK_15_INT
#define GST_VIDEO_GREEN_MASK_15_INT GST_VIDEO_COMP2_MASK_15_INT
#define GST_VIDEO_BLUE_MASK_15_INT GST_VIDEO_COMP3_MASK_15_INT
#endif

176
#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]"
177
#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]"
178 179

/* consider the next 2 protected */
Thomas Vander Stichele's avatar
Thomas Vander Stichele committed
180 181 182 183 184 185 186 187 188 189 190
#define __GST_VIDEO_CAPS_MAKE_32A(R, G, B, A)                           \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 32, "                                                  \
    "depth = (int) 32, "                                                \
    "endianness = (int) BIG_ENDIAN, "                                   \
    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", "            \
    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", "          \
    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", "           \
    "alpha_mask = (int) " GST_VIDEO_BYTE ## A ## _MASK_32 ", "          \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
191 192
    "framerate = " GST_VIDEO_FPS_RANGE

Thomas Vander Stichele's avatar
Thomas Vander Stichele committed
193 194 195 196 197 198 199 200 201 202
#define __GST_VIDEO_CAPS_MAKE_32(R, G, B)                               \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 32, "                                                  \
    "depth = (int) 24, "                                                \
    "endianness = (int) BIG_ENDIAN, "                                   \
    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", "            \
    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", "          \
    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", "           \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
203 204
    "framerate = " GST_VIDEO_FPS_RANGE

Thomas Vander Stichele's avatar
Thomas Vander Stichele committed
205 206 207 208 209 210 211 212 213 214
#define __GST_VIDEO_CAPS_MAKE_24(R, G, B)                               \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 24, "                                                  \
    "depth = (int) 24, "                                                \
    "endianness = (int) BIG_ENDIAN, "                                   \
    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_24 ", "            \
    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_24 ", "          \
    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_24 ", "           \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
215 216
    "framerate = " GST_VIDEO_FPS_RANGE

217 218 219 220
#define __GST_VIDEO_CAPS_MAKE_16(R, G, B)                               \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 16, "                                                  \
    "depth = (int) 16, "                                                \
221
    "endianness = (int) BYTE_ORDER, "                                   \
222 223 224 225 226 227 228 229 230 231 232
    "red_mask = (int) " GST_VIDEO_COMP ## R ## _MASK_16 ", "            \
    "green_mask = (int) " GST_VIDEO_COMP ## G ## _MASK_16 ", "          \
    "blue_mask = (int) " GST_VIDEO_COMP ## B ## _MASK_16 ", "           \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
    "framerate = " GST_VIDEO_FPS_RANGE

#define __GST_VIDEO_CAPS_MAKE_15(R, G, B)                               \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 16, "                                                  \
    "depth = (int) 15, "                                                \
233
    "endianness = (int) BYTE_ORDER, "                                   \
234 235 236 237 238 239 240
    "red_mask = (int) " GST_VIDEO_COMP ## R ## _MASK_15 ", "            \
    "green_mask = (int) " GST_VIDEO_COMP ## G ## _MASK_15 ", "          \
    "blue_mask = (int) " GST_VIDEO_COMP ## B ## _MASK_15 ", "           \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
    "framerate = " GST_VIDEO_FPS_RANGE

David Schleef's avatar
David Schleef committed
241 242 243 244 245 246 247 248 249 250 251 252 253
#define __GST_VIDEO_CAPS_MAKE_64A(R, G, B, A)                           \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 64, "                                                  \
    "depth = (int) 64, "                                                \
    "endianness = (int) BIG_ENDIAN, "                                   \
    "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", "            \
    "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", "          \
    "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", "           \
    "alpha_mask = (int) " GST_VIDEO_BYTE ## A ## _MASK_32 ", "          \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
    "framerate = " GST_VIDEO_FPS_RANGE

254 255 256 257 258 259 260 261 262 263 264 265 266

/* 24 bit */

#define GST_VIDEO_CAPS_RGB \
    __GST_VIDEO_CAPS_MAKE_24 (1, 2, 3)

#define GST_VIDEO_CAPS_BGR \
    __GST_VIDEO_CAPS_MAKE_24 (3, 2, 1)

/* 32 bit */

#define GST_VIDEO_CAPS_RGBx \
    __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3)
Johan Dahlin's avatar
Johan Dahlin committed
267
  
268 269
#define GST_VIDEO_CAPS_xRGB \
    __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4)
Johan Dahlin's avatar
Johan Dahlin committed
270
  
271 272
#define GST_VIDEO_CAPS_BGRx \
    __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1)
Johan Dahlin's avatar
Johan Dahlin committed
273
  
274 275 276
#define GST_VIDEO_CAPS_xBGR \
    __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2)

277 278 279 280 281 282 283 284 285 286 287 288 289 290
/* 32 bit alpha */

#define GST_VIDEO_CAPS_RGBA \
    __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4)
  
#define GST_VIDEO_CAPS_ARGB \
    __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1)
  
#define GST_VIDEO_CAPS_BGRA \
    __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4)
  
#define GST_VIDEO_CAPS_ABGR \
    __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1)

291 292
/* note: the macro name uses the order on BE systems */
#if G_BYTE_ORDER == G_BIG_ENDIAN
Johan Dahlin's avatar
Johan Dahlin committed
293
  #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
294
      GST_VIDEO_CAPS_xRGB
Johan Dahlin's avatar
Johan Dahlin committed
295
  #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
296 297
      GST_VIDEO_CAPS_BGRx
#else
Johan Dahlin's avatar
Johan Dahlin committed
298
  #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \
299
      GST_VIDEO_CAPS_BGRx
Johan Dahlin's avatar
Johan Dahlin committed
300
  #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \
301 302
      GST_VIDEO_CAPS_xRGB
#endif
Johan Dahlin's avatar
Johan Dahlin committed
303
      
304
/* 15/16 bit */
Johan Dahlin's avatar
Johan Dahlin committed
305
  
306 307 308 309 310 311 312 313 314 315 316
#define GST_VIDEO_CAPS_RGB_16 \
    __GST_VIDEO_CAPS_MAKE_16 (1, 2, 3)

#define GST_VIDEO_CAPS_BGR_16 \
    __GST_VIDEO_CAPS_MAKE_16 (3, 2, 1)

#define GST_VIDEO_CAPS_RGB_15 \
    __GST_VIDEO_CAPS_MAKE_15 (1, 2, 3)

#define GST_VIDEO_CAPS_BGR_15 \
    __GST_VIDEO_CAPS_MAKE_15 (3, 2, 1)
317

David Schleef's avatar
David Schleef committed
318 319 320 321 322 323 324 325 326 327 328 329 330
/* 30 bit */
#define GST_VIDEO_CAPS_r210 \
    "video/x-raw-rgb, "                                                 \
    "bpp = (int) 32, "                                                  \
    "depth = (int) 30, "                                                \
    "endianness = (int) BIG_ENDIAN, "                                   \
    "red_mask = (int) 0x3ff00000, "                                     \
    "green_mask = (int) 0x000ffc00, "                                   \
    "blue_mask = (int) 0x000003ff, "                                    \
    "width = " GST_VIDEO_SIZE_RANGE ", "                                \
    "height = " GST_VIDEO_SIZE_RANGE ", "                               \
    "framerate = " GST_VIDEO_FPS_RANGE

David Schleef's avatar
David Schleef committed
331 332 333 334 335
/* 64 bit alpha */

#define GST_VIDEO_CAPS_ARGB_64 \
    __GST_VIDEO_CAPS_MAKE_64A (2, 3, 4, 1)

336 337 338 339 340 341 342 343 344 345 346 347 348
/**
 * GST_VIDEO_CAPS_RGB8_PALETTED:
 *
 * Generic caps string for 8-bit paletted RGB video, for use in pad templates.
 *
 * Since: 0.10.32
 */
#define GST_VIDEO_CAPS_RGB8_PALETTED \
  "video/x-raw-rgb, bpp = (int)8, depth = (int)8, "                     \
      "width = "GST_VIDEO_SIZE_RANGE" , "		                \
      "height = " GST_VIDEO_SIZE_RANGE ", "                             \
      "framerate = "GST_VIDEO_FPS_RANGE

349 350 351 352 353 354 355
/**
 * GST_VIDEO_CAPS_YUV:
 * @fourcc: YUV fourcc format that describes the pixel layout, as string
 *     (e.g. "I420", "YV12", "YUY2", "AYUV", etc.)
 *
 * Generic caps string for YUV video, for use in pad templates.
 */
Thomas Vander Stichele's avatar
Thomas Vander Stichele committed
356 357 358 359 360 361
#define GST_VIDEO_CAPS_YUV(fourcc)                                      \
        "video/x-raw-yuv, "                                             \
        "format = (fourcc) " fourcc ", "                                \
        "width = " GST_VIDEO_SIZE_RANGE ", "                            \
        "height = " GST_VIDEO_SIZE_RANGE ", "                           \
        "framerate = " GST_VIDEO_FPS_RANGE
362

363 364 365 366 367 368 369
/**
 * GST_VIDEO_CAPS_GRAY8:
 *
 * Generic caps string for 8-bit grayscale video, for use in pad templates.
 *
 * Since: 0.10.29
 */
370 371 372 373 374 375 376 377
#define GST_VIDEO_CAPS_GRAY8                                            \
        "video/x-raw-gray, "                                            \
        "bpp = (int) 8, "                                               \
        "depth = (int) 8, "                                             \
        "width = " GST_VIDEO_SIZE_RANGE ", "                            \
        "height = " GST_VIDEO_SIZE_RANGE ", "                           \
        "framerate = " GST_VIDEO_FPS_RANGE

378 379 380 381 382 383 384 385 386
/**
 * GST_VIDEO_CAPS_GRAY16:
 * @endianness: endianness as string, ie. either "1234", "4321", "BIG_ENDIAN"
 *     or "LITTLE_ENDIAN"
 *
 * Generic caps string for 16-bit grayscale video, for use in pad templates.
 *
 * Since: 0.10.29
 */
387 388 389 390 391 392 393 394 395
#define GST_VIDEO_CAPS_GRAY16(endianness)                               \
        "video/x-raw-gray, "                                            \
        "bpp = (int) 16, "                                              \
        "depth = (int) 16, "                                            \
        "endianness = (int) " endianness ", "                           \
        "width = " GST_VIDEO_SIZE_RANGE ", "                            \
        "height = " GST_VIDEO_SIZE_RANGE ", "                           \
        "framerate = " GST_VIDEO_FPS_RANGE

396 397 398 399
/* buffer flags */

/**
 * GST_VIDEO_BUFFER_TFF:
400 401
 *
 * If the #GstBuffer is interlaced, then the first field in the video frame is
402
 * the top field.  If unset, the bottom field is first.
Edward Hervey's avatar
Edward Hervey committed
403 404
 *
 * Since: 0.10.23
405 406 407 408 409
 */
#define GST_VIDEO_BUFFER_TFF GST_BUFFER_FLAG_MEDIA1

/**
 * GST_VIDEO_BUFFER_RFF:
410 411 412
 *
 * If the #GstBuffer is interlaced, then the first field (as defined by the
 * %GST_VIDEO_BUFFER_TFF flag setting) is repeated.
Edward Hervey's avatar
Edward Hervey committed
413 414
 *
 * Since: 0.10.23
415 416 417 418 419
 */
#define GST_VIDEO_BUFFER_RFF GST_BUFFER_FLAG_MEDIA2

/**
 * GST_VIDEO_BUFFER_ONEFIELD:
420
 *
Sebastian Dröge's avatar
Sebastian Dröge committed
421
 * If the #GstBuffer is interlaced, then only the first field (as defined by the
422
 * %GST_VIDEO_BUFFER_TFF flag setting) is to be displayed.
Edward Hervey's avatar
Edward Hervey committed
423 424
 *
 * Since: 0.10.23
425 426 427
 */
#define GST_VIDEO_BUFFER_ONEFIELD GST_BUFFER_FLAG_MEDIA3

428 429 430 431 432 433 434 435 436 437
/**
 * GST_VIDEO_BUFFER_PROGRESSIVE:
 *
 * If the #GstBuffer is telecined, then the buffer is progressive if the
 * %GST_VIDEO_BUFFER_PROGRESSIVE flag is set, else it is telecine mixed.
 *
 * Since: 0.10.33
 */
#define GST_VIDEO_BUFFER_PROGRESSIVE GST_BUFFER_FLAG_MEDIA4

438
/* functions */
439
const GValue * gst_video_frame_rate (GstPad * pad);
440

441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495
gboolean       gst_video_get_size   (GstPad * pad,
                                     gint   * width,
                                     gint   * height);

gboolean       gst_video_calculate_display_ratio (guint * dar_n,
                                                  guint * dar_d,
                                                  guint   video_width,
                                                  guint   video_height,
                                                  guint   video_par_n,
                                                  guint   video_par_d,
                                                  guint   display_par_n,
                                                  guint   display_par_d);

gboolean       gst_video_format_parse_caps (const GstCaps  * caps,
                                            GstVideoFormat * format,
                                            int            * width,
                                            int            * height);

gboolean       gst_video_format_parse_caps_interlaced  (GstCaps  * caps,
                                                        gboolean * interlaced);


gboolean       gst_video_parse_caps_pixel_aspect_ratio (GstCaps  * caps,
                                                        int      * par_n,
                                                        int      * par_d);

gboolean       gst_video_parse_caps_framerate    (GstCaps * caps,
                                                  int     * fps_n,
                                                  int     * fps_d);

const char *   gst_video_parse_caps_color_matrix (GstCaps * caps);

const char *   gst_video_parse_caps_chroma_site  (GstCaps * caps);

GstBuffer *    gst_video_parse_caps_palette      (GstCaps * caps);

/* create caps given format and details */

GstCaps *      gst_video_format_new_caps (GstVideoFormat format,
                                          int width, int height,
                                          int framerate_n,
                                          int framerate_d,
                                          int par_n, int par_d);

GstCaps *      gst_video_format_new_caps_interlaced (GstVideoFormat format,
                                                     int width, int height,
                                                     int framerate_n,
                                                     int framerate_d,
                                                     int par_n, int par_d,
                                                     gboolean interlaced);

GstCaps *      gst_video_format_new_template_caps (GstVideoFormat format);

/* format properties */

496
GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc) G_GNUC_CONST;
497

498
guint32        gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST;
499

500
gboolean       gst_video_format_is_rgb    (GstVideoFormat format) G_GNUC_CONST;
501

502
gboolean       gst_video_format_is_yuv    (GstVideoFormat format) G_GNUC_CONST;
503

504
gboolean       gst_video_format_is_gray   (GstVideoFormat format) G_GNUC_CONST;
505

506
gboolean       gst_video_format_has_alpha (GstVideoFormat format) G_GNUC_CONST;
507 508 509


int            gst_video_format_get_component_depth  (GstVideoFormat format,
510
                                                      int            component) G_GNUC_CONST;
511 512 513

int            gst_video_format_get_row_stride       (GstVideoFormat format,
                                                      int            component,
514
                                                      int            width) G_GNUC_CONST;
515 516

int            gst_video_format_get_pixel_stride     (GstVideoFormat format,
517
                                                      int            component) G_GNUC_CONST;
518 519 520

int            gst_video_format_get_component_width  (GstVideoFormat format,
                                                      int            component,
521
                                                      int            width) G_GNUC_CONST;
522 523 524

int            gst_video_format_get_component_height (GstVideoFormat format,
                                                      int            component,
525
                                                      int            height) G_GNUC_CONST;
526 527 528 529

int            gst_video_format_get_component_offset (GstVideoFormat format,
                                                      int            component,
                                                      int            width,
530
                                                      int            height) G_GNUC_CONST;
531 532 533

int            gst_video_format_get_size             (GstVideoFormat format,
                                                      int            width,
534
                                                      int            height) G_GNUC_CONST;
535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559

gboolean       gst_video_get_size_from_caps (const GstCaps * caps, gint * size);

gboolean       gst_video_format_convert (GstVideoFormat  format,
                                         int             width,
                                         int             height,
                                         int             fps_n,
                                         int             fps_d,
                                         GstFormat       src_format,
                                         gint64          src_value,
                                         GstFormat       dest_format,
                                         gint64        * dest_value);

/* video still frame event creation and parsing */

GstEvent *     gst_video_event_new_still_frame   (gboolean in_still);

gboolean       gst_video_event_parse_still_frame (GstEvent * event, gboolean * in_still);


/* convert/encode video frame from one format to another */

typedef void (*GstVideoConvertFrameCallback) (GstBuffer * buf, GError *error, gpointer user_data);

void           gst_video_convert_frame_async (GstBuffer                    * buf,
Wim Taymans's avatar
Wim Taymans committed
560
                                              GstCaps                      * from_caps,
561 562 563 564 565 566 567
                                              const GstCaps                * to_caps,
                                              GstClockTime                   timeout,
                                              GstVideoConvertFrameCallback   callback,
                                              gpointer                       user_data,
                                              GDestroyNotify                 destroy_notify);

GstBuffer *    gst_video_convert_frame       (GstBuffer     * buf,
Wim Taymans's avatar
Wim Taymans committed
568
                                              GstCaps       * from_caps,
569 570 571
                                              const GstCaps * to_caps,
                                              GstClockTime    timeout,
                                              GError       ** error);
572 573
G_END_DECLS

Thomas Vander Stichele's avatar
muhaha  
Thomas Vander Stichele committed
574
#endif /* __GST_VIDEO_H__ */