gst-libs/gst/video/video.*: API: add GST_VIDEO_FORMAT_Y41B and GST_VIDEO_FORMAT_Y42B.

Original commit message from CVS:
* gst-libs/gst/video/video.c: (gst_video_calculate_display_ratio),
(gst_video_format_from_fourcc), (gst_video_format_to_fourcc),
(gst_video_format_is_rgb), (gst_video_format_is_yuv),
(gst_video_format_has_alpha), (gst_video_format_get_row_stride),
(gst_video_format_get_pixel_stride),
(gst_video_format_get_component_width),
(gst_video_format_get_component_height),
(gst_video_format_get_component_offset), (gst_video_format_get_size):
* gst-libs/gst/video/video.h: (GST_VIDEO_FORMAT_Y41B),
(GST_VIDEO_FORMAT_Y42B):
API: add GST_VIDEO_FORMAT_Y41B and GST_VIDEO_FORMAT_Y42B.
This commit is contained in:
Tim-Philipp Müller 2008-03-02 18:20:44 +00:00
parent d3273657f0
commit 843366350e
3 changed files with 105 additions and 2 deletions

View file

@ -1,3 +1,17 @@
2008-03-02 Tim-Philipp Müller <tim at centricular dot net>
* gst-libs/gst/video/video.c: (gst_video_calculate_display_ratio),
(gst_video_format_from_fourcc), (gst_video_format_to_fourcc),
(gst_video_format_is_rgb), (gst_video_format_is_yuv),
(gst_video_format_has_alpha), (gst_video_format_get_row_stride),
(gst_video_format_get_pixel_stride),
(gst_video_format_get_component_width),
(gst_video_format_get_component_height),
(gst_video_format_get_component_offset), (gst_video_format_get_size):
* gst-libs/gst/video/video.h: (GST_VIDEO_FORMAT_Y41B),
(GST_VIDEO_FORMAT_Y42B):
API: add GST_VIDEO_FORMAT_Y41B and GST_VIDEO_FORMAT_Y42B.
2008-03-02 Tim-Philipp Müller <tim at centricular dot net> 2008-03-02 Tim-Philipp Müller <tim at centricular dot net>
* gst-libs/gst/video/video.c: (gst_video_format_get_component_offset): * gst-libs/gst/video/video.c: (gst_video_format_get_component_offset):

View file

@ -203,7 +203,7 @@ error_overflow:
* Determines the #GstVideoFormat of @caps and places it in the location * Determines the #GstVideoFormat of @caps and places it in the location
* pointed to by @format. Extracts the size of the video and places it * pointed to by @format. Extracts the size of the video and places it
* in the location pointed to by @width and @height. If @caps does not * in the location pointed to by @width and @height. If @caps does not
* reprsent one of the raw video formats listed in #GstVideoFormat, the * represent one of the raw video formats listed in #GstVideoFormat, the
* function will fail and return FALSE. * function will fail and return FALSE.
* *
* Since: 0.10.16 * Since: 0.10.16
@ -481,6 +481,10 @@ gst_video_format_from_fourcc (guint32 fourcc)
return GST_VIDEO_FORMAT_UYVY; return GST_VIDEO_FORMAT_UYVY;
case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'): case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'):
return GST_VIDEO_FORMAT_AYUV; return GST_VIDEO_FORMAT_AYUV;
case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
return GST_VIDEO_FORMAT_Y41B;
case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
return GST_VIDEO_FORMAT_Y42B;
default: default:
return GST_VIDEO_FORMAT_UNKNOWN; return GST_VIDEO_FORMAT_UNKNOWN;
} }
@ -512,6 +516,10 @@ gst_video_format_to_fourcc (GstVideoFormat format)
return GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'); return GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y');
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
return GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'); return GST_MAKE_FOURCC ('A', 'Y', 'U', 'V');
case GST_VIDEO_FORMAT_Y41B:
return GST_MAKE_FOURCC ('Y', '4', '1', 'B');
case GST_VIDEO_FORMAT_Y42B:
return GST_MAKE_FOURCC ('Y', '4', '2', 'B');
default: default:
return 0; return 0;
} }
@ -607,6 +615,8 @@ gst_video_format_is_rgb (GstVideoFormat format)
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
case GST_VIDEO_FORMAT_Y41B:
case GST_VIDEO_FORMAT_Y42B:
return FALSE; return FALSE;
case GST_VIDEO_FORMAT_RGBx: case GST_VIDEO_FORMAT_RGBx:
case GST_VIDEO_FORMAT_BGRx: case GST_VIDEO_FORMAT_BGRx:
@ -641,6 +651,8 @@ gst_video_format_is_yuv (GstVideoFormat format)
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
case GST_VIDEO_FORMAT_Y41B:
case GST_VIDEO_FORMAT_Y42B:
return TRUE; return TRUE;
case GST_VIDEO_FORMAT_RGBx: case GST_VIDEO_FORMAT_RGBx:
case GST_VIDEO_FORMAT_BGRx: case GST_VIDEO_FORMAT_BGRx:
@ -674,6 +686,8 @@ gst_video_format_has_alpha (GstVideoFormat format)
case GST_VIDEO_FORMAT_YV12: case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_Y41B:
case GST_VIDEO_FORMAT_Y42B:
return FALSE; return FALSE;
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
case GST_VIDEO_FORMAT_RGBA: case GST_VIDEO_FORMAT_RGBA:
@ -739,6 +753,18 @@ gst_video_format_get_row_stride (GstVideoFormat format, int component,
case GST_VIDEO_FORMAT_RGB: case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR: case GST_VIDEO_FORMAT_BGR:
return GST_ROUND_UP_4 (width * 3); return GST_ROUND_UP_4 (width * 3);
case GST_VIDEO_FORMAT_Y41B:
if (component == 0) {
return GST_ROUND_UP_4 (width);
} else {
return GST_ROUND_UP_8 (width) / 4;
}
case GST_VIDEO_FORMAT_Y42B:
if (component == 0) {
return GST_ROUND_UP_4 (width);
} else {
return GST_ROUND_UP_8 (width) / 2;
}
default: default:
return 0; return 0;
} }
@ -764,6 +790,8 @@ gst_video_format_get_pixel_stride (GstVideoFormat format, int component)
switch (format) { switch (format) {
case GST_VIDEO_FORMAT_I420: case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_YV12: case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_Y41B:
case GST_VIDEO_FORMAT_Y42B:
return 1; return 1;
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_UYVY:
@ -818,6 +846,18 @@ gst_video_format_get_component_width (GstVideoFormat format, int component,
} else { } else {
return GST_ROUND_UP_2 (width) / 2; return GST_ROUND_UP_2 (width) / 2;
} }
case GST_VIDEO_FORMAT_Y41B: /* CHECKME: component_width for Y41B */
if (component == 0) {
return width;
} else {
return GST_ROUND_UP_8 (width) / 4;
}
case GST_VIDEO_FORMAT_Y42B: /* CHECKME: component_width for Y42B */
if (component == 0) {
return width;
} else {
return GST_ROUND_UP_8 (width) / 2;
}
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
case GST_VIDEO_FORMAT_RGBx: case GST_VIDEO_FORMAT_RGBx:
case GST_VIDEO_FORMAT_BGRx: case GST_VIDEO_FORMAT_BGRx:
@ -861,6 +901,8 @@ gst_video_format_get_component_height (GstVideoFormat format, int component,
} else { } else {
return GST_ROUND_UP_2 (height) / 2; return GST_ROUND_UP_2 (height) / 2;
} }
case GST_VIDEO_FORMAT_Y41B:
case GST_VIDEO_FORMAT_Y42B:
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_AYUV:
@ -1011,6 +1053,22 @@ gst_video_format_get_component_offset (GstVideoFormat format, int component,
if (component == 2) if (component == 2)
return 0; return 0;
return 0; return 0;
case GST_VIDEO_FORMAT_Y41B:
if (component == 0)
return 0;
if (component == 1)
return GST_ROUND_UP_4 (width) * height;
if (component == 2)
return (GST_ROUND_UP_4 (width) + (GST_ROUND_UP_8 (width) / 4)) * height;
return 0;
case GST_VIDEO_FORMAT_Y42B:
if (component == 0)
return 0;
if (component == 1)
return GST_ROUND_UP_4 (width) * height;
if (component == 2)
return (GST_ROUND_UP_4 (width) + (GST_ROUND_UP_8 (width) / 2)) * height;
return 0;
default: default:
return 0; return 0;
} }
@ -1057,6 +1115,12 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
case GST_VIDEO_FORMAT_RGB: case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_BGR: case GST_VIDEO_FORMAT_BGR:
return GST_ROUND_UP_4 (width * 3) * height; return GST_ROUND_UP_4 (width * 3) * height;
case GST_VIDEO_FORMAT_Y41B:
/* simplification of ROUNDUP4(w)*h + 2*((ROUNDUP8(w)/4)*h */
return (GST_ROUND_UP_4 (width) + (GST_ROUND_UP_8 (width) / 2)) * height;
case GST_VIDEO_FORMAT_Y42B:
/* simplification of ROUNDUP4(w)*h + 2*(ROUNDUP8(w)/2)*h: */
return (GST_ROUND_UP_4 (width) + GST_ROUND_UP_8 (width)) * height;
default: default:
return 0; return 0;
} }

View file

@ -25,6 +25,29 @@
G_BEGIN_DECLS G_BEGIN_DECLS
/**
* GstVideoFormat:
* @GST_VIDEO_FORMAT_UNKNOWN,
* @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 ...)
* @GST_VIDEO_FORMAT_RGBx:
* @GST_VIDEO_FORMAT_BGRx:
* @GST_VIDEO_FORMAT_xRGB:
* @GST_VIDEO_FORMAT_xBGR:
* @GST_VIDEO_FORMAT_RGBA:
* @GST_VIDEO_FORMAT_BGRA:
* @GST_VIDEO_FORMAT_ARGB:
* @GST_VIDEO_FORMAT_ABGR:
* @GST_VIDEO_FORMAT_RGB:
* @GST_VIDEO_FORMAT_BGR:
* @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)
*
* Enum value describing the most common video formats.
*/
typedef enum { typedef enum {
GST_VIDEO_FORMAT_UNKNOWN, GST_VIDEO_FORMAT_UNKNOWN,
GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420,
@ -41,7 +64,9 @@ typedef enum {
GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_ARGB,
GST_VIDEO_FORMAT_ABGR, GST_VIDEO_FORMAT_ABGR,
GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB,
GST_VIDEO_FORMAT_BGR GST_VIDEO_FORMAT_BGR,
GST_VIDEO_FORMAT_Y41B,
GST_VIDEO_FORMAT_Y42B
} GstVideoFormat; } GstVideoFormat;
#define GST_VIDEO_BYTE1_MASK_32 "0xFF000000" #define GST_VIDEO_BYTE1_MASK_32 "0xFF000000"