| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title>gstvideooverlay: GStreamer Base Plugins 1.0 Library Reference Manual</title> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> |
| <link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Library Reference Manual"> |
| <link rel="up" href="gstreamer-video.html" title="Video Library"> |
| <link rel="prev" href="gst-plugins-base-libs-gstvideoorientation.html" title="gstvideoorientation"> |
| <link rel="next" href="gst-plugins-base-libs-GstVideoDecoder.html" title="GstVideoDecoder"> |
| <meta name="generator" content="GTK-Doc V1.25 (XML mode)"> |
| <link rel="stylesheet" href="style.css" type="text/css"> |
| </head> |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> |
| <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> |
| <td width="100%" align="left" class="shortcuts"> |
| <a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> |
| <a href="#gst-plugins-base-libs-gstvideooverlay.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> |
| <a href="#gst-plugins-base-libs-gstvideooverlay.object-hierarchy" class="shortcut">Object Hierarchy</a></span> |
| </td> |
| <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> |
| <td><a accesskey="u" href="gstreamer-video.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> |
| <td><a accesskey="p" href="gst-plugins-base-libs-gstvideoorientation.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> |
| <td><a accesskey="n" href="gst-plugins-base-libs-GstVideoDecoder.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> |
| </tr></table> |
| <div class="refentry"> |
| <a name="gst-plugins-base-libs-gstvideooverlay"></a><div class="titlepage"></div> |
| <div class="refnamediv"><table width="100%"><tr> |
| <td valign="top"> |
| <h2><span class="refentrytitle"><a name="gst-plugins-base-libs-gstvideooverlay.top_of_page"></a>gstvideooverlay</span></h2> |
| <p>gstvideooverlay — Interface for setting/getting a window system resource |
| on elements supporting it to configure a window into which to render a |
| video.</p> |
| </td> |
| <td class="gallery_image" valign="top" align="right"></td> |
| </tr></table></div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.functions"></a><h2>Functions</h2> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="functions_return"> |
| <col class="functions_name"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="function_type"> |
| <span class="returnvalue">void</span> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-got-window-handle" title="gst_video_overlay_got_window_handle ()">gst_video_overlay_got_window_handle</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <span class="returnvalue">void</span> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()">gst_video_overlay_set_window_handle</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <span class="returnvalue">void</span> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-prepare-window-handle" title="gst_video_overlay_prepare_window_handle ()">gst_video_overlay_prepare_window_handle</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <span class="returnvalue">void</span> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose" title="gst_video_overlay_expose ()">gst_video_overlay_expose</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <span class="returnvalue">void</span> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-handle-events" title="gst_video_overlay_handle_events ()">gst_video_overlay_handle_events</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-render-rectangle" title="gst_video_overlay_set_render_rectangle ()">gst_video_overlay_set_render_rectangle</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| <tr> |
| <td class="function_type"> |
| <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> |
| </td> |
| <td class="function_name"> |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-is-video-overlay-prepare-window-handle-message" title="gst_is_video_overlay_prepare_window_handle_message ()">gst_is_video_overlay_prepare_window_handle_message</a> <span class="c_punctuation">()</span> |
| </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| <a name="GstVideoOverlay"></a><div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.other"></a><h2>Types and Values</h2> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="name"> |
| <col class="description"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="datatype_keyword"> </td> |
| <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay-struct" title="GstVideoOverlay">GstVideoOverlay</a></td> |
| </tr> |
| <tr> |
| <td class="datatype_keyword">struct</td> |
| <td class="function_name"><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlayInterface" title="struct GstVideoOverlayInterface">GstVideoOverlayInterface</a></td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.object-hierarchy"></a><h2>Object Hierarchy</h2> |
| <pre class="screen"> <a href="https://developer.gnome.org/gobject/unstable/GTypeModule.html">GInterface</a> |
| <span class="lineart">╰──</span> GstVideoOverlay |
| </pre> |
| </div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.includes"></a><h2>Includes</h2> |
| <pre class="synopsis">#include <gst/video/videooverlay.h> |
| </pre> |
| </div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.description"></a><h2>Description</h2> |
| <div class="refsect2"> |
| <a name="id-1.2.15.17.8.2"></a><p> |
| The <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface is used for 2 main purposes : |
| </p> |
| <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> |
| <li class="listitem"><p> |
| To get a grab on the Window where the video sink element is going to render. |
| This is achieved by either being informed about the Window identifier that |
| the video sink element generated, or by forcing the video sink element to use |
| a specific Window identifier for rendering. |
| </p></li> |
| <li class="listitem"><p> |
| To force a redrawing of the latest video frame the video sink element |
| displayed on the Window. Indeed if the <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPipeline.html#GstPipeline-struct"><span class="type">GstPipeline</span></a> is in <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GST-STATE-PAUSED:CAPS"><span class="type">GST_STATE_PAUSED</span></a> |
| state, moving the Window around will damage its content. Application |
| developers will want to handle the Expose events themselves and force the |
| video sink element to refresh the Window's content. |
| </p></li> |
| </ul></div> |
| <p> |
| </p> |
| <p> |
| Using the Window created by the video sink is probably the simplest scenario, |
| in some cases, though, it might not be flexible enough for application |
| developers if they need to catch events such as mouse moves and button |
| clicks. |
| </p> |
| <p> |
| Setting a specific Window identifier on the video sink element is the most |
| flexible solution but it has some issues. Indeed the application needs to set |
| its Window identifier at the right time to avoid internal Window creation |
| from the video sink element. To solve this issue a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> is posted on |
| the bus to inform the application that it should set the Window identifier |
| immediately. Here is an example on how to do that correctly: |
| </p> |
| <div class="informalexample"> |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
| <tbody> |
| <tr> |
| <td class="listing_lines" align="right"><pre>1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32</pre></td> |
| <td class="listing_code"><pre class="programlisting"><span class="gtkdoc kwb">static</span> GstBusSyncReply |
| <span class="function">create_window</span> <span class="gtkdoc opt">(</span>GstBus <span class="gtkdoc opt">*</span> bus<span class="gtkdoc opt">,</span> GstMessage <span class="gtkdoc opt">*</span> message<span class="gtkdoc opt">,</span> GstPipeline <span class="gtkdoc opt">*</span> pipeline<span class="gtkdoc opt">)</span> |
| <span class="gtkdoc opt">{</span> |
| <span class="gtkdoc slc">// ignore anything but 'prepare-window-handle' element messages</span> |
| <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="gst-plugins-base-libs-gstvideooverlay.html#gst-is-video-overlay-prepare-window-handle-message">gst_is_video_overlay_prepare_window_handle_message</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">))</span> |
| <span class="keyword">return</span> GST_BUS_PASS<span class="gtkdoc opt">;</span> |
| |
| win <span class="gtkdoc opt">=</span> <span class="function">XCreateSimpleWindow</span> <span class="gtkdoc opt">(</span>disp<span class="gtkdoc opt">,</span> root<span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="number">320</span><span class="gtkdoc opt">,</span> <span class="number">240</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">,</span> <span class="number">0</span><span class="gtkdoc opt">);</span> |
| |
| <span class="function">XSetWindowBackgroundPixmap</span> <span class="gtkdoc opt">(</span>disp<span class="gtkdoc opt">,</span> win<span class="gtkdoc opt">,</span> None<span class="gtkdoc opt">);</span> |
| |
| <span class="function">XMapRaised</span> <span class="gtkdoc opt">(</span>disp<span class="gtkdoc opt">,</span> win<span class="gtkdoc opt">);</span> |
| |
| <span class="function">XSync</span> <span class="gtkdoc opt">(</span>disp<span class="gtkdoc opt">,</span> FALSE<span class="gtkdoc opt">);</span> |
| |
| <span class="function"><a href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle">gst_video_overlay_set_window_handle</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_VIDEO_OVERLAY</span> <span class="gtkdoc opt">(</span><span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GST-MESSAGE-SRC:CAPS">GST_MESSAGE_SRC</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">)),</span> |
| win<span class="gtkdoc opt">);</span> |
| |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#gst-message-unref">gst_message_unref</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">);</span> |
| |
| <span class="keyword">return</span> GST_BUS_DROP<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">}</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc kwb">int</span> |
| <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span> <span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">**</span>argv<span class="gtkdoc opt">)</span> |
| <span class="gtkdoc opt">{</span> |
| <span class="gtkdoc opt">...</span> |
| bus <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPipeline.html#gst-pipeline-get-bus">gst_pipeline_get_bus</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_PIPELINE</span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">));</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#gst-bus-set-sync-handler">gst_bus_set_sync_handler</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">, (</span>GstBusSyncHandler<span class="gtkdoc opt">)</span> create_window<span class="gtkdoc opt">,</span> pipeline<span class="gtkdoc opt">,</span> |
| NULL<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc opt">}</span></pre></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <p> |
| </p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="id-1.2.15.17.8.3"></a><h3>Two basic usage scenarios</h3> |
| <p> |
| There are two basic usage scenarios: in the simplest case, the application |
| uses <span class="type">playbin</span> or <span class="type">plasink</span> or knows exactly what particular element is used |
| for video output, which is usually the case when the application creates |
| the videosink to use (e.g. <span class="type">xvimagesink</span>, <span class="type">ximagesink</span>, etc.) itself; in this |
| case, the application can just create the videosink element, create and |
| realize the window to render the video on and then |
| call <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> directly with the XID or native |
| window handle, before starting up the pipeline. |
| As <span class="type">playbin</span> and <span class="type">playsink</span> implement the video overlay interface and proxy |
| it transparently to the actual video sink even if it is created later, this |
| case also applies when using these elements. |
| </p> |
| <p> |
| In the other and more common case, the application does not know in advance |
| what GStreamer video sink element will be used for video output. This is |
| usually the case when an element such as <span class="type">autovideosink</span> is used. |
| In this case, the video sink element itself is created |
| asynchronously from a GStreamer streaming thread some time after the |
| pipeline has been started up. When that happens, however, the video sink |
| will need to know right then whether to render onto an already existing |
| application window or whether to create its own window. This is when it |
| posts a prepare-window-handle message, and that is also why this message needs |
| to be handled in a sync bus handler which will be called from the streaming |
| thread directly (because the video sink will need an answer right then). |
| </p> |
| <p> |
| As response to the prepare-window-handle element message in the bus sync |
| handler, the application may use <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> to tell |
| the video sink to render onto an existing window surface. At this point the |
| application should already have obtained the window handle / XID, so it |
| just needs to set it. It is generally not advisable to call any GUI toolkit |
| functions or window system functions from the streaming thread in which the |
| prepare-window-handle message is handled, because most GUI toolkits and |
| windowing systems are not thread-safe at all and a lot of care would be |
| required to co-ordinate the toolkit and window system calls of the |
| different threads (Gtk+ users please note: prior to Gtk+ 2.18 |
| <a href="/usr/share/gtk-doc/html/gdk3gdk3-X-Window-System-Interaction.html#GDK-WINDOW-XID:CAPS"><code class="function">GDK_WINDOW_XID()</code></a> was just a simple structure access, so generally fine to do |
| within the bus sync handler; this macro was changed to a function call in |
| Gtk+ 2.18 and later, which is likely to cause problems when called from a |
| sync handler; see below for a better approach without <a href="/usr/share/gtk-doc/html/gdk3gdk3-X-Window-System-Interaction.html#GDK-WINDOW-XID:CAPS"><code class="function">GDK_WINDOW_XID()</code></a> |
| used in the callback). |
| </p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="id-1.2.15.17.8.4"></a><h3>GstVideoOverlay and Gtk+</h3> |
| <p> |
| </p> |
| <div class="informalexample"> |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
| <tbody> |
| <tr> |
| <td class="listing_lines" align="right"><pre>1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32 |
| 33 |
| 34 |
| 35 |
| 36 |
| 37 |
| 38 |
| 39 |
| 40 |
| 41 |
| 42 |
| 43 |
| 44 |
| 45 |
| 46 |
| 47 |
| 48 |
| 49 |
| 50 |
| 51 |
| 52 |
| 53 |
| 54 |
| 55 |
| 56 |
| 57 |
| 58 |
| 59 |
| 60 |
| 61 |
| 62 |
| 63 |
| 64 |
| 65 |
| 66 |
| 67 |
| 68 |
| 69 |
| 70 |
| 71 |
| 72 |
| 73 |
| 74 |
| 75 |
| 76 |
| 77 |
| 78 |
| 79 |
| 80 |
| 81 |
| 82 |
| 83 |
| 84 |
| 85 |
| 86 |
| 87 |
| 88 |
| 89 |
| 90 |
| 91 |
| 92 |
| 93 |
| 94 |
| 95 |
| 96</pre></td> |
| <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc">#include <gst/video/videooverlay.h></span> |
| <span class="gtkdoc ppc">#include <gtk/gtk.h></span> |
| <span class="gtkdoc ppc">#ifdef GDK_WINDOWING_X11</span> |
| <span class="gtkdoc ppc">#include <gdk/gdkx.h></span> <span class="gtkdoc slc">// for GDK_WINDOW_XID</span> |
| <span class="gtkdoc ppc"></span><span class="gtkdoc ppc">#endif</span> |
| <span class="gtkdoc ppc">#ifdef GDK_WINDOWING_WIN32</span> |
| <span class="gtkdoc ppc">#include <gdk/gdkwin32.h></span> <span class="gtkdoc slc">// for GDK_WINDOW_HWND</span> |
| <span class="gtkdoc ppc"></span><span class="gtkdoc ppc">#endif</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc kwb">static</span> guintptr video_window_handle <span class="gtkdoc opt">=</span> <span class="number">0</span><span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc kwb">static</span> GstBusSyncReply |
| <span class="function">bus_sync_handler</span> <span class="gtkdoc opt">(</span>GstBus <span class="gtkdoc opt">*</span> bus<span class="gtkdoc opt">,</span> GstMessage <span class="gtkdoc opt">*</span> message<span class="gtkdoc opt">,</span> gpointer user_data<span class="gtkdoc opt">)</span> |
| <span class="gtkdoc opt">{</span> |
| <span class="gtkdoc slc">// ignore anything but 'prepare-window-handle' element messages</span> |
| <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="gst-plugins-base-libs-gstvideooverlay.html#gst-is-video-overlay-prepare-window-handle-message">gst_is_video_overlay_prepare_window_handle_message</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">))</span> |
| <span class="keyword">return</span> GST_BUS_PASS<span class="gtkdoc opt">;</span> |
| |
| <span class="keyword">if</span> <span class="gtkdoc opt">(</span>video_window_handle <span class="gtkdoc opt">!=</span> <span class="number">0</span><span class="gtkdoc opt">) {</span> |
| GstVideoOverlay <span class="gtkdoc opt">*</span>overlay<span class="gtkdoc opt">;</span> |
| |
| <span class="gtkdoc slc">// GST_MESSAGE_SRC (message) will be the video sink element</span> |
| overlay <span class="gtkdoc opt">=</span> <span class="function">GST_VIDEO_OVERLAY</span> <span class="gtkdoc opt">(</span><span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GST-MESSAGE-SRC:CAPS">GST_MESSAGE_SRC</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">));</span> |
| <span class="function"><a href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle">gst_video_overlay_set_window_handle</a></span> <span class="gtkdoc opt">(</span>overlay<span class="gtkdoc opt">,</span> video_window_handle<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">}</span> <span class="keyword">else</span> <span class="gtkdoc opt">{</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Message-Logging.html#g-warning">g_warning</a></span> <span class="gtkdoc opt">(</span><span class="string">"Should have obtained video_window_handle by now!"</span><span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">}</span> |
| |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#gst-message-unref">gst_message_unref</a></span> <span class="gtkdoc opt">(</span>message<span class="gtkdoc opt">);</span> |
| <span class="keyword">return</span> GST_BUS_DROP<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">}</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc kwb">static void</span> |
| <span class="function">video_widget_realize_cb</span> <span class="gtkdoc opt">(</span>GtkWidget <span class="gtkdoc opt">*</span> widget<span class="gtkdoc opt">,</span> gpointer data<span class="gtkdoc opt">)</span> |
| <span class="gtkdoc opt">{</span> |
| <span class="gtkdoc ppc">#if GTK_CHECK_VERSION(2,18,0)</span> |
| <span class="gtkdoc slc">// Tell Gtk+/Gdk to create a native window for this widget instead of</span> |
| <span class="gtkdoc slc">// drawing onto the parent widget.</span> |
| <span class="gtkdoc slc">// This is here just for pedagogical purposes, GDK_WINDOW_XID will call</span> |
| <span class="gtkdoc slc">// it as well in newer Gtk versions</span> |
| <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="/usr/share/gtk-doc/html/gdk3gdk3-Windows.html#gdk-window-ensure-native">gdk_window_ensure_native</a></span> <span class="gtkdoc opt">(</span>widget<span class="gtkdoc opt">-></span>window<span class="gtkdoc opt">))</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Message-Logging.html#g-error">g_error</a></span> <span class="gtkdoc opt">(</span><span class="string">"Couldn't create native window needed for GstVideoOverlay!"</span><span class="gtkdoc opt">);</span> |
| <span class="gtkdoc ppc">#endif</span> |
| |
| <span class="gtkdoc ppc">#ifdef GDK_WINDOWING_X11</span> |
| <span class="gtkdoc opt">{</span> |
| gulong xid <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gdk3gdk3-X-Window-System-Interaction.html#GDK-WINDOW-XID:CAPS">GDK_WINDOW_XID</a></span> <span class="gtkdoc opt">(</span><span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-get-window">gtk_widget_get_window</a></span> <span class="gtkdoc opt">(</span>video_window<span class="gtkdoc opt">));</span> |
| video_window_handle <span class="gtkdoc opt">=</span> xid<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">}</span> |
| <span class="gtkdoc ppc">#endif</span> |
| <span class="gtkdoc ppc">#ifdef GDK_WINDOWING_WIN32</span> |
| <span class="gtkdoc opt">{</span> |
| HWND wnd <span class="gtkdoc opt">=</span> <span class="function">GDK_WINDOW_HWND</span> <span class="gtkdoc opt">(</span><span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-get-window">gtk_widget_get_window</a></span> <span class="gtkdoc opt">(</span>video_window<span class="gtkdoc opt">));</span> |
| video_window_handle <span class="gtkdoc opt">= (</span>guintptr<span class="gtkdoc opt">)</span> wnd<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">}</span> |
| <span class="gtkdoc ppc">#endif</span> |
| <span class="gtkdoc opt">}</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc kwb">int</span> |
| <span class="function">main</span> <span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span> <span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">**</span>argv<span class="gtkdoc opt">)</span> |
| <span class="gtkdoc opt">{</span> |
| GtkWidget <span class="gtkdoc opt">*</span>video_window<span class="gtkdoc opt">;</span> |
| GtkWidget <span class="gtkdoc opt">*</span>app_window<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">...</span> |
| app_window <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWindow.html#gtk-window-new">gtk_window_new</a></span> <span class="gtkdoc opt">(</span>GTK_WINDOW_TOPLEVEL<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| video_window <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkDrawingArea.html#gtk-drawing-area-new">gtk_drawing_area_new</a></span> <span class="gtkdoc opt">();</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gobjectgobject-Signals.html#g-signal-connect">g_signal_connect</a></span> <span class="gtkdoc opt">(</span>video_window<span class="gtkdoc opt">,</span> <span class="string">"realize"</span><span class="gtkdoc opt">,</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gobjectgobject-Closures.html#G-CALLBACK:CAPS">G_CALLBACK</a></span> <span class="gtkdoc opt">(</span>video_widget_realize_cb<span class="gtkdoc opt">),</span> NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-set-double-buffered">gtk_widget_set_double_buffered</a></span> <span class="gtkdoc opt">(</span>video_window<span class="gtkdoc opt">,</span> FALSE<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc slc">// usually the video_window will not be directly embedded into the</span> |
| <span class="gtkdoc slc">// application window like this, but there will be many other widgets</span> |
| <span class="gtkdoc slc">// and the video window will be embedded in one of them instead</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkContainer.html#gtk-container-add">gtk_container_add</a></span> <span class="gtkdoc opt">(</span><span class="function">GTK_CONTAINER</span> <span class="gtkdoc opt">(</span>ap_window<span class="gtkdoc opt">),</span> video_window<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc slc">// show the GUI</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-show-all">gtk_widget_show_all</a></span> <span class="gtkdoc opt">(</span>app_window<span class="gtkdoc opt">);</span> |
| |
| <span class="gtkdoc slc">// realize window now so that the video window gets created and we can</span> |
| <span class="gtkdoc slc">// obtain its XID/HWND before the pipeline is started up and the videosink</span> |
| <span class="gtkdoc slc">// asks for the XID/HWND of the window to render onto</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gtk3GtkWidget.html#gtk-widget-realize">gtk_widget_realize</a></span> <span class="gtkdoc opt">(</span>video_window<span class="gtkdoc opt">);</span> |
| |
| <span class="gtkdoc slc">// we should have the XID/HWND now</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Testing.html#g-assert">g_assert</a></span> <span class="gtkdoc opt">(</span>video_window_handle <span class="gtkdoc opt">!=</span> <span class="number">0</span><span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc slc">// set up sync handler for setting the xid once the pipeline is started</span> |
| bus <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPipeline.html#gst-pipeline-get-bus">gst_pipeline_get_bus</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_PIPELINE</span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">));</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#gst-bus-set-sync-handler">gst_bus_set_sync_handler</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">, (</span>GstBusSyncHandler<span class="gtkdoc opt">)</span> bus_sync_handler<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">,</span> |
| NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>bus<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-set-state">gst_element_set_state</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> GST_STATE_PLAYING<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc opt">...</span> |
| <span class="gtkdoc opt">}</span></pre></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <p> |
| </p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="id-1.2.15.17.8.5"></a><h3>GstVideoOverlay and Qt</h3> |
| <p> |
| </p> |
| <div class="informalexample"> |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> |
| <tbody> |
| <tr> |
| <td class="listing_lines" align="right"><pre>1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32 |
| 33 |
| 34 |
| 35 |
| 36 |
| 37 |
| 38 |
| 39 |
| 40 |
| 41 |
| 42 |
| 43 |
| 44 |
| 45 |
| 46 |
| 47 |
| 48 |
| 49 |
| 50 |
| 51 |
| 52 |
| 53</pre></td> |
| <td class="listing_code"><pre class="programlisting"><span class="gtkdoc ppc">#include <glib.h></span> |
| <span class="gtkdoc ppc">#include <gst/gst.h></span> |
| <span class="gtkdoc ppc">#include <gst/video/videooverlay.h></span> |
| |
| <span class="gtkdoc ppc">#include <QApplication></span> |
| <span class="gtkdoc ppc">#include <QTimer></span> |
| <span class="gtkdoc ppc">#include <QWidget></span> |
| |
| <span class="gtkdoc kwb">int</span> <span class="function">main</span><span class="gtkdoc opt">(</span><span class="gtkdoc kwb">int</span> argc<span class="gtkdoc opt">,</span> <span class="gtkdoc kwb">char</span> <span class="gtkdoc opt">*</span>argv<span class="gtkdoc opt">[])</span> |
| <span class="gtkdoc opt">{</span> |
| <span class="keyword">if</span> <span class="gtkdoc opt">(!</span><span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Deprecated-Thread-APIs.html#g-thread-supported">g_thread_supported</a></span> <span class="gtkdoc opt">())</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Deprecated-Thread-APIs.html#g-thread-init">g_thread_init</a></span> <span class="gtkdoc opt">(</span>NULL<span class="gtkdoc opt">);</span> |
| |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-Gst.html#gst-init">gst_init</a></span> <span class="gtkdoc opt">(&</span>argc<span class="gtkdoc opt">, &</span>argv<span class="gtkdoc opt">);</span> |
| QApplication <span class="function">app</span><span class="gtkdoc opt">(</span>argc<span class="gtkdoc opt">,</span> argv<span class="gtkdoc opt">);</span> |
| app<span class="gtkdoc opt">.</span><span class="function">connect</span><span class="gtkdoc opt">(&</span>app<span class="gtkdoc opt">,</span> <span class="function">SIGNAL</span><span class="gtkdoc opt">(</span><span class="function">lastWindowClosed</span><span class="gtkdoc opt">()), &</span>app<span class="gtkdoc opt">,</span> <span class="function">SLOT</span><span class="gtkdoc opt">(</span><span class="function">quit</span> <span class="gtkdoc opt">()));</span> |
| |
| <span class="gtkdoc slc">// prepare the pipeline</span> |
| |
| GstElement <span class="gtkdoc opt">*</span>pipeline <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPipeline.html#gst-pipeline-new">gst_pipeline_new</a></span> <span class="gtkdoc opt">(</span><span class="string">"xvoverlay"</span><span class="gtkdoc opt">);</span> |
| GstElement <span class="gtkdoc opt">*</span>src <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElementFactory.html#gst-element-factory-make">gst_element_factory_make</a></span> <span class="gtkdoc opt">(</span><span class="string">"videotestsrc"</span><span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span> |
| GstElement <span class="gtkdoc opt">*</span>sink <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElementFactory.html#gst-element-factory-make">gst_element_factory_make</a></span> <span class="gtkdoc opt">(</span><span class="string">"xvimagesink"</span><span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#gst-bin-add-many">gst_bin_add_many</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_BIN</span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">),</span> src<span class="gtkdoc opt">,</span> sink<span class="gtkdoc opt">,</span> NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-link">gst_element_link</a></span> <span class="gtkdoc opt">(</span>src<span class="gtkdoc opt">,</span> sink<span class="gtkdoc opt">);</span> |
| |
| <span class="gtkdoc slc">// prepare the ui</span> |
| |
| QWidget window<span class="gtkdoc opt">;</span> |
| window<span class="gtkdoc opt">.</span><span class="function">resize</span><span class="gtkdoc opt">(</span><span class="number">320</span><span class="gtkdoc opt">,</span> <span class="number">240</span><span class="gtkdoc opt">);</span> |
| window<span class="gtkdoc opt">.</span><span class="function">show</span><span class="gtkdoc opt">();</span> |
| |
| WId xwinid <span class="gtkdoc opt">=</span> window<span class="gtkdoc opt">.</span><span class="function">winId</span><span class="gtkdoc opt">();</span> |
| <span class="function"><a href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle">gst_video_overlay_set_window_handle</a></span> <span class="gtkdoc opt">(</span><span class="function">GST_VIDEO_OVERLAY</span> <span class="gtkdoc opt">(</span>sink<span class="gtkdoc opt">),</span> xwinid<span class="gtkdoc opt">);</span> |
| |
| <span class="gtkdoc slc">// run the pipeline</span> |
| |
| GstStateChangeReturn sret <span class="gtkdoc opt">=</span> <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-set-state">gst_element_set_state</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> |
| GST_STATE_PLAYING<span class="gtkdoc opt">);</span> |
| <span class="keyword">if</span> <span class="gtkdoc opt">(</span>sret <span class="gtkdoc opt">==</span> GST_STATE_CHANGE_FAILURE<span class="gtkdoc opt">) {</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-set-state">gst_element_set_state</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> GST_STATE_NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">);</span> |
| <span class="gtkdoc slc">// Exit application</span> |
| QTimer<span class="gtkdoc opt">::</span><span class="function">singleShot</span><span class="gtkdoc opt">(</span><span class="number">0</span><span class="gtkdoc opt">,</span> QApplication<span class="gtkdoc opt">::</span><span class="function">activeWindow</span><span class="gtkdoc opt">(),</span> <span class="function">SLOT</span><span class="gtkdoc opt">(</span><span class="function">quit</span><span class="gtkdoc opt">()));</span> |
| <span class="gtkdoc opt">}</span> |
| |
| <span class="gtkdoc kwb">int</span> ret <span class="gtkdoc opt">=</span> app<span class="gtkdoc opt">.</span><span class="function">exec</span><span class="gtkdoc opt">();</span> |
| |
| window<span class="gtkdoc opt">.</span><span class="function">hide</span><span class="gtkdoc opt">();</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-set-state">gst_element_set_state</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">,</span> GST_STATE_NULL<span class="gtkdoc opt">);</span> |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#gst-object-unref">gst_object_unref</a></span> <span class="gtkdoc opt">(</span>pipeline<span class="gtkdoc opt">);</span> |
| |
| <span class="keyword">return</span> ret<span class="gtkdoc opt">;</span> |
| <span class="gtkdoc opt">}</span></pre></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <p> |
| </p> |
| </div> |
| </div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.functions_details"></a><h2>Functions</h2> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-got-window-handle"></a><h3>gst_video_overlay_got_window_handle ()</h3> |
| <pre class="programlisting"><span class="returnvalue">void</span> |
| gst_video_overlay_got_window_handle (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);</pre> |
| <p>This will post a "have-window-handle" element message on the bus.</p> |
| <p>This function should only be used by video overlay plugin developers.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-got-window-handle.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> which got a window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>handle</p></td> |
| <td class="parameter_description"><p>a platform-specific handle referencing the window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-set-window-handle"></a><h3>gst_video_overlay_set_window_handle ()</h3> |
| <pre class="programlisting"><span class="returnvalue">void</span> |
| gst_video_overlay_set_window_handle (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guintptr"><span class="type">guintptr</span></a> handle</code></em>);</pre> |
| <p>This will call the video overlay's set_window_handle method. You |
| should use this method to tell to an overlay to display video output to a |
| specific window (e.g. an XWindow on X11). Passing 0 as the <em class="parameter"><code>handle</code></em> |
| will |
| tell the overlay to stop using that window and create an internal one.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-set-window-handle.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> to set the window on.</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>handle</p></td> |
| <td class="parameter_description"><p>a handle referencing the window.</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-prepare-window-handle"></a><h3>gst_video_overlay_prepare_window_handle ()</h3> |
| <pre class="programlisting"><span class="returnvalue">void</span> |
| gst_video_overlay_prepare_window_handle |
| (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>);</pre> |
| <p>This will post a "prepare-window-handle" element message on the bus |
| to give applications an opportunity to call |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a> before a plugin creates its own |
| window.</p> |
| <p>This function should only be used by video overlay plugin developers.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-prepare-window-handle.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody><tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> which does not yet have an Window handle set</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr></tbody> |
| </table></div> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-expose"></a><h3>gst_video_overlay_expose ()</h3> |
| <pre class="programlisting"><span class="returnvalue">void</span> |
| gst_video_overlay_expose (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>);</pre> |
| <p>Tell an overlay that it has been exposed. This will redraw the current frame |
| in the drawable even if the pipeline is PAUSED.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-expose.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody><tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> to expose.</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr></tbody> |
| </table></div> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-handle-events"></a><h3>gst_video_overlay_handle_events ()</h3> |
| <pre class="programlisting"><span class="returnvalue">void</span> |
| gst_video_overlay_handle_events (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> handle_events</code></em>);</pre> |
| <p>Tell an overlay that it should handle events from the window system. These |
| events are forwarded upstream as navigation events. In some window system, |
| events are not propagated in the window hierarchy if a client is listening |
| for them. This method allows you to disable events handling completely |
| from the <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a>.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-handle-events.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> to expose.</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>handle_events</p></td> |
| <td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> indicating if events should be handled or not.</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-video-overlay-set-render-rectangle"></a><h3>gst_video_overlay_set_render_rectangle ()</h3> |
| <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> |
| gst_video_overlay_set_render_rectangle |
| (<em class="parameter"><code><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> *overlay</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> x</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> y</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>, |
| <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a> height</code></em>);</pre> |
| <p>Configure a subregion as a video target within the window set by |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-set-window-handle" title="gst_video_overlay_set_window_handle ()"><code class="function">gst_video_overlay_set_window_handle()</code></a>. If this is not used or not supported |
| the video will fill the area of the window set as the overlay to 100%. |
| By specifying the rectangle, the video can be overlayed to a specific region |
| of that window only. After setting the new rectangle one should call |
| <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#gst-video-overlay-expose" title="gst_video_overlay_expose ()"><code class="function">gst_video_overlay_expose()</code></a> to force a redraw. To unset the region pass -1 for |
| the <em class="parameter"><code>width</code></em> |
| and <em class="parameter"><code>height</code></em> |
| parameters.</p> |
| <p>This method is needed for non fullscreen video overlay in UI toolkits that |
| do not support subwindows.</p> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-set-render-rectangle.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="parameter_name"><p>overlay</p></td> |
| <td class="parameter_description"><p>a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a></p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>x</p></td> |
| <td class="parameter_description"><p>the horizontal offset of the render area inside the window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>y</p></td> |
| <td class="parameter_description"><p>the vertical offset of the render area inside the window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>width</p></td> |
| <td class="parameter_description"><p>the width of the render area inside the window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="parameter_name"><p>height</p></td> |
| <td class="parameter_description"><p>the height of the render area inside the window</p></td> |
| <td class="parameter_annotations"> </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| <div class="refsect3"> |
| <a name="gst-video-overlay-set-render-rectangle.returns"></a><h4>Returns</h4> |
| <p> <a href="/usr/share/gtk-doc/html/glibglib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> if not supported by the sink.</p> |
| </div> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="gst-is-video-overlay-prepare-window-handle-message"></a><h3>gst_is_video_overlay_prepare_window_handle_message ()</h3> |
| <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> |
| gst_is_video_overlay_prepare_window_handle_message |
| (<em class="parameter"><code><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a> *msg</code></em>);</pre> |
| <p>Convenience function to check if the given message is a |
| "prepare-window-handle" message from a <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a>.</p> |
| <div class="refsect3"> |
| <a name="gst-is-video-overlay-prepare-window-handle-message.parameters"></a><h4>Parameters</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="150px" class="parameters_name"> |
| <col class="parameters_description"> |
| <col width="200px" class="parameters_annotations"> |
| </colgroup> |
| <tbody><tr> |
| <td class="parameter_name"><p>msg</p></td> |
| <td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GstMessage-struct"><span class="type">GstMessage</span></a></p></td> |
| <td class="parameter_annotations"> </td> |
| </tr></tbody> |
| </table></div> |
| </div> |
| <div class="refsect3"> |
| <a name="gst-is-video-overlay-prepare-window-handle-message.returns"></a><h4>Returns</h4> |
| <p> whether <em class="parameter"><code>msg</code></em> |
| is a "prepare-window-handle" message</p> |
| </div> |
| </div> |
| </div> |
| <div class="refsect1"> |
| <a name="gst-plugins-base-libs-gstvideooverlay.other_details"></a><h2>Types and Values</h2> |
| <div class="refsect2"> |
| <a name="GstVideoOverlay-struct"></a><h3>GstVideoOverlay</h3> |
| <pre class="programlisting">typedef struct _GstVideoOverlay GstVideoOverlay;</pre> |
| <p>Opaque <a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface structure</p> |
| </div> |
| <hr> |
| <div class="refsect2"> |
| <a name="GstVideoOverlayInterface"></a><h3>struct GstVideoOverlayInterface</h3> |
| <pre class="programlisting">struct GstVideoOverlayInterface { |
| GTypeInterface iface; |
| |
| /* virtual functions */ |
| void (*expose) (GstVideoOverlay *overlay); |
| |
| void (*handle_events) (GstVideoOverlay *overlay, gboolean handle_events); |
| |
| void (*set_render_rectangle) (GstVideoOverlay *overlay, |
| gint x, gint y, |
| gint width, gint height); |
| |
| void (*set_window_handle) (GstVideoOverlay *overlay, guintptr handle); |
| }; |
| </pre> |
| <p><a class="link" href="gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay"><span class="type">GstVideoOverlay</span></a> interface</p> |
| <div class="refsect3"> |
| <a name="GstVideoOverlayInterface.members"></a><h4>Members</h4> |
| <div class="informaltable"><table class="informaltable" width="100%" border="0"> |
| <colgroup> |
| <col width="300px" class="struct_members_name"> |
| <col class="struct_members_description"> |
| <col width="200px" class="struct_members_annotations"> |
| </colgroup> |
| <tbody> |
| <tr> |
| <td class="struct_member_name"><p><a href="/usr/share/gtk-doc/html/gobjectgobject-Type-Information.html#GTypeInterface"><span class="type">GTypeInterface</span></a> <em class="structfield"><code><a name="GstVideoOverlayInterface.iface"></a>iface</code></em>;</p></td> |
| <td class="struct_member_description"><p>parent interface type.</p></td> |
| <td class="struct_member_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoOverlayInterface.expose"></a>expose</code></em> ()</p></td> |
| <td class="struct_member_description"><p>virtual method to handle expose events</p></td> |
| <td class="struct_member_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoOverlayInterface.handle-events"></a>handle_events</code></em> ()</p></td> |
| <td class="struct_member_description"><p>virtual method to handle events</p></td> |
| <td class="struct_member_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoOverlayInterface.set-render-rectangle"></a>set_render_rectangle</code></em> ()</p></td> |
| <td class="struct_member_description"><p>virtual method to set the render rectangle</p></td> |
| <td class="struct_member_annotations"> </td> |
| </tr> |
| <tr> |
| <td class="struct_member_name"><p><em class="structfield"><code><a name="GstVideoOverlayInterface.set-window-handle"></a>set_window_handle</code></em> ()</p></td> |
| <td class="struct_member_description"><p>virtual method to configure the window handle</p></td> |
| <td class="struct_member_annotations"> </td> |
| </tr> |
| </tbody> |
| </table></div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="footer"> |
| <hr>Generated by GTK-Doc V1.25</div> |
| </body> |
| </html> |