blob: deededbe5aa61aa5086c34338e43e1e6c0aeb85b [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>videorate: GStreamer Base Plugins 1.0 Plugins 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 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-base Elements">
<link rel="prev" href="gst-plugins-base-plugins-videoconvert.html" title="videoconvert">
<link rel="next" href="gst-plugins-base-plugins-videoscale.html" title="videoscale">
<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-plugins-videorate.description" class="shortcut">Description</a></span><span id="nav_hierarchy">  <span class="dim">|</span> 
<a href="#gst-plugins-base-plugins-videorate.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties">  <span class="dim">|</span> 
<a href="#gst-plugins-base-plugins-videorate.properties" class="shortcut">Properties</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="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="gst-plugins-base-plugins-videoconvert.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="gst-plugins-base-plugins-videoscale.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-plugins-videorate"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-videorate.top_of_page"></a>videorate</span></h2>
<p>videorate</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.properties"></a><h2>Properties</h2>
<div class="informaltable"><table class="informaltable" border="0">
<colgroup>
<col width="150px" class="properties_type">
<col width="300px" class="properties_name">
<col width="200px" class="properties_flags">
</colgroup>
<tbody>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--average-period" title="The “average-period” property">average-period</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title="The “drop” property">drop</a></td>
<td class="property_flags">Read</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop-only" title="The “drop-only” property">drop-only</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title="The “duplicate” property">duplicate</a></td>
<td class="property_flags">Read</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--in" title="The “in” property">in</a></td>
<td class="property_flags">Read</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--max-rate" title="The “max-rate” property">max-rate</a></td>
<td class="property_flags">Read / Write / Construct</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--new-pref" title="The “new-pref” property">new-pref</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--out" title="The “out” property">out</a></td>
<td class="property_flags">Read</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent" title="The “silent” property">silent</a></td>
<td class="property_flags">Read / Write</td>
</tr>
<tr>
<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
<td class="property_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--skip-to-first" title="The “skip-to-first” property">skip-to-first</a></td>
<td class="property_flags">Read / Write</td>
</tr>
</tbody>
</table></div>
</div>
<a name="GstVideoRate"></a><div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.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">struct</td>
<td class="function_name"><a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate-struct" title="struct GstVideoRate">GstVideoRate</a></td>
</tr></tbody>
</table></div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GObject-struct">GObject</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gobjectgobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstObject.html#GstObject-struct">GstObject</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#GstElement-struct">GstElement</a>
<span class="lineart">╰──</span> <a href="/usr/share/gtk-doc/html/gstreamer-libs-1.0GstBaseTransform.html#GstBaseTransform-struct">GstBaseTransform</a>
<span class="lineart">╰──</span> GstVideoRate
</pre>
</div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.description"></a><h2>Description</h2>
<p>This element takes an incoming stream of timestamped video frames.
It will produce a perfect stream that matches the source pad's framerate.</p>
<p>The correction is performed by dropping and duplicating frames, no fancy
algorithm is used to interpolate frames (yet).</p>
<p>By default the element will simply negotiate the same framerate on its
source and sink pad.</p>
<p>This operation is useful to link to elements that require a perfect stream.
Typical examples are formats that do not store timestamps for video frames,
but only store a framerate, like Ogg and AVI.</p>
<p>A conversion to a specific framerate can be forced by using filtered caps on
the source pad.</p>
<p>The properties <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--in" title="The “in” property"><span class="type">“in”</span></a>, <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--out" title="The “out” property"><span class="type">“out”</span></a>, <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title="The “duplicate” property"><span class="type">“duplicate”</span></a>
and <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title="The “drop” property"><span class="type">“drop”</span></a> can be read to obtain information about number of
input frames, output frames, dropped frames (i.e. the number of unused input
frames) and duplicated frames (i.e. the number of times an input frame was
duplicated, beside being used normally).</p>
<p>An input stream that needs no adjustments will thus never have dropped or
duplicated frames.</p>
<p>When the <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--silent" title="The “silent” property"><span class="type">“silent”</span></a> property is set to FALSE, a GObject property
notification will be emitted whenever one of the <a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--duplicate" title="The “duplicate” property"><span class="type">“duplicate”</span></a> or
<a class="link" href="gst-plugins-base-plugins-videorate.html#GstVideoRate--drop" title="The “drop” property"><span class="type">“drop”</span></a> values changes.
This can potentially cause performance degradation.
Note that property notification will happen from the streaming thread, so
applications should be prepared for this.</p>
<div class="refsect2">
<a name="id-1.2.54.7.10"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
<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> <span class="gtkdoc opt">-</span>v uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=15/1 ! autovideosink</span></pre></td>
</tr>
</tbody>
</table>
</div>
Decode a video file and adjust the framerate to 15 fps before playing.
To create a test Ogg/Theora file refer to the documentation of theoraenc.
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
<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> <span class="gtkdoc opt">-</span>v v4l2src <span class="gtkdoc opt">!</span> videorate <span class="gtkdoc opt">!</span> 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="number">25</span><span class="gtkdoc opt">/</span><span class="number">2</span> <span class="gtkdoc opt">!</span> theoraenc <span class="gtkdoc opt">!</span> oggmux <span class="gtkdoc opt">!</span> filesink location<span class="gtkdoc opt">=</span>recording<span class="gtkdoc opt">.</span>ogg</pre></td>
</tr>
</tbody>
</table>
</div>
Capture video from a V4L device, and adjust the stream to 12.5 fps before
encoding to Ogg/Theora.
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="listing_lines" align="right"><pre>1</pre></td>
<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> <span class="gtkdoc opt">-</span>v uridecodebin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.ogg ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=1/5 ! jpegenc ! multifilesink location=snapshot-%05d.jpg</span></pre></td>
</tr>
</tbody>
</table>
</div>
Decode a video file and save a snapshot every 5 seconds as consecutively numbered jpeg file.
</div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
<a name="id-1.2.54.7.11.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">plugin</span></p></td>
<td>
<a class="link" href="gst-plugins-base-plugins-plugin-videorate.html#plugin-videorate">videorate</a>
</td>
</tr>
<tr>
<td><p><span class="term">author</span></p></td>
<td>Wim Taymans &lt;wim@fluendo.com&gt;</td>
</tr>
<tr>
<td><p><span class="term">class</span></p></td>
<td>Filter/Effect/Video</td>
</tr>
</tbody>
</table></div>
</div>
<hr>
<div class="refsect2">
<a name="id-1.2.54.7.11.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">name</span></p></td>
<td>sink</td>
</tr>
<tr>
<td><p><span class="term">direction</span></p></td>
<td>sink</td>
</tr>
<tr>
<td><p><span class="term">presence</span></p></td>
<td>always</td>
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
<td>video/x-raw(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> video/x-bayer(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> image/jpeg(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> image/png(ANY)</td>
</tr>
</tbody>
</table></div>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term">name</span></p></td>
<td>src</td>
</tr>
<tr>
<td><p><span class="term">direction</span></p></td>
<td>source</td>
</tr>
<tr>
<td><p><span class="term">presence</span></p></td>
<td>always</td>
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
<td>video/x-raw(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> video/x-bayer(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> image/jpeg(ANY)</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
<td> image/png(ANY)</td>
</tr>
</tbody>
</table></div>
</div>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.functions_details"></a><h2>Functions</h2>
<p></p>
</div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
<a name="GstVideoRate-struct"></a><h3>struct GstVideoRate</h3>
<pre class="programlisting">struct GstVideoRate;</pre>
<p>Opaque data structure.</p>
</div>
</div>
<div class="refsect1">
<a name="gst-plugins-base-plugins-videorate.property-details"></a><h2>Property Details</h2>
<div class="refsect2">
<a name="GstVideoRate--average-period"></a><h3>The <code class="literal">“average-period”</code> property</h3>
<pre class="programlisting"> “average-period” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
<p>Arrange for maximum framerate by dropping frames beyond a certain framerate,
where the framerate is calculated using a moving average over the
configured.</p>
<p>Flags: Read / Write</p>
<p>Allowed values: &lt;= G_MAXLONG</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--drop"></a><h3>The <code class="literal">“drop”</code> property</h3>
<pre class="programlisting"> “drop” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
<p>Number of dropped frames.</p>
<p>Flags: Read</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--drop-only"></a><h3>The <code class="literal">“drop-only”</code> property</h3>
<pre class="programlisting"> “drop-only” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
<p>Only drop frames, no duplicates are produced.</p>
<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--duplicate"></a><h3>The <code class="literal">“duplicate”</code> property</h3>
<pre class="programlisting"> “duplicate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
<p>Number of duplicated frames.</p>
<p>Flags: Read</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--in"></a><h3>The <code class="literal">“in”</code> property</h3>
<pre class="programlisting"> “in” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
<p>Number of input frames.</p>
<p>Flags: Read</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--max-rate"></a><h3>The <code class="literal">“max-rate”</code> property</h3>
<pre class="programlisting"> “max-rate” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gint"><span class="type">gint</span></a></pre>
<p>maximum framerate to pass through</p>
<p>Flags: Read / Write / Construct</p>
<p>Allowed values: &gt;= 1</p>
<p>Default value: 2147483647</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--new-pref"></a><h3>The <code class="literal">“new-pref”</code> property</h3>
<pre class="programlisting"> “new-pref” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gdouble"><span class="type">gdouble</span></a></pre>
<p>Value indicating how much to prefer new frames (unused).</p>
<p>Flags: Read / Write</p>
<p>Allowed values: [0,1]</p>
<p>Default value: 1</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--out"></a><h3>The <code class="literal">“out”</code> property</h3>
<pre class="programlisting"> “out” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint64"><span class="type">guint64</span></a></pre>
<p>Number of output frames.</p>
<p>Flags: Read</p>
<p>Default value: 0</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--silent"></a><h3>The <code class="literal">“silent”</code> property</h3>
<pre class="programlisting"> “silent” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
<p>Don't emit notify for dropped and duplicated frames.</p>
<p>Flags: Read / Write</p>
<p>Default value: TRUE</p>
</div>
<hr>
<div class="refsect2">
<a name="GstVideoRate--skip-to-first"></a><h3>The <code class="literal">“skip-to-first”</code> property</h3>
<pre class="programlisting"> “skip-to-first” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
<p>Don't produce buffers before the first one we receive.</p>
<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
</div>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25</div>
</body>
</html>