Commit 80e700a5 authored by Benjamin Gaignard's avatar Benjamin Gaignard Committed by Tim-Philipp Müller

ximagesink: add support for 32-bit RGB with alpha mask

When X screen return a depth = 32 with bpp = 32, the alpha mask
must be correctly set to have a known GStreamer video format.
X visual structure doesn't provide the alpha mask information,
but we can find it from the others masks.

https://bugzilla.gnome.org/show_bug.cgi?id=700413
parent 1bc94d4a
......@@ -832,6 +832,7 @@ gst_ximagesink_xcontext_get (GstXImageSink * ximagesink)
gint nb_formats = 0, i;
gint endianness;
GstVideoFormat vformat;
guint32 alpha_mask;
g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
......@@ -904,9 +905,15 @@ gst_ximagesink_xcontext_get (GstXImageSink * ximagesink)
GST_DEBUG ("ximagesink is not using XShm extension");
}
vformat = gst_video_format_from_masks (xcontext->depth, xcontext->bpp,
endianness, xcontext->visual->red_mask, xcontext->visual->green_mask,
xcontext->visual->blue_mask, 0);
/* extrapolate alpha mask */
alpha_mask = ~(xcontext->visual->red_mask
| xcontext->visual->green_mask | xcontext->visual->blue_mask);
alpha_mask &= 0xffffffff;
vformat =
gst_video_format_from_masks (xcontext->depth, xcontext->bpp, endianness,
xcontext->visual->red_mask, xcontext->visual->green_mask,
xcontext->visual->blue_mask, alpha_mask);
if (vformat == GST_VIDEO_FORMAT_UNKNOWN)
goto unknown_format;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment