download: support convert surface to UYVY format
authorWind Yuan <feng.yuan@intel.com>
Wed, 24 Apr 2013 07:46:40 +0000 (15:46 +0800)
committerWind Yuan <feng.yuan@intel.com>
Thu, 25 Apr 2013 07:09:19 +0000 (15:09 +0800)
 Correct YUY2/UYVY stride to GST_ROUND_UP_4(width * 2)
 Add new format GST_VAAPI_IMAGE_UYVY to gst_vaapi_image
 Implement UYVY copy_image same as YUY2

gst-libs/gst/vaapi/gstvaapiimage.c
gst-libs/gst/vaapi/gstvaapiimageformat.c
gst-libs/gst/vaapi/gstvaapiimageformat.h

index 9f2b94c..653691c 100644 (file)
@@ -133,6 +133,7 @@ vaapi_image_is_linear(const VAImage *va_image)
     case VA_FOURCC('I','4','2','0'):
         data_size = width * height + 2 * width2 * height2;
         break;
+    case VA_FOURCC('U','Y','V','Y'):
     case VA_FOURCC('Y','U','Y','2'):
         data_size = width * height * 2;
         break;
@@ -949,10 +950,11 @@ init_image_from_buffer(GstVaapiImageRaw *raw_image, GstBuffer *buffer)
     height2 = (height + 1) / 2;
     size2   = 0;
     switch (format) {
+    case GST_VAAPI_IMAGE_UYVY:
     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;
+        raw_image->stride[0] = GST_ROUND_UP_4(width * 2);
         size2 += height * raw_image->stride[0];
         break;
     case GST_VAAPI_IMAGE_NV12:
@@ -1154,6 +1156,7 @@ copy_image(
     case GST_VAAPI_IMAGE_I420:
         copy_image_YV12(dst_image, src_image, rect);
         break;
+    case GST_VAAPI_IMAGE_UYVY:
     case GST_VAAPI_IMAGE_YUY2:
         copy_image_YUY2(dst_image, src_image, rect);
         break;
index 94c3f77..6768bf9 100644 (file)
@@ -62,6 +62,7 @@ static const GstVaapiImageFormatMap gst_vaapi_image_formats[] = {
     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(UYVY, ('U','Y','V','Y'), 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,
@@ -254,6 +255,7 @@ gst_vaapi_image_format_from_video(GstVideoFormat format)
     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_UYVY: va_format = GST_VAAPI_IMAGE_UYVY;   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;
index 9768754..4db105b 100644 (file)
@@ -53,6 +53,7 @@ typedef enum {
     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_UYVY = GST_MAKE_FOURCC('U','Y','V','Y'),
     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'),