1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>videomixer: GStreamer Good Plugins 1.0 Plugins Reference Manual</title> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="index.html" title="GStreamer Good Plugins 1.0 Plugins Reference Manual"> 8<link rel="up" href="ch01.html" title="gst-plugins-good Elements"> 9<link rel="prev" href="gst-plugins-good-plugins-videomedian.html" title="videomedian"> 10<link rel="next" href="gst-plugins-good-plugins-vp8dec.html" title="vp8dec"> 11<meta name="generator" content="GTK-Doc V1.28 (XML mode)"> 12<link rel="stylesheet" href="style.css" type="text/css"> 13</head> 14<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 15<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> 16<td width="100%" align="left" class="shortcuts"> 17<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> 18 <a href="#gst-plugins-good-plugins-videomixer.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> 19 <a href="#gst-plugins-good-plugins-videomixer.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span> 20 <a href="#gst-plugins-good-plugins-videomixer.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span> 21 <a href="#gst-plugins-good-plugins-videomixer.properties" class="shortcut">Properties</a></span> 22</td> 23<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> 24<td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> 25<td><a accesskey="p" href="gst-plugins-good-plugins-videomedian.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> 26<td><a accesskey="n" href="gst-plugins-good-plugins-vp8dec.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> 27</tr></table> 28<div class="refentry"> 29<a name="gst-plugins-good-plugins-videomixer"></a><div class="titlepage"></div> 30<div class="refnamediv"><table width="100%"><tr> 31<td valign="top"> 32<h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-videomixer.top_of_page"></a>videomixer</span></h2> 33<p>videomixer</p> 34</td> 35<td class="gallery_image" valign="top" align="right"></td> 36</tr></table></div> 37<div class="refsect1"> 38<a name="gst-plugins-good-plugins-videomixer.properties"></a><h2>Properties</h2> 39<div class="informaltable"><table class="informaltable" border="0"> 40<colgroup> 41<col width="150px" class="properties_type"> 42<col width="300px" class="properties_name"> 43<col width="200px" class="properties_flags"> 44</colgroup> 45<tbody><tr> 46<td class="property_type"><a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2Background" title="enum GstVideoMixer2Background"><span class="type">GstVideoMixer2Background</span></a></td> 47<td class="property_name"><a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2--background" title="The “background” property">background</a></td> 48<td class="property_flags">Read / Write</td> 49</tr></tbody> 50</table></div> 51</div> 52<a name="GstVideoMixer2"></a><div class="refsect1"> 53<a name="gst-plugins-good-plugins-videomixer.other"></a><h2>Types and Values</h2> 54<div class="informaltable"><table class="informaltable" width="100%" border="0"> 55<colgroup> 56<col width="150px" class="name"> 57<col class="description"> 58</colgroup> 59<tbody> 60<tr> 61<td class="datatype_keyword">struct</td> 62<td class="function_name"><a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2-struct" title="struct GstVideoMixer2">GstVideoMixer2</a></td> 63</tr> 64<tr> 65<td class="datatype_keyword">enum</td> 66<td class="function_name"><a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2Background" title="enum GstVideoMixer2Background">GstVideoMixer2Background</a></td> 67</tr> 68</tbody> 69</table></div> 70</div> 71<div class="refsect1"> 72<a name="gst-plugins-good-plugins-videomixer.object-hierarchy"></a><h2>Object Hierarchy</h2> 73<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GObject-struct">GObject</a> 74 <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobject/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> 75 <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstObject.html#GstObject-struct">GstObject</a> 76 <span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct">GstElement</a> 77 <span class="lineart">╰──</span> GstVideoMixer2 78</pre> 79</div> 80<div class="refsect1"> 81<a name="gst-plugins-good-plugins-videomixer.implemented-interfaces"></a><h2>Implemented Interfaces</h2> 82<p> 83GstVideoMixer2 implements 84 <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstChildProxy.html#GstChildProxy-struct">GstChildProxy</a>.</p> 85</div> 86<div class="refsect1"> 87<a name="gst-plugins-good-plugins-videomixer.description"></a><h2>Description</h2> 88<p>Videomixer can accept AYUV, ARGB and BGRA video streams. For each of the requested 89sink pads it will compare the incoming geometry and framerate to define the 90output parameters. Indeed output video frames will have the geometry of the 91biggest incoming video stream and the framerate of the fastest incoming one.</p> 92<p>Videomixer will do colorspace conversion.</p> 93<p>Individual parameters for each input stream can be configured on the 94<span class="type">GstVideoMixer2Pad</span>.</p> 95<div class="refsect2"> 96<a name="id-1.2.270.8.5"></a><h3>Sample pipelines</h3> 97<div class="informalexample"> 98 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> 99 <tbody> 100 <tr> 101 <td class="listing_lines" align="right"><pre>1 1022 1033 1044 1055 1066 1077 1088</pre></td> 109 <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> \ 110 videotestsrc pattern<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> \ 111 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>AYUV<span class="gtkdoc opt">,</span>framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">10</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">100</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> \ 112 videobox border<span class="gtkdoc opt">-</span>alpha<span class="gtkdoc opt">=</span><span class="number">0</span> top<span class="gtkdoc opt">=-</span><span class="number">70</span> bottom<span class="gtkdoc opt">=-</span><span class="number">70</span> right<span class="gtkdoc opt">=-</span><span class="number">220</span> <span class="gtkdoc opt">!</span> \ 113 videomixer name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc kwc">sink_0</span><span class="gtkdoc opt">::</span>alpha<span class="gtkdoc opt">=</span><span class="number">0.7</span> <span class="gtkdoc kwc">sink_1</span><span class="gtkdoc opt">::</span>alpha<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc opt">!</span> \ 114 videoconvert <span class="gtkdoc opt">!</span> xvimagesink \ 115 videotestsrc <span class="gtkdoc opt">!</span> \ 116 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>AYUV<span class="gtkdoc opt">,</span>framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">5</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span>width<span class="gtkdoc opt">=</span><span class="number">320</span><span class="gtkdoc opt">,</span>height<span class="gtkdoc opt">=</span><span class="number">240</span> <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span></pre></td> 117 </tr> 118 </tbody> 119 </table> 120</div> 121 A pipeline to demonstrate videomixer used together with videobox. 122This should show a 320x240 pixels video test source with some transparency 123showing the background checker pattern. Another video test source with just 124the snow pattern of 100x100 pixels is overlaid on top of the first one on 125the left vertically centered with a small transparency showing the first 126video test source behind and the checker pattern under it. Note that the 127framerate of the output video is 10 frames per second. 128<div class="informalexample"> 129 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> 130 <tbody> 131 <tr> 132 <td class="listing_lines" align="right"><pre>1 1332 1343 1354 1365</pre></td> 137 <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc pattern<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> \ 138 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">10</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">100</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> \ 139 videomixer name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> ximagesink \ 140 videotestsrc <span class="gtkdoc opt">!</span> \ 141 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">5</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">320</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">240</span> <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span></pre></td> 142 </tr> 143 </tbody> 144 </table> 145</div> 146 A pipeline to demostrate bgra mixing. (This does not demonstrate alpha blending). 147<div class="informalexample"> 148 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> 149 <tbody> 150 <tr> 151 <td class="listing_lines" align="right"><pre>1 1522 1533 1544 1555</pre></td> 156 <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc pattern<span class="gtkdoc opt">=</span><span class="number">1</span> <span class="gtkdoc opt">!</span> \ 157 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format <span class="gtkdoc opt">=</span>I420<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">10</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">100</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">100</span> <span class="gtkdoc opt">!</span> \ 158 videomixer name<span class="gtkdoc opt">=</span>mix <span class="gtkdoc opt">!</span> videoconvert <span class="gtkdoc opt">!</span> ximagesink \ 159 videotestsrc <span class="gtkdoc opt">!</span> \ 160 video<span class="gtkdoc opt">/</span>x<span class="gtkdoc opt">-</span>raw<span class="gtkdoc opt">,</span>format<span class="gtkdoc opt">=</span>I420<span class="gtkdoc opt">,</span> framerate<span class="gtkdoc opt">=</span>\<span class="gtkdoc opt">(</span>fraction\<span class="gtkdoc opt">)</span><span class="number">5</span><span class="gtkdoc opt">/</span><span class="number">1</span><span class="gtkdoc opt">,</span> width<span class="gtkdoc opt">=</span><span class="number">320</span><span class="gtkdoc opt">,</span> height<span class="gtkdoc opt">=</span><span class="number">240</span> <span class="gtkdoc opt">!</span> mix<span class="gtkdoc opt">.</span></pre></td> 161 </tr> 162 </tbody> 163 </table> 164</div> 165 A pipeline to test I420 166<div class="informalexample"> 167 <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> 168 <tbody> 169 <tr> 170 <td class="listing_lines" align="right"><pre>1 1712 1723 1734 1745 1756 1767 1778</pre></td> 178 <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videomixer name<span class="gtkdoc opt">=</span>mixer <span class="gtkdoc kwc">sink_1</span><span class="gtkdoc opt">::</span>alpha<span class="gtkdoc opt">=</span><span class="number">0.5</span> <span class="gtkdoc kwc">sink_1</span><span class="gtkdoc opt">::</span>xpos<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc kwc">sink_1</span><span class="gtkdoc opt">::</span>ypos<span class="gtkdoc opt">=</span><span class="number">50</span> <span class="gtkdoc opt">!</span> \ 179 videoconvert <span class="gtkdoc opt">!</span> ximagesink \ 180 videotestsrc pattern<span class="gtkdoc opt">=</span>snow timestamp<span class="gtkdoc opt">-</span>offset<span class="gtkdoc opt">=</span><span class="number">3000000000</span> <span class="gtkdoc opt">!</span> \ 181 <span class="string">"video/x-raw,format=AYUV,width=640,height=480,framerate=(fraction)30/1"</span> <span class="gtkdoc opt">!</span> \ 182 timeoverlay <span class="gtkdoc opt">!</span> queue2 <span class="gtkdoc opt">!</span> mixer<span class="gtkdoc opt">.</span> \ 183 videotestsrc pattern<span class="gtkdoc opt">=</span>smpte <span class="gtkdoc opt">!</span> \ 184 <span class="string">"video/x-raw,format=AYUV,width=800,height=600,framerate=(fraction)10/1"</span> <span class="gtkdoc opt">!</span> \ 185 timeoverlay <span class="gtkdoc opt">!</span> queue2 <span class="gtkdoc opt">!</span> mixer<span class="gtkdoc opt">.</span></pre></td> 186 </tr> 187 </tbody> 188 </table> 189</div> 190 A pipeline to demonstrate synchronized mixing (the second stream starts after 3 seconds) 191</div> 192<div class="refsynopsisdiv"> 193<h2>Synopsis</h2> 194<div class="refsect2"> 195<a name="id-1.2.270.8.6.1"></a><h3>Element Information</h3> 196<div class="variablelist"><table border="0" class="variablelist"> 197<colgroup> 198<col align="left" valign="top"> 199<col> 200</colgroup> 201<tbody> 202<tr> 203<td><p><span class="term">plugin</span></p></td> 204<td> 205 <a class="link" href="gst-plugins-good-plugins-plugin-videomixer.html#plugin-videomixer">videomixer</a> 206 </td> 207</tr> 208<tr> 209<td><p><span class="term">author</span></p></td> 210<td>Wim Taymans <wim@fluendo.com>, Sebastian Dröge <sebastian.droege@collabora.co.uk></td> 211</tr> 212<tr> 213<td><p><span class="term">class</span></p></td> 214<td>Filter/Editor/Video/Compositor</td> 215</tr> 216</tbody> 217</table></div> 218</div> 219<hr> 220<div class="refsect2"> 221<a name="id-1.2.270.8.6.2"></a><h3>Element Pads</h3> 222<div class="variablelist"><table border="0" class="variablelist"> 223<colgroup> 224<col align="left" valign="top"> 225<col> 226</colgroup> 227<tbody> 228<tr> 229<td><p><span class="term">name</span></p></td> 230<td>sink_%u</td> 231</tr> 232<tr> 233<td><p><span class="term">direction</span></p></td> 234<td>sink</td> 235</tr> 236<tr> 237<td><p><span class="term">presence</span></p></td> 238<td>request</td> 239</tr> 240<tr> 241<td><p><span class="term">details</span></p></td> 242<td>video/x-raw, format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td> 243</tr> 244</tbody> 245</table></div> 246<div class="variablelist"><table border="0" class="variablelist"> 247<colgroup> 248<col align="left" valign="top"> 249<col> 250</colgroup> 251<tbody> 252<tr> 253<td><p><span class="term">name</span></p></td> 254<td>src</td> 255</tr> 256<tr> 257<td><p><span class="term">direction</span></p></td> 258<td>source</td> 259</tr> 260<tr> 261<td><p><span class="term">presence</span></p></td> 262<td>always</td> 263</tr> 264<tr> 265<td><p><span class="term">details</span></p></td> 266<td>video/x-raw, format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</td> 267</tr> 268</tbody> 269</table></div> 270</div> 271</div> 272</div> 273<div class="refsect1"> 274<a name="gst-plugins-good-plugins-videomixer.functions_details"></a><h2>Functions</h2> 275<p></p> 276</div> 277<div class="refsect1"> 278<a name="gst-plugins-good-plugins-videomixer.other_details"></a><h2>Types and Values</h2> 279<div class="refsect2"> 280<a name="GstVideoMixer2-struct"></a><h3>struct GstVideoMixer2</h3> 281<pre class="programlisting">struct GstVideoMixer2;</pre> 282<p>The opaque <a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2"><span class="type">GstVideoMixer2</span></a> structure.</p> 283</div> 284<hr> 285<div class="refsect2"> 286<a name="GstVideoMixer2Background"></a><h3>enum GstVideoMixer2Background</h3> 287<p>The different backgrounds videomixer can blend over.</p> 288<div class="refsect3"> 289<a name="GstVideoMixer2Background.members"></a><h4>Members</h4> 290<div class="informaltable"><table class="informaltable" width="100%" border="0"> 291<colgroup> 292<col width="300px" class="enum_members_name"> 293<col class="enum_members_description"> 294<col width="200px" class="enum_members_annotations"> 295</colgroup> 296<tbody> 297<tr> 298<td class="enum_member_name"><p><a name="VIDEO-MIXER2-BACKGROUND-CHECKER:CAPS"></a>VIDEO_MIXER2_BACKGROUND_CHECKER</p></td> 299<td class="enum_member_description"> 300<p>checker pattern background</p> 301</td> 302<td class="enum_member_annotations"> </td> 303</tr> 304<tr> 305<td class="enum_member_name"><p><a name="VIDEO-MIXER2-BACKGROUND-BLACK:CAPS"></a>VIDEO_MIXER2_BACKGROUND_BLACK</p></td> 306<td class="enum_member_description"> 307<p>solid color black background</p> 308</td> 309<td class="enum_member_annotations"> </td> 310</tr> 311<tr> 312<td class="enum_member_name"><p><a name="VIDEO-MIXER2-BACKGROUND-WHITE:CAPS"></a>VIDEO_MIXER2_BACKGROUND_WHITE</p></td> 313<td class="enum_member_description"> 314<p>solid color white background</p> 315</td> 316<td class="enum_member_annotations"> </td> 317</tr> 318<tr> 319<td class="enum_member_name"><p><a name="VIDEO-MIXER2-BACKGROUND-TRANSPARENT:CAPS"></a>VIDEO_MIXER2_BACKGROUND_TRANSPARENT</p></td> 320<td class="enum_member_description"> 321<p>background is left transparent and layers are composited using "A OVER B" composition rules. This is only applicable to AYUV and ARGB (and variants) as it preserves the alpha channel and allows for further mixing.</p> 322</td> 323<td class="enum_member_annotations"> </td> 324</tr> 325</tbody> 326</table></div> 327</div> 328</div> 329</div> 330<div class="refsect1"> 331<a name="gst-plugins-good-plugins-videomixer.property-details"></a><h2>Property Details</h2> 332<div class="refsect2"> 333<a name="GstVideoMixer2--background"></a><h3>The <code class="literal">“background”</code> property</h3> 334<pre class="programlisting"> “background” <a class="link" href="gst-plugins-good-plugins-videomixer.html#GstVideoMixer2Background" title="enum GstVideoMixer2Background"><span class="type">GstVideoMixer2Background</span></a></pre> 335<p>Background type.</p> 336<p>Flags: Read / Write</p> 337<p>Default value: Checker pattern</p> 338</div> 339</div> 340</div> 341<div class="footer"> 342<hr>Generated by GTK-Doc V1.28</div> 343</body> 344</html>