<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.3"/> <title>gavl: Image transformation</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">gavl </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.3 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Image transformation<div class="ingroups"><a class="el" href="group__video.html">Video</a></div></div> </div> </div><!--header--> <div class="contents"> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:ga3120d630e0d9e646dec2d0339cc4ea84"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/> gavl_image_transform_s </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a></td></tr> <tr class="memdesc:ga3120d630e0d9e646dec2d0339cc4ea84"><td class="mdescLeft"> </td><td class="mdescRight">Opaque image transformation engine. <a href="#ga3120d630e0d9e646dec2d0339cc4ea84"></a><br/></td></tr> <tr class="separator:ga3120d630e0d9e646dec2d0339cc4ea84"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga552c34a8f2c3634c887b82ca983d09af"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#ga552c34a8f2c3634c887b82ca983d09af">gavl_image_transform_func</a> )(void *priv, double xdst, double ydst, double *xsrc, double *ysrc)</td></tr> <tr class="memdesc:ga552c34a8f2c3634c887b82ca983d09af"><td class="mdescLeft"> </td><td class="mdescRight">Function describing the method. <a href="#ga552c34a8f2c3634c887b82ca983d09af"></a><br/></td></tr> <tr class="separator:ga552c34a8f2c3634c887b82ca983d09af"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:gafbfafaba59871814fffd576c14182f63"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC <br class="typebreak"/> <a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#gafbfafaba59871814fffd576c14182f63">gavl_image_transform_create</a> ()</td></tr> <tr class="memdesc:gafbfafaba59871814fffd576c14182f63"><td class="mdescLeft"> </td><td class="mdescRight">Create a transformation engine. <a href="#gafbfafaba59871814fffd576c14182f63"></a><br/></td></tr> <tr class="separator:gafbfafaba59871814fffd576c14182f63"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga0951eeb569f7adebc2354336e54ca0c8"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#ga0951eeb569f7adebc2354336e54ca0c8">gavl_image_transform_destroy</a> (<a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> *t)</td></tr> <tr class="memdesc:ga0951eeb569f7adebc2354336e54ca0c8"><td class="mdescLeft"> </td><td class="mdescRight">Destroy a transformation engine. <a href="#ga0951eeb569f7adebc2354336e54ca0c8"></a><br/></td></tr> <tr class="separator:ga0951eeb569f7adebc2354336e54ca0c8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga1750362e810cd5b9c1c7f896425ee3da"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#ga1750362e810cd5b9c1c7f896425ee3da">gavl_image_transform_init</a> (<a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> *t, <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> *format, <a class="el" href="group__video__transform.html#ga552c34a8f2c3634c887b82ca983d09af">gavl_image_transform_func</a> func, void *priv)</td></tr> <tr class="memdesc:ga1750362e810cd5b9c1c7f896425ee3da"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a transformation engine. <a href="#ga1750362e810cd5b9c1c7f896425ee3da"></a><br/></td></tr> <tr class="separator:ga1750362e810cd5b9c1c7f896425ee3da"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaaa9cc51e17e44df2aa690f809154efa4"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#gaaa9cc51e17e44df2aa690f809154efa4">gavl_image_transform_transform</a> (<a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> *t, <a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> *in_frame, <a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> *out_frame)</td></tr> <tr class="memdesc:gaaa9cc51e17e44df2aa690f809154efa4"><td class="mdescLeft"> </td><td class="mdescRight">Transform an image. <a href="#gaaa9cc51e17e44df2aa690f809154efa4"></a><br/></td></tr> <tr class="separator:gaaa9cc51e17e44df2aa690f809154efa4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga1e9c5da19cd723c731fb000e06c48413"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC <a class="el" href="group__video__options.html#ga661526ac8e31c3a162f8607c2bcda6ee">gavl_video_options_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__transform.html#ga1e9c5da19cd723c731fb000e06c48413">gavl_image_transform_get_options</a> (<a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> *t)</td></tr> <tr class="memdesc:ga1e9c5da19cd723c731fb000e06c48413"><td class="mdescLeft"> </td><td class="mdescRight">Get transformation options. <a href="#ga1e9c5da19cd723c731fb000e06c48413"></a><br/></td></tr> <tr class="separator:ga1e9c5da19cd723c731fb000e06c48413"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>gavl includes a generic image transformation engine. You pass a function pointer to the init function, which transforms the destination coordinates into source coordinates.</p> <p>The interpolation method is set with <a class="el" href="group__video__options.html#ga48a1e385dc969adb7ae7a559ff90eda5">gavl_video_options_set_scale_mode</a>, but not all modes are supported. When initialized with an invalid scale mode, the transformation engine will silently choose the closest one. </p> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="ga3120d630e0d9e646dec2d0339cc4ea84"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct gavl_image_transform_s <a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a></td> </tr> </table> </div><div class="memdoc"> <p>Opaque image transformation engine. </p> <p>You don't want to know what's inside. </p> </div> </div> <a class="anchor" id="ga552c34a8f2c3634c887b82ca983d09af"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* gavl_image_transform_func)(void *priv, double xdst, double ydst, double *xsrc, double *ysrc)</td> </tr> </table> </div><div class="memdoc"> <p>Function describing the method. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">priv</td><td>User data </td></tr> <tr><td class="paramname">xdst</td><td>X-coordinate of the destination </td></tr> <tr><td class="paramname">ydst</td><td>Y-coordinate of the destination </td></tr> <tr><td class="paramname">xsrc</td><td>Returns X-coordinate of the source </td></tr> <tr><td class="paramname">ysrc</td><td>Returns Y-coordinate of the source</td></tr> </table> </dd> </dl> <p>All coordinates are in fractional pixels. 0,0 is the upper left corner. Return negative values or values larger than the dimesion to signal that a pixel is outside the source image. </p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="gafbfafaba59871814fffd576c14182f63"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC <a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a>* gavl_image_transform_create </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Create a transformation engine. </p> <dl class="section return"><dt>Returns</dt><dd>A newly allocated transformation engine</dd></dl> <p>Since 1.1.0. </p> </div> </div> <a class="anchor" id="ga0951eeb569f7adebc2354336e54ca0c8"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_image_transform_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> * </td> <td class="paramname"><em>t</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Destroy a transformation engine. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">t</td><td>A transformation engine Since 1.1.0. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga1750362e810cd5b9c1c7f896425ee3da"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC int gavl_image_transform_init </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> * </td> <td class="paramname"><em>t</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> * </td> <td class="paramname"><em>format</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__video__transform.html#ga552c34a8f2c3634c887b82ca983d09af">gavl_image_transform_func</a> </td> <td class="paramname"><em>func</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>priv</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Initialize a transformation engine. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">t</td><td>A transformation engine </td></tr> <tr><td class="paramname">format</td><td>Format (can be changed) </td></tr> <tr><td class="paramname">func</td><td>Coordinate transform function </td></tr> <tr><td class="paramname">priv</td><td>The priv argument for func </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>1 if the transform was sucessfully initialized, 0 else.</dd></dl> <p>If you enabled multithreading support, func will be called from multiple threads at the same time. Make sure, that it doesn't access any global data.</p> <p>Return type was changed from void to in in version 1.1.2 Under normal circumstances, this function always returns 1.</p> <p>Since 1.1.0. </p> </div> </div> <a class="anchor" id="gaaa9cc51e17e44df2aa690f809154efa4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_image_transform_transform </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> * </td> <td class="paramname"><em>t</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> * </td> <td class="paramname"><em>in_frame</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> * </td> <td class="paramname"><em>out_frame</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Transform an image. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">t</td><td>A transformation engine </td></tr> <tr><td class="paramname">in_frame</td><td>Input frame </td></tr> <tr><td class="paramname">out_frame</td><td>Output frame Since 1.1.0. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga1e9c5da19cd723c731fb000e06c48413"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC <a class="el" href="group__video__options.html#ga661526ac8e31c3a162f8607c2bcda6ee">gavl_video_options_t</a>* gavl_image_transform_get_options </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__transform.html#ga3120d630e0d9e646dec2d0339cc4ea84">gavl_image_transform_t</a> * </td> <td class="paramname"><em>t</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Get transformation options. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">t</td><td>A transformation engine </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>Options</dd></dl> <p>After you called this, you can use the gavl_video_options_set_*() functions to change the options. Options will become valid with the next call to <a class="el" href="group__video__transform.html#ga1750362e810cd5b9c1c7f896425ee3da">gavl_image_transform_init</a>.</p> <p>Since 1.1.0. </p> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Fri Jan 11 2013 22:07:38 for gavl by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.3 </small></address> </body> </html>