From f84de0efb7b6073c96d38109e9936a0978a93bba Mon Sep 17 00:00:00 2001 From: Zaheer Abbas Merali Date: Fri, 31 Mar 2006 17:52:36 +0000 Subject: [PATCH] Add tests and fix PAR caps issue to ximagesrc Original commit message from CVS: 2006-03-31 Zaheer Abbas Merali * Makefile.am: * configure.ac: * sys/ximagesrc/ximagesrc.c: (gst_ximagesrc_ximage_get), (gst_ximagesrc_get_caps), (gst_ximagesrc_class_init): * sys/ximagesrc/ximageutil.c: * tests/Makefile.am: * tests/icles/Makefile.am: * tests/icles/ximagesrc-test.c: (terminate_playback), (main): Add tests and fix PAR caps issue to ximagesrc --- sys/ximage/gstximagesrc.c | 11 ++++++-- sys/ximage/ximageutil.c | 6 ++-- tests/icles/Makefile.am | 12 ++++++++ tests/icles/ximagesrc-test.c | 65 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 tests/icles/Makefile.am create mode 100644 tests/icles/ximagesrc-test.c diff --git a/sys/ximage/gstximagesrc.c b/sys/ximage/gstximagesrc.c index 2edbfd7..95c54ba 100644 --- a/sys/ximage/gstximagesrc.c +++ b/sys/ximage/gstximagesrc.c @@ -68,7 +68,8 @@ static GstStaticPadTemplate t = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw-rgb, " "framerate = (fraction) [ 0, MAX ], " - "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ] ")); + "width = (int) [ 1, MAX ], " "height = (int) [ 1, MAX ], " + "pixel-aspect-ratio = (fraction) [ 0, MAX ]")); enum { @@ -369,7 +370,9 @@ gst_ximagesrc_ximage_get (GstXImageSrc * ximagesrc) "width", G_TYPE_INT, xcontext->width, "height", G_TYPE_INT, xcontext->height, "framerate", GST_TYPE_FRACTION, ximagesrc->fps_n, ximagesrc->fps_d, - "pixel-aspect-ratio", GST_TYPE_FRACTION, xcontext->par, NULL); + "pixel-aspect-ratio", GST_TYPE_FRACTION, + gst_value_get_fraction_numerator (xcontext->par), + gst_value_get_fraction_denominator (xcontext->par), NULL); gst_buffer_set_caps (GST_BUFFER (ximage), caps); g_mutex_unlock (ximagesrc->x_lock); @@ -717,7 +720,9 @@ gst_ximagesrc_get_caps (GstBaseSrc * bs) "blue_mask", G_TYPE_INT, xcontext->b_mask_output, "width", G_TYPE_INT, xcontext->width, "height", G_TYPE_INT, xcontext->height, - "framerate", GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, NULL); + "framerate", GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, + "pixel-aspect-ratio", GST_TYPE_FRACTION_RANGE, 1, G_MAXINT, G_MAXINT, 1, + NULL); } static gboolean diff --git a/sys/ximage/ximageutil.c b/sys/ximage/ximageutil.c index 2c1149b..c9b7c56 100644 --- a/sys/ximage/ximageutil.c +++ b/sys/ximage/ximageutil.c @@ -140,12 +140,11 @@ ximageutil_xcontext_get (GstElement * parent, const gchar * display_name) xcontext = g_new0 (GstXContext, 1); xcontext->disp = XOpenDisplay (display_name); - + GST_DEBUG_OBJECT (parent, "opened display 0x%x", xcontext->disp); if (!xcontext->disp) { g_free (xcontext); return NULL; } - xcontext->screen = DefaultScreenOfDisplay (xcontext->disp); xcontext->screen_num = DefaultScreen (xcontext->disp); xcontext->visual = DefaultVisual (xcontext->disp, xcontext->screen_num); @@ -164,7 +163,6 @@ ximageutil_xcontext_get (GstElement * parent, const gchar * display_name) GST_DEBUG_OBJECT (parent, "X reports %dx%d pixels and %d mm x %d mm", xcontext->width, xcontext->height, xcontext->widthmm, xcontext->heightmm); - ximageutil_calculate_pixel_aspect_ratio (xcontext); /* We get supported pixmap formats at supported depth */ @@ -288,7 +286,7 @@ ximageutil_calculate_pixel_aspect_ratio (GstXContext * xcontext) xcontext->par = g_new0 (GValue, 1); g_value_init (xcontext->par, GST_TYPE_FRACTION); gst_value_set_fraction (xcontext->par, par[index][0], par[index][1]); - GST_DEBUG ("set xcontext PAR to %d/%d", + GST_DEBUG ("set xcontext PAR to %d/%d\n", gst_value_get_fraction_numerator (xcontext->par), gst_value_get_fraction_denominator (xcontext->par)); } diff --git a/tests/icles/Makefile.am b/tests/icles/Makefile.am new file mode 100644 index 0000000..b04651d --- /dev/null +++ b/tests/icles/Makefile.am @@ -0,0 +1,12 @@ +if USE_X +X_TESTS = ximagesrc_test + +ximagesrc_test_SOURCES = ximagesrc-test.c +ximagesrc_test_CFLAGS = $(GST_CFLAGS) +ximagesrc_test_LDFLAGS = $(GST_LIBS) +else +X_TESTS = +endif + +noinst_PROGRAMS = $(X_TESTS) + diff --git a/tests/icles/ximagesrc-test.c b/tests/icles/ximagesrc-test.c new file mode 100644 index 0000000..655d7b5 --- /dev/null +++ b/tests/icles/ximagesrc-test.c @@ -0,0 +1,65 @@ +/* GStreamer + * Copyright (C) <2006> Zaheer Abbas Merali + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +static GMainLoop *loop; + +static gboolean +terminate_playback (GstElement * pipeline) +{ + g_print ("Terminating playback\n"); + g_main_loop_quit (loop); + return FALSE; +} + +int +main (int argc, char **argv) +{ + GstElement *pipeline; + GstBus *bus; + GError *error = NULL; + + gst_init (&argc, &argv); + + pipeline = gst_parse_launch ("ximagesrc ! fakesink", &error); + if (error) { + g_print ("Error while parsing pipeline description: %s\n", error->message); + return -1; + } + + loop = g_main_loop_new (NULL, FALSE); + + bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline)); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + /* We want to get out after */ + g_timeout_add (500000, (GSourceFunc) terminate_playback, pipeline); + + g_main_loop_run (loop); + + g_main_loop_unref (loop); + + return 0; +} -- 2.7.4