image: fix GstVaapiImage map and unmap.

Fix gst_vaapi_image_map() to return TRUE and the GstVaapiImageRaw
structure correctly filled in if the image was already mapped.
Likewise, make gst_vaapi_image_unmap() return TRUE if the image
was already unmapped.
This commit is contained in:
Gwenole Beauchesne 2012-11-20 14:36:29 +01:00
parent 5fac9d4b55
commit c38c0853eb

View file

@ -753,12 +753,11 @@ _gst_vaapi_image_map(GstVaapiImage *image, GstVaapiImageRaw *raw_image)
{ {
GstVaapiImagePrivate * const priv = image->priv; GstVaapiImagePrivate * const priv = image->priv;
GstVaapiDisplay *display; GstVaapiDisplay *display;
void *image_data;
VAStatus status; VAStatus status;
guint i; guint i;
if (_gst_vaapi_image_is_mapped(image)) if (_gst_vaapi_image_is_mapped(image))
return TRUE; goto map_success;
display = GST_VAAPI_OBJECT_DISPLAY(image); display = GST_VAAPI_OBJECT_DISPLAY(image);
if (!display) if (!display)
@ -767,15 +766,14 @@ _gst_vaapi_image_map(GstVaapiImage *image, GstVaapiImageRaw *raw_image)
GST_VAAPI_DISPLAY_LOCK(display); GST_VAAPI_DISPLAY_LOCK(display);
status = vaMapBuffer( status = vaMapBuffer(
GST_VAAPI_DISPLAY_VADISPLAY(display), GST_VAAPI_DISPLAY_VADISPLAY(display),
image->priv->image.buf, priv->image.buf,
&image_data (void **)&priv->image_data
); );
GST_VAAPI_DISPLAY_UNLOCK(display); GST_VAAPI_DISPLAY_UNLOCK(display);
if (!vaapi_check_status(status, "vaMapBuffer()")) if (!vaapi_check_status(status, "vaMapBuffer()"))
return FALSE; return FALSE;
image->priv->image_data = image_data; map_success:
if (raw_image) { if (raw_image) {
const VAImage * const va_image = &priv->image; const VAImage * const va_image = &priv->image;
raw_image->format = priv->format; raw_image->format = priv->format;
@ -783,7 +781,8 @@ _gst_vaapi_image_map(GstVaapiImage *image, GstVaapiImageRaw *raw_image)
raw_image->height = va_image->height; raw_image->height = va_image->height;
raw_image->num_planes = va_image->num_planes; raw_image->num_planes = va_image->num_planes;
for (i = 0; i < raw_image->num_planes; i++) { for (i = 0; i < raw_image->num_planes; i++) {
raw_image->pixels[i] = (guchar *)image_data + va_image->offsets[i]; raw_image->pixels[i] = (guchar *)priv->image_data +
va_image->offsets[i];
raw_image->stride[i] = va_image->pitches[i]; raw_image->stride[i] = va_image->pitches[i];
} }
} }
@ -815,7 +814,7 @@ _gst_vaapi_image_unmap(GstVaapiImage *image)
VAStatus status; VAStatus status;
if (!_gst_vaapi_image_is_mapped(image)) if (!_gst_vaapi_image_is_mapped(image))
return FALSE; return TRUE;
display = GST_VAAPI_OBJECT_DISPLAY(image); display = GST_VAAPI_OBJECT_DISPLAY(image);
if (!display) if (!display)