BadDrawable or BadWindow error
- From: omar crea jusan it
- To: gtk-app-devel-list gnome org
- Subject: BadDrawable or BadWindow error
- Date: Tue, 12 Jun 2007 15:11:17 +0200
Hi everybody. I wrote a little application combining GTK and GStreamer
functions to view the camera input on the window's screen and
to take photo (not yet implemented, this is experimental code...).
When I launch the application I obtain the following error:
"The program 'test2' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadDrawable (invalid Pixmap or Window parameter)'.
(Details: serial 1362 error_code 9 request_code 140 minor_code 9)"
Sometimes BadDrawable is substituted with BadWindow or others... I really
don't know why this occur: the application runs properly, I also manage
the "delete" and "destroy" event on the main window, but... Can anyone
help me?
Here is the launching command line to compile:
gcc base.c `pkg-config --cflags --libs gtk+-2.0 gstreamer-0.10 \
gstreamer-interfaces-0.8 gdk-2.0` -o test2
And here is the source code:
#include <gtk/gtk.h>
#include <gst/gst.h>
#include <gst/interfaces/xoverlay.h>
#include <gdk/gdkx.h>
#include <gdk/gdk.h>
static gboolean expose( GtkWidget * widget, GdkEventExpose * event,
gpointer data );
int main( int argc, char *argv[] )
{
GtkWidget *window, *screen;
GstElement *pipeline, *src, *sink, *csp;
GstElement *tee, *csp2, *fakesink;
GstElement *queue;
GstCaps *filter;
gboolean link_ok;
gtk_init (&argc, &argv);
gst_init(&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),
"delete_event",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
gtk_signal_connect(GTK_OBJECT(window),
"destroy",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
screen = gtk_drawing_area_new();
gtk_window_set_title(GTK_WINDOW(window), "Camera app");
gtk_container_set_border_width (GTK_CONTAINER (window), 5);
gtk_widget_set_size_request(window, 640, 480);
gtk_widget_set_size_request(screen, 320, 240);
gtk_widget_show(screen);
gtk_container_add(GTK_CONTAINER(window), screen);
pipeline = gst_pipeline_new("camera");
src = gst_element_factory_make("videotestsrc", "src");
// src = gst_element_factory_make("gconfv4l2src", "src");
sink = gst_element_factory_make("xvimagesink", "sink");
csp = gst_element_factory_make("ffmpegcolorspace", "csp");
tee = gst_element_factory_make("tee", "tee");
fakesink = gst_element_factory_make("fakesink", "fakesink");
csp2 = gst_element_factory_make("ffmpegcolorspace", "csp2");
queue = gst_element_factory_make("queue", "queue");
gst_bin_add(GST_BIN(pipeline), src);
gst_bin_add(GST_BIN(pipeline), csp);
gst_bin_add(GST_BIN(pipeline), tee);
gst_bin_add(GST_BIN(pipeline), csp2);
gst_bin_add(GST_BIN(pipeline), sink);
gst_bin_add(GST_BIN(pipeline), queue);
gst_bin_add(GST_BIN(pipeline), fakesink);
filter = gst_caps_new_simple("video/x-raw-yuv",
"width", G_TYPE_INT, 320,
"height", G_TYPE_INT, 240,
"framerate", GST_TYPE_FRACTION, 11, 1,
NULL);
link_ok = gst_element_link_filtered(src, tee, filter);
if (!link_ok)
g_warning("Failed to link elements\n");
gst_element_link(tee, csp);
gst_element_link(csp, sink);
gst_element_link(tee, queue);
gst_element_link(queue, csp2);
gst_element_link(csp2, fakesink);
/* now connect the video source to the desired widget */
g_signal_connect(screen, "expose-event", G_CALLBACK(expose), sink);
/* set current pipeline state to PLAY */
gst_element_set_state(pipeline, GST_STATE_PLAYING);
gtk_widget_show(window);
/* entering main loop */
gtk_main ();
/* stop the pipeline */
gst_element_set_state(pipeline, GST_STATE_NULL);
/* frees the pipeline */
gst_object_unref(pipeline);
return 0;
}
static gboolean expose
( GtkWidget * widget, GdkEventExpose * event, gpointer data )
{
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(data),
GDK_WINDOW_XWINDOW(widget->window));
return FALSE;
}
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]