add debugging, use correct size for shm segments

Original commit message from CVS:
add debugging, use correct size for shm segments
This commit is contained in:
Thomas Vander Stichele 2004-07-26 13:00:27 +00:00
parent 77b9a52910
commit a79c5196c8
3 changed files with 42 additions and 9 deletions

View file

@ -1,3 +1,13 @@
2004-07-26 Thomas Vander Stichele <thomas at apestaart dot org>
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_ximage_put), (gst_ximagesink_renegotiate_size),
(gst_ximagesink_chain), (gst_ximagesink_buffer_alloc):
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_chain), (gst_xvimagesink_buffer_alloc):
Add debugging statements. Use the sizes as returned by the
*CreateImage calls.
2004-07-26 Johan Dahlin <johan@gnome.org>
* gst/tcp/gsttcpclientsrc.c (gst_tcpclientsrc_get): Make sure that

View file

@ -162,6 +162,7 @@ gst_ximagesink_ximage_new (GstXImageSink * ximagesink, gint width, gint height)
GstXImage *ximage = NULL;
g_return_val_if_fail (GST_IS_XIMAGESINK (ximagesink), NULL);
GST_DEBUG_OBJECT (ximagesink, "creating %dx%d", width, height);
ximage = g_new0 (GstXImage, 1);
@ -173,6 +174,8 @@ gst_ximagesink_ximage_new (GstXImageSink * ximagesink, gint width, gint height)
ximage->size =
(ximagesink->xcontext->bpp / 8) * ximage->width * ximage->height;
GST_DEBUG_OBJECT (ximagesink, "GStreamer's image size is %d, stride %d",
ximage->size, ximage->size / ximage->height);
#ifdef HAVE_XSHM
if (ximagesink->xcontext->use_xshm) {
@ -180,6 +183,10 @@ gst_ximagesink_ximage_new (GstXImageSink * ximagesink, gint width, gint height)
ximagesink->xcontext->visual,
ximagesink->xcontext->depth,
ZPixmap, NULL, &ximage->SHMInfo, ximage->width, ximage->height);
/* we have to use the returned bytes_per_line, not our own calculation */
ximage->size = ximage->ximage->bytes_per_line * ximage->ximage->height;
GST_DEBUG_OBJECT (ximagesink, "XShm image size is %d, stride %d",
ximage->size, ximage->ximage->bytes_per_line);
ximage->SHMInfo.shmid = shmget (IPC_PRIVATE, ximage->size,
IPC_CREAT | 0777);
@ -203,9 +210,9 @@ gst_ximagesink_ximage_new (GstXImageSink * ximagesink, gint width, gint height)
ximagesink->xcontext->depth,
ZPixmap, 0, NULL,
ximage->width, ximage->height,
ximagesink->xcontext->bpp,
ximage->width * (ximagesink->xcontext->bpp / 8));
ximagesink->xcontext->bpp, ximage->size / ximage->height);
/* we passed a bytes_per_line, so we know the size */
ximage->ximage->data = g_malloc (ximage->size);
XSync (ximagesink->xcontext->disp, FALSE);
@ -270,6 +277,7 @@ static void
gst_ximagesink_ximage_put (GstXImageSink * ximagesink, GstXImage * ximage)
{
gint x, y;
gint w, h;
g_return_if_fail (ximage != NULL);
g_return_if_fail (GST_IS_XIMAGESINK (ximagesink));
@ -278,22 +286,25 @@ gst_ximagesink_ximage_put (GstXImageSink * ximagesink, GstXImage * ximage)
if (ximagesink->cur_image != ximage)
ximagesink->cur_image = ximage;
/* We center the image in the window */
/* We center the image in the window; so calculate top left corner location */
x = MAX (0, (ximagesink->xwindow->width - ximage->width) / 2);
y = MAX (0, (ximagesink->xwindow->height - ximage->height) / 2);
w = ximage->width, h = ximage->height;
g_mutex_lock (ximagesink->x_lock);
#ifdef HAVE_XSHM
if (ximagesink->xcontext->use_xshm) {
GST_LOG_OBJECT (ximagesink,
"XShmPutImage, src: %d, %d - dest: %d, %d, dim: %dx%d",
0, 0, x, y, w, h);
XShmPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win,
ximagesink->xwindow->gc, ximage->ximage,
0, 0, x, y, ximage->width, ximage->height, FALSE);
ximagesink->xwindow->gc, ximage->ximage, 0, 0, x, y, w, h, FALSE);
} else
#endif /* HAVE_XSHM */
{
XPutImage (ximagesink->xcontext->disp, ximagesink->xwindow->win,
ximagesink->xwindow->gc, ximage->ximage,
0, 0, x, y, ximage->width, ximage->height);
ximagesink->xwindow->gc, ximage->ximage, 0, 0, x, y, w, h);
}
XSync (ximagesink->xcontext->disp, FALSE);
@ -509,6 +520,7 @@ gst_ximagesink_renegotiate_size (GstXImageSink * ximagesink)
(GST_VIDEOSINK_HEIGHT (ximagesink) !=
ximagesink->ximage->height))) {
/* We renew our ximage only if size changed */
GST_DEBUG_OBJECT (ximagesink, "destroying and recreating our ximage");
gst_ximagesink_ximage_destroy (ximagesink, ximagesink->ximage);
ximagesink->ximage = NULL;
}
@ -930,7 +942,8 @@ gst_ximagesink_chain (GstPad * pad, GstData * data)
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
ximagesink->time = GST_BUFFER_TIMESTAMP (buf);
}
GST_DEBUG ("clock wait: %" GST_TIME_FORMAT, GST_TIME_ARGS (ximagesink->time));
GST_LOG_OBJECT (ximagesink, "clock wait: %" GST_TIME_FORMAT,
GST_TIME_ARGS (ximagesink->time));
if (GST_VIDEOSINK_CLOCK (ximagesink)) {
gst_element_wait (GST_ELEMENT (ximagesink), ximagesink->time);
@ -944,6 +957,7 @@ gst_ximagesink_chain (GstPad * pad, GstData * data)
/* Else we have to copy the data into our private image, */
/* if we have one... */
if (!ximagesink->ximage) {
GST_DEBUG_OBJECT (ximagesink, "creating our ximage");
ximagesink->ximage = gst_ximagesink_ximage_new (ximagesink,
GST_VIDEOSINK_WIDTH (ximagesink), GST_VIDEOSINK_HEIGHT (ximagesink));
if (!ximagesink->ximage) {
@ -1034,6 +1048,7 @@ gst_ximagesink_buffer_alloc (GstPad * pad, guint64 offset, guint size)
if (!ximage) {
/* We found no suitable image in the pool. Creating... */
GST_DEBUG_OBJECT (ximagesink, "no usable image in pool, creating ximage");
ximage = gst_ximagesink_ximage_new (ximagesink,
GST_VIDEOSINK_WIDTH (ximagesink), GST_VIDEOSINK_HEIGHT (ximagesink));
}

View file

@ -173,6 +173,7 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink,
GstXvImage *xvimage = NULL;
g_return_val_if_fail (GST_IS_XVIMAGESINK (xvimagesink), NULL);
GST_DEBUG_OBJECT (xvimagesink, "creating %dx%d", width, height);
xvimage = g_new0 (GstXvImage, 1);
@ -185,6 +186,8 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink,
xvimage->size =
(xvimagesink->xcontext->bpp / 8) * xvimage->width * xvimage->height;
GST_DEBUG_OBJECT (xvimagesink, "GStreamer's image size is %d, stride %d",
xvimage->size, xvimage->size / xvimage->height);
#ifdef HAVE_XSHM
if (xvimagesink->xcontext->use_xshm) {
@ -192,6 +195,9 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink,
xvimagesink->xcontext->xv_port_id,
xvimage->im_format, NULL,
xvimage->width, xvimage->height, &xvimage->SHMInfo);
/* we have to use the returned data_size, not our own calculation */
xvimage->size = xvimage->xvimage->data_size;
GST_DEBUG_OBJECT (xvimagesink, "XShm image size is %d", xvimage->size);
xvimage->SHMInfo.shmid = shmget (IPC_PRIVATE, xvimage->size,
IPC_CREAT | 0777);
@ -1225,7 +1231,7 @@ gst_xvimagesink_chain (GstPad * pad, GstData * data)
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
xvimagesink->time = GST_BUFFER_TIMESTAMP (buf);
}
GST_DEBUG ("clock wait: %" GST_TIME_FORMAT,
GST_LOG_OBJECT (xvimagesink, "clock wait: %" GST_TIME_FORMAT,
GST_TIME_ARGS (xvimagesink->time));
if (GST_VIDEOSINK_CLOCK (xvimagesink)) {
@ -1240,6 +1246,7 @@ gst_xvimagesink_chain (GstPad * pad, GstData * data)
/* Else we have to copy the data into our private image, */
/* if we have one... */
if (!xvimagesink->xvimage) {
GST_DEBUG_OBJECT (xvimagesink, "creating our xvimage");
xvimagesink->xvimage = gst_xvimagesink_xvimage_new (xvimagesink,
GST_VIDEOSINK_WIDTH (xvimagesink),
GST_VIDEOSINK_HEIGHT (xvimagesink));
@ -1334,6 +1341,7 @@ gst_xvimagesink_buffer_alloc (GstPad * pad, guint64 offset, guint size)
if (!xvimage) {
/* We found no suitable image in the pool. Creating... */
GST_DEBUG_OBJECT (xvimagesink, "no usable image in pool, creating xvimage");
xvimage = gst_xvimagesink_xvimage_new (xvimagesink,
GST_VIDEOSINK_WIDTH (xvimagesink), GST_VIDEOSINK_HEIGHT (xvimagesink));
}