mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 11:32:38 +00:00
Add NV12 and NV21 formats
This commit is contained in:
parent
92928134ca
commit
1cf651f883
2 changed files with 50 additions and 1 deletions
|
@ -586,6 +586,10 @@ gst_video_format_from_fourcc (guint32 fourcc)
|
|||
return GST_VIDEO_FORMAT_v210;
|
||||
case GST_MAKE_FOURCC ('v', '2', '1', '6'):
|
||||
return GST_VIDEO_FORMAT_v216;
|
||||
case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
|
||||
return GST_VIDEO_FORMAT_NV12;
|
||||
case GST_MAKE_FOURCC ('N', 'V', '2', '1'):
|
||||
return GST_VIDEO_FORMAT_NV21;
|
||||
default:
|
||||
return GST_VIDEO_FORMAT_UNKNOWN;
|
||||
}
|
||||
|
@ -631,6 +635,10 @@ gst_video_format_to_fourcc (GstVideoFormat format)
|
|||
return GST_MAKE_FOURCC ('v', '2', '1', '0');
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
return GST_MAKE_FOURCC ('v', '2', '1', '6');
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
return GST_MAKE_FOURCC ('N', 'V', '1', '2');
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return GST_MAKE_FOURCC ('N', 'V', '2', '1');
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -734,6 +742,8 @@ gst_video_format_is_rgb (GstVideoFormat format)
|
|||
case GST_VIDEO_FORMAT_Y444:
|
||||
case GST_VIDEO_FORMAT_v210:
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return FALSE;
|
||||
case GST_VIDEO_FORMAT_RGBx:
|
||||
case GST_VIDEO_FORMAT_BGRx:
|
||||
|
@ -776,6 +786,8 @@ gst_video_format_is_yuv (GstVideoFormat format)
|
|||
case GST_VIDEO_FORMAT_Y444:
|
||||
case GST_VIDEO_FORMAT_v210:
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return TRUE;
|
||||
case GST_VIDEO_FORMAT_RGBx:
|
||||
case GST_VIDEO_FORMAT_BGRx:
|
||||
|
@ -818,6 +830,8 @@ gst_video_format_has_alpha (GstVideoFormat format)
|
|||
case GST_VIDEO_FORMAT_Y444:
|
||||
case GST_VIDEO_FORMAT_v210:
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return FALSE;
|
||||
case GST_VIDEO_FORMAT_AYUV:
|
||||
case GST_VIDEO_FORMAT_RGBA:
|
||||
|
@ -906,6 +920,9 @@ gst_video_format_get_row_stride (GstVideoFormat format, int component,
|
|||
return ((width + 47) / 48) * 128;
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
return GST_ROUND_UP_8 (width * 4);
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return GST_ROUND_UP_4 (width);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -968,6 +985,13 @@ gst_video_format_get_pixel_stride (GstVideoFormat format, int component)
|
|||
} else {
|
||||
return 8;
|
||||
}
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
if (component == 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -1027,6 +1051,8 @@ gst_video_format_get_component_width (GstVideoFormat format, int component,
|
|||
case GST_VIDEO_FORMAT_RGB:
|
||||
case GST_VIDEO_FORMAT_BGR:
|
||||
case GST_VIDEO_FORMAT_Y444:
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return width;
|
||||
default:
|
||||
return 0;
|
||||
|
@ -1058,6 +1084,8 @@ gst_video_format_get_component_height (GstVideoFormat format, int component,
|
|||
switch (format) {
|
||||
case GST_VIDEO_FORMAT_I420:
|
||||
case GST_VIDEO_FORMAT_YV12:
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
if (component == 0) {
|
||||
return height;
|
||||
} else {
|
||||
|
@ -1261,6 +1289,20 @@ gst_video_format_get_component_offset (GstVideoFormat format, int component,
|
|||
if (component == 2)
|
||||
return 6;
|
||||
return 0;
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
if (component == 0)
|
||||
return 0;
|
||||
if (component == 1)
|
||||
return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||
if (component == 2)
|
||||
return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height) + 1;
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
if (component == 0)
|
||||
return 0;
|
||||
if (component == 1)
|
||||
return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height) + 1;
|
||||
if (component == 2)
|
||||
return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -1323,6 +1365,9 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
|
|||
return ((width + 47) / 48) * 128 * height;
|
||||
case GST_VIDEO_FORMAT_v216:
|
||||
return GST_ROUND_UP_8 (width * 4) * height;
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height) * 3 / 2;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -51,6 +51,8 @@ G_BEGIN_DECLS
|
|||
* @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)
|
||||
* @GST_VIDEO_FORMAT_NV12: planar 4:2:0 YUV with interleaved UV plane (Since: 0.10.25)
|
||||
* @GST_VIDEO_FORMAT_NV21: planar 4:2:0 YUV with interleaved VU plane (Since: 0.10.25)
|
||||
*
|
||||
* Enum value describing the most common video formats.
|
||||
*/
|
||||
|
@ -76,7 +78,9 @@ typedef enum {
|
|||
GST_VIDEO_FORMAT_YVYU,
|
||||
GST_VIDEO_FORMAT_Y444,
|
||||
GST_VIDEO_FORMAT_v210,
|
||||
GST_VIDEO_FORMAT_v216
|
||||
GST_VIDEO_FORMAT_v216,
|
||||
GST_VIDEO_FORMAT_NV12,
|
||||
GST_VIDEO_FORMAT_NV21
|
||||
} GstVideoFormat;
|
||||
|
||||
#define GST_VIDEO_BYTE1_MASK_32 "0xFF000000"
|
||||
|
|
Loading…
Reference in a new issue