On 6/13/07, <b class="gmail_sendername">bounce bounce</b> &lt;<a href="mailto:bouncebounce@caramail.com">bouncebounce@caramail.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>I&#39;vealready send a mail on this mailing list because I don&#39;t succeed to output a video in a Xwindow drawing area with a &quot;playbin&quot; and a &quot;directdrawsink&quot; on Windows. And I always do not succed in that.
<br><br>Well, if we used a &quot;playbin&quot; and play the video, the element will create its own internal window and render into it because no Window ID was provided by the application or because of an error during the configuration
<br></blockquote></div>I think you are trying to draw the video frames on your own xwindow. Use the following code snippet to do so :<br>--------------<br>#include &lt;gst/gst.h&gt;<br>#include &lt;gst/interfaces/xoverlay.h&gt;
<br>#include &lt;X11/Xlib.h&gt;<br>#include &lt;X11/Xutil.h&gt;<br>#include &lt;math.h&gt;<br>#include &lt;sys/time.h&gt;<br><br>GstElement *bin;<br>static Display *disp;<br>static Window root, win;<br>static GC gc;<br>static gint width = 176, height = 220 ;
<br>static gint disp_width, disp_height;<br><br>static void open_display (void)<br>{<br>&nbsp;&nbsp;&nbsp; gint screen_num;<br>&nbsp;&nbsp;&nbsp; disp = XOpenDisplay (NULL);<br>&nbsp;&nbsp;&nbsp; root = DefaultRootWindow (disp);<br>&nbsp;&nbsp;&nbsp; screen_num = DefaultScreen (disp);
<br>&nbsp;&nbsp;&nbsp; disp_width = DisplayWidth (disp, screen_num);<br>&nbsp;&nbsp;&nbsp; disp_height = DisplayHeight (disp, screen_num);<br>}<br><br>static GstBusSyncReply <br>create_window (GstBus * bus, GstMessage * message, GstPipeline * pipeline)
<br>{<br>&nbsp;&nbsp;&nbsp; XGCValues values;<br>&nbsp;&nbsp;&nbsp; const GstStructure *s;<br>&nbsp;&nbsp;&nbsp; s = gst_message_get_structure (message);<br>&nbsp;&nbsp;&nbsp; if (!gst_structure_has_name (s, &quot;prepare-xwindow-id&quot;)) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return GST_BUS_PASS;<br>&nbsp;&nbsp;&nbsp; }
<br>&nbsp;&nbsp;&nbsp; g_print (&quot;Creating our own window\n&quot;);<br>&nbsp;&nbsp;&nbsp; win = XCreateSimpleWindow (disp, root, 0, 0, width, height, 0, 0, 0);<br>&nbsp;&nbsp;&nbsp; XSetWindowBackgroundPixmap (disp, win, None);<br>&nbsp;&nbsp;&nbsp; gc = XCreateGC (disp, win, 0, &amp;values);
<br>&nbsp;&nbsp;&nbsp; XMapRaised (disp, win);<br>&nbsp;&nbsp;&nbsp; XSync (disp, FALSE);<br>&nbsp;&nbsp;&nbsp; gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (GST_MESSAGE_SRC (message)), win);<br>&nbsp;&nbsp;&nbsp; return GST_BUS_DROP;<br>}<br><br>int main (int argc, char *argv[])<br>
{<br>&nbsp;&nbsp;&nbsp; ....<br>&nbsp;&nbsp;&nbsp; ....<br>&nbsp;&nbsp;&nbsp; open_display ();<br>&nbsp;&nbsp;&nbsp; bin = gst_element_factory_make (&quot;playbin&quot;, &quot;playbin&quot;);<br>&nbsp;&nbsp;&nbsp; g_object_set (G_OBJECT (bin), &quot;uri&quot;, argv[1], NULL);<br>&nbsp;&nbsp;&nbsp; bus = gst_pipeline_get_bus (GST_PIPELINE (bin));
<br>&nbsp;&nbsp;&nbsp; gst_bus_set_sync_handler (bus, (GstBusSyncHandler) create_window, bin);<br>&nbsp;&nbsp;&nbsp; gst_object_unref (bus);<br>&nbsp;&nbsp;&nbsp; ....<br>&nbsp;&nbsp;&nbsp; ....<br>&nbsp;&nbsp;&nbsp; //close the created display at the end.<br>&nbsp;&nbsp;&nbsp; XCloseDisplay (disp);<br>}<br>//------------------
<br>It should work.<br><br>Regards,<br>Sanjay<br>