Add new format GST_VAAPI_IMAGE_YUY2 to gst_vaapi_image.
Add copy_image_YUY2 for direct retangle data copy.
GstVaapiDisplay should append YUY2 format if hardware supports.
case VA_FOURCC('I','4','2','0'):
data_size = width * height + 2 * width2 * height2;
break;
+ case VA_FOURCC('Y','U','Y','2'):
+ data_size = width * height * 2;
+ break;
case VA_FOURCC('A','Y','U','V'):
case VA_FOURCC('A','R','G','B'):
case VA_FOURCC('R','G','B','A'):
height2 = (height + 1) / 2;
size2 = 0;
switch (format) {
+ case GST_VAAPI_IMAGE_YUY2:
+ raw_image->num_planes = 1;
+ raw_image->pixels[0] = data;
+ raw_image->stride[0] = GST_ROUND_UP_4(width)*2;
+ size2 += height * raw_image->stride[0];
+ break;
case GST_VAAPI_IMAGE_NV12:
raw_image->num_planes = 2;
raw_image->pixels[0] = data;
}
}
+/* Copy YUY2 images */
+static void
+copy_image_YUY2(
+ GstVaapiImageRaw *dst_image,
+ GstVaapiImageRaw *src_image,
+ const GstVaapiRectangle *rect
+)
+{
+ guchar *dst, *src;
+ guint dst_stride, src_stride;
+ guint i, x, y, w, h;
+
+ /* YUYV interlace plane */
+ dst_stride = dst_image->stride[0];
+ dst = dst_image->pixels[0] + rect->y * dst_stride + rect->x * 2;
+ src_stride = src_image->stride[0];
+ src = src_image->pixels[0] + rect->y * src_stride + rect->x * 2;
+ memcpy_pic(dst, dst_stride, src, src_stride, rect->width * 2, rect->height);
+}
+
/* Copy RGBA images */
static void
copy_image_RGBA(
case GST_VAAPI_IMAGE_I420:
copy_image_YV12(dst_image, src_image, rect);
break;
+ case GST_VAAPI_IMAGE_YUY2:
+ copy_image_YUY2(dst_image, src_image, rect);
+ break;
case GST_VAAPI_IMAGE_ARGB:
case GST_VAAPI_IMAGE_RGBA:
case GST_VAAPI_IMAGE_ABGR:
DEF_YUV(NV12, ('N','V','1','2'), LSB, 12),
DEF_YUV(YV12, ('Y','V','1','2'), LSB, 12),
DEF_YUV(I420, ('I','4','2','0'), LSB, 12),
+ DEF_YUV(YUY2, ('Y','U','Y','2'), LSB, 16),
DEF_YUV(AYUV, ('A','Y','U','V'), LSB, 32),
#if G_BYTE_ORDER == G_BIG_ENDIAN
DEF_RGB(ARGB, ('A','R','G','B'), MSB, 32,
case GST_VIDEO_FORMAT_NV12: va_format = GST_VAAPI_IMAGE_NV12; break;
case GST_VIDEO_FORMAT_YV12: va_format = GST_VAAPI_IMAGE_YV12; break;
case GST_VIDEO_FORMAT_I420: va_format = GST_VAAPI_IMAGE_I420; break;
+ case GST_VIDEO_FORMAT_YUY2: va_format = GST_VAAPI_IMAGE_YUY2; break;
case GST_VIDEO_FORMAT_AYUV: va_format = GST_VAAPI_IMAGE_AYUV; break;
case GST_VIDEO_FORMAT_ARGB: va_format = GST_VAAPI_IMAGE_ARGB; break;
case GST_VIDEO_FORMAT_RGBA: va_format = GST_VAAPI_IMAGE_RGBA; break;
GST_VAAPI_IMAGE_NV12 = GST_MAKE_FOURCC('N','V','1','2'),
GST_VAAPI_IMAGE_YV12 = GST_MAKE_FOURCC('Y','V','1','2'),
GST_VAAPI_IMAGE_I420 = GST_MAKE_FOURCC('I','4','2','0'),
+ GST_VAAPI_IMAGE_YUY2 = GST_MAKE_FOURCC('Y','U','Y','2'),
GST_VAAPI_IMAGE_AYUV = GST_MAKE_FOURCC('A','Y','U','V'),
GST_VAAPI_IMAGE_ARGB = GST_MAKE_FOURCC('A','R','G','B'),
GST_VAAPI_IMAGE_RGBA = GST_MAKE_FOURCC('R','G','B','A'),