summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2003-11-25 04:48:04 +0000
committerBenjamin Otte <otte@gnome.org>2003-11-25 04:48:04 +0000
commit631a4456b2553c1a8e7347d39f00da9bf03e3c37 (patch)
tree5e2b0f3e7087456f5280c0ac69ccd9c68124d9f0
parentc9ba139311dbaaeaa3e36d227f4212374ab97c09 (diff)
downloadgstreamer-plugins-base-631a4456b2553c1a8e7347d39f00da9bf03e3c37.tar.gz
various fixes from mem leaks to correct caps nego
Original commit message from CVS: various fixes from mem leaks to correct caps nego
-rw-r--r--sys/ximage/ximagesink.c68
1 files changed, 36 insertions, 32 deletions
diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c
index c95ca07f3..9823f18ba 100644
--- a/sys/ximage/ximagesink.c
+++ b/sys/ximage/ximagesink.c
@@ -97,6 +97,7 @@ gst_ximagesink_ximage_new (GstXImageSink *ximagesink, gint width, gint height)
XShmAttach (ximagesink->xcontext->disp, &ximage->SHMInfo);
}
else
+#endif /* HAVE_XSHM */
{
ximage->data = g_malloc (ximage->size);
@@ -108,17 +109,6 @@ gst_ximagesink_ximage_new (GstXImageSink *ximagesink, gint width, gint height)
ximagesink->xcontext->bpp,
ximage->width * (ximagesink->xcontext->bpp / 8));
}
-#else
- ximage->data = g_malloc (ximage->size);
-
- ximage->ximage = XCreateImage (ximagesink->xcontext->disp,
- ximagesink->xcontext->visual,
- ximagesink->xcontext->depth,
- ZPixmap, 0, ximage->data,
- ximage->width, ximage->height,
- ximagesink->xcontext->bpp,
- ximage->width * (ximagesink->xcontext->bpp / 8));
-#endif /* HAVE_XSHM */
if (ximage->ximage)
{
@@ -321,11 +311,11 @@ gst_ximagesink_handle_xevents (GstXImageSink *ximagesink, GstPad *pad)
r = gst_pad_try_set_caps (GST_VIDEOSINK_PAD (ximagesink),
GST_CAPS_NEW ("ximagesink_ximage_caps", "video/x-raw-rgb",
"bpp", GST_PROPS_INT (ximagesink->xcontext->bpp),
- "depth", GST_PROPS_INT (ximagesink->xcontext->depth),
- "endianness", GST_PROPS_INT (ximagesink->xcontext->endianness),
- "red_mask", GST_PROPS_INT (ximagesink->xcontext->visual->red_mask),
- "green_mask", GST_PROPS_INT (ximagesink->xcontext->visual->green_mask),
- "blue_mask", GST_PROPS_INT (ximagesink->xcontext->visual->blue_mask),
+ //"depth", GST_PROPS_INT (ximagesink->xcontext->depth),
+ "endianness", GST_PROPS_INT (G_BIG_ENDIAN),
+ "red_mask", GST_PROPS_INT (GINT_FROM_BE (ximagesink->xcontext->visual->red_mask)),
+ "green_mask", GST_PROPS_INT (GINT_FROM_BE (ximagesink->xcontext->visual->green_mask)),
+ "blue_mask", GST_PROPS_INT (GINT_FROM_BE (ximagesink->xcontext->visual->blue_mask)),
"width", GST_PROPS_INT (e.xconfigure.width),
"height", GST_PROPS_INT (e.xconfigure.height),
"framerate", GST_PROPS_FLOAT (ximagesink->framerate)));
@@ -450,7 +440,7 @@ gst_ximagesink_xcontext_get (GstXImageSink *ximagesink)
XFree (px_formats);
- xcontext->endianness = (ImageByteOrder (xcontext->disp) == LSBFirst) ? G_LITTLE_ENDIAN:G_BIG_ENDIAN;
+ xcontext->endianness = (ImageByteOrder (xcontext->disp) == LSBFirst) ? G_BIG_ENDIAN:G_BIG_ENDIAN;
#ifdef HAVE_XSHM
/* Search for XShm extension support */
@@ -466,25 +456,18 @@ gst_ximagesink_xcontext_get (GstXImageSink *ximagesink)
}
#endif /* HAVE_XSHM */
- if (xcontext->endianness == G_LITTLE_ENDIAN && xcontext->depth == 24)
- {
- xcontext->endianness = G_BIG_ENDIAN;
- xcontext->visual->red_mask = GUINT32_SWAP_LE_BE (xcontext->visual->red_mask);
- xcontext->visual->green_mask = GUINT32_SWAP_LE_BE (xcontext->visual->green_mask);
- xcontext->visual->blue_mask = GUINT32_SWAP_LE_BE (xcontext->visual->blue_mask);
- }
-
xcontext->caps = GST_CAPS_NEW ("ximagesink_ximage_caps", "video/x-raw-rgb",
"bpp", GST_PROPS_INT (xcontext->bpp),
- "depth", GST_PROPS_INT (xcontext->depth),
- "endianness", GST_PROPS_INT (xcontext->endianness),
- "red_mask", GST_PROPS_INT (xcontext->visual->red_mask),
- "green_mask", GST_PROPS_INT (xcontext->visual->green_mask),
- "blue_mask", GST_PROPS_INT (xcontext->visual->blue_mask),
+ //"depth", GST_PROPS_INT (xcontext->depth),
+ "endianness", GST_PROPS_INT (G_BIG_ENDIAN),
+ "red_mask", GST_PROPS_INT (GINT_FROM_BE (xcontext->visual->red_mask)),
+ "green_mask", GST_PROPS_INT (GINT_FROM_BE (xcontext->visual->green_mask)),
+ "blue_mask", GST_PROPS_INT (GINT_FROM_BE (xcontext->visual->blue_mask)),
"width", GST_PROPS_INT_RANGE (0, G_MAXINT),
"height", GST_PROPS_INT_RANGE (0, G_MAXINT),
"framerate", GST_PROPS_FLOAT_RANGE (0, G_MAXFLOAT));
+ g_print ("%s\n", gst_caps_to_string (xcontext->caps));
g_mutex_unlock (ximagesink->x_lock);
/* We make this caps non floating. This way we keep it during our whole life */
@@ -535,6 +518,8 @@ static GstPadLinkReturn
gst_ximagesink_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstXImageSink *ximagesink;
+ gint check;
+ G_GNUC_UNUSED gchar *str;
ximagesink = GST_XIMAGESINK (gst_pad_get_parent (pad));
@@ -546,9 +531,28 @@ gst_ximagesink_sinkconnect (GstPad *pad, GstCaps *caps)
if (!ximagesink->xcontext)
return GST_PAD_LINK_DELAYED;
+ str = gst_caps_to_string(ximagesink->xcontext->caps);
+ g_print ("%s\n", str);
GST_DEBUG ("sinkconnect %s with %s", gst_caps_to_string(caps),
- gst_caps_to_string(ximagesink->xcontext->caps));
-
+ str);
+ g_free (str);
+ if (!gst_caps_get_int (caps, "blue_mask", &check) ||
+ check != GINT_FROM_BE (ximagesink->xcontext->visual->blue_mask))
+ return GST_PAD_LINK_REFUSED;
+ if (!gst_caps_get_int (caps, "green_mask", &check) ||
+ check != GINT_FROM_BE (ximagesink->xcontext->visual->green_mask))
+ return GST_PAD_LINK_REFUSED;
+ if (!gst_caps_get_int (caps, "red_mask", &check) ||
+ check != GINT_FROM_BE (ximagesink->xcontext->visual->red_mask))
+ return GST_PAD_LINK_REFUSED;
+ if (!gst_caps_get_int (caps, "bpp", &check) ||
+ check != ximagesink->xcontext->bpp)
+ return GST_PAD_LINK_REFUSED;
+ /* disable, because bpp check is enough
+ if (!gst_caps_get_int (caps, "depth", &check) ||
+ check != ximagesink->xcontext->depth)
+ return GST_PAD_LINK_REFUSED;
+ */
if (!gst_caps_get_int (caps, "width", &(GST_VIDEOSINK_WIDTH (ximagesink))))
return GST_PAD_LINK_REFUSED;
if (!gst_caps_get_int (caps, "height", &(GST_VIDEOSINK_HEIGHT (ximagesink))))