mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
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
This commit is contained in:
parent
1bc94d4aa3
commit
80e700a566
1 changed files with 10 additions and 3 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue