tests: image: try to upload images through vaDeriveImage() too.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Fri, 26 Jul 2013 11:12:28 +0000 (13:12 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Fri, 26 Jul 2013 11:16:57 +0000 (13:16 +0200)
On some platforms, vaPutImage() would fail even if it does not involve
color format conversion or scaling, whereas copying raw pixels through
vaDeriveImage() could work instead.

tests/image.c

index f5ee9a9..3abcaf8 100644 (file)
@@ -363,7 +363,9 @@ image_upload(GstVaapiImage *image, GstVaapiSurface *surface)
 {
     GstVaapiDisplay    *display;
     GstVideoFormat      format;
+    GstVaapiImage      *surface_image;
     GstVaapiSubpicture *subpicture;
+    gboolean            success;
 
     display = gst_vaapi_object_get_display(GST_VAAPI_OBJECT(surface));
     if (!display)
@@ -376,6 +378,14 @@ image_upload(GstVaapiImage *image, GstVaapiSurface *surface)
     if (gst_vaapi_surface_put_image(surface, image))
         return TRUE;
 
+    surface_image = gst_vaapi_surface_derive_image(surface);
+    if (surface_image) {
+        success = gst_vaapi_image_copy(surface_image, image);
+        gst_vaapi_object_unref(surface_image);
+        if (success)
+            return TRUE;
+    }
+
     g_print("could not upload %s image to surface\n",
             gst_vaapi_video_format_to_string(format));