<!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: Scaler</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">Scaler<div class="ingroups"><a class="el" href="group__video.html">Video</a></div></div> </div> </div><!--header--> <div class="contents"> <p>Video scaler. <a href="#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:ga8b4210889926401c0af62a9c423e14ab"><td class="memItemLeft" align="right" valign="top">typedef struct gavl_video_scaler_s </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a></td></tr> <tr class="memdesc:ga8b4210889926401c0af62a9c423e14ab"><td class="mdescLeft"> </td><td class="mdescRight">Opaque scaler structure. <a href="#ga8b4210889926401c0af62a9c423e14ab"></a><br/></td></tr> <tr class="separator:ga8b4210889926401c0af62a9c423e14ab"><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:ga65a5adb9b0ec0c47177d858f4b9841a3"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC <a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#ga65a5adb9b0ec0c47177d858f4b9841a3">gavl_video_scaler_create</a> ()</td></tr> <tr class="memdesc:ga65a5adb9b0ec0c47177d858f4b9841a3"><td class="mdescLeft"> </td><td class="mdescRight">Create a video scaler. <a href="#ga65a5adb9b0ec0c47177d858f4b9841a3"></a><br/></td></tr> <tr class="separator:ga65a5adb9b0ec0c47177d858f4b9841a3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga4913e9fbbce90576e3f73e4b910bf74f"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#ga4913e9fbbce90576e3f73e4b910bf74f">gavl_video_scaler_destroy</a> (<a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> *scaler)</td></tr> <tr class="memdesc:ga4913e9fbbce90576e3f73e4b910bf74f"><td class="mdescLeft"> </td><td class="mdescRight">Destroy a video scaler. <a href="#ga4913e9fbbce90576e3f73e4b910bf74f"></a><br/></td></tr> <tr class="separator:ga4913e9fbbce90576e3f73e4b910bf74f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga5630854ec9ee864186562ef9f69e864b"><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__scaler.html#ga5630854ec9ee864186562ef9f69e864b">gavl_video_scaler_get_options</a> (<a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> *scaler)</td></tr> <tr class="memdesc:ga5630854ec9ee864186562ef9f69e864b"><td class="mdescLeft"> </td><td class="mdescRight">gets options of a scaler <a href="#ga5630854ec9ee864186562ef9f69e864b"></a><br/></td></tr> <tr class="separator:ga5630854ec9ee864186562ef9f69e864b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga048d636f7fc6ca5afb522cffc1c57f11"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#ga048d636f7fc6ca5afb522cffc1c57f11">gavl_video_scaler_init</a> (<a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> *scaler, const <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> *src_format, const <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> *dst_format)</td></tr> <tr class="memdesc:ga048d636f7fc6ca5afb522cffc1c57f11"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a video scaler. <a href="#ga048d636f7fc6ca5afb522cffc1c57f11"></a><br/></td></tr> <tr class="separator:ga048d636f7fc6ca5afb522cffc1c57f11"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gae0d9ec30ee5a353802baadacb027ec0a"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#gae0d9ec30ee5a353802baadacb027ec0a">gavl_video_scaler_init_convolve</a> (<a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> *scaler, const <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> *format, int h_radius, const float *h_coeffs, int v_radius, const float *v_coeffs)</td></tr> <tr class="memdesc:gae0d9ec30ee5a353802baadacb027ec0a"><td class="mdescLeft"> </td><td class="mdescRight">Initialize a video scaler as a generic convolver. <a href="#gae0d9ec30ee5a353802baadacb027ec0a"></a><br/></td></tr> <tr class="separator:gae0d9ec30ee5a353802baadacb027ec0a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaac3cfffdb618b683fe36150beee810c5"><td class="memItemLeft" align="right" valign="top">GAVL_PUBLIC void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__video__scaler.html#gaac3cfffdb618b683fe36150beee810c5">gavl_video_scaler_scale</a> (<a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> *scaler, const <a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> *input_frame, <a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> *output_frame)</td></tr> <tr class="memdesc:gaac3cfffdb618b683fe36150beee810c5"><td class="mdescLeft"> </td><td class="mdescRight">Scale video. <a href="#gaac3cfffdb618b683fe36150beee810c5"></a><br/></td></tr> <tr class="separator:gaac3cfffdb618b683fe36150beee810c5"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Video scaler. </p> <p>The scaler does the elementary operation to take a rectangular area of the source image and scale it into a specified rectangular area of the destination image. The source rectangle has floating point coordinates, the destination rectangle must have integer coordinates, which are aligned to chroma subsampling factors.</p> <p>The internal scale tables are created for each plane and field separately. This means that:</p> <ul> <li>We handle all flavors of chroma placement correctly</li> <li>We can convert chroma subsampling by scaling the chroma planes and copying the luminance plane.</li> <li>Since the scaler knows about fields, it will scale interlaced frames field-wise (not a good idea to scale interlaced frames vertically though).</li> <li>Simple deinterlacing (See <a class="el" href="group__video__options.html#gga498099f87328c97f303f538eb79eded9a85b2118c04bb86c6b35f95ca793a3c9a">GAVL_DEINTERLACE_SCALE</a>) can be done by taking one source field and scale it vertically to the entire destination frame.</li> </ul> <p>You can use the scaler directly (through <a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a>). The generic video converter (<a class="el" href="group__video__converter.html#ga8608b4a917f962a192fbb4e7d1a180f5">gavl_video_converter_t</a>) will create an internal scaler if necessary. </p> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="ga8b4210889926401c0af62a9c423e14ab"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct gavl_video_scaler_s <a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a></td> </tr> </table> </div><div class="memdoc"> <p>Opaque scaler structure. </p> <p>You don't want to know what's inside. </p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="ga65a5adb9b0ec0c47177d858f4b9841a3"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC <a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a>* gavl_video_scaler_create </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Create a video scaler. </p> <dl class="section return"><dt>Returns</dt><dd>A newly allocated video scaler </dd></dl> </div> </div> <a class="anchor" id="ga4913e9fbbce90576e3f73e4b910bf74f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_video_scaler_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td> <td class="paramname"><em>scaler</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Destroy a video scaler. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">scaler</td><td>A video scaler </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga5630854ec9ee864186562ef9f69e864b"></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_video_scaler_get_options </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td> <td class="paramname"><em>scaler</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>gets options of a scaler </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">scaler</td><td>A video scaler</td></tr> </table> </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__scaler.html#ga048d636f7fc6ca5afb522cffc1c57f11">gavl_video_scaler_init</a> </p> </div> </div> <a class="anchor" id="ga048d636f7fc6ca5afb522cffc1c57f11"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC int gavl_video_scaler_init </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td> <td class="paramname"><em>scaler</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> * </td> <td class="paramname"><em>src_format</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="group__video__format.html#ga0ffc9c60fb71a5fb835e453531fd442c">gavl_video_format_t</a> * </td> <td class="paramname"><em>dst_format</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Initialize a video scaler. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">scaler</td><td>A video scaler </td></tr> <tr><td class="paramname">src_format</td><td>Input format </td></tr> <tr><td class="paramname">dst_format</td><td>Output format </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>If something goes wrong (should never happen), -1 is returned.</dd></dl> <p>You should have equal pixelformats in the source and destination. This function can be called multiple times with one instance. </p> </div> </div> <a class="anchor" id="gae0d9ec30ee5a353802baadacb027ec0a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC int gavl_video_scaler_init_convolve </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td> <td class="paramname"><em>scaler</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <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">int </td> <td class="paramname"><em>h_radius</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const float * </td> <td class="paramname"><em>h_coeffs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>v_radius</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const float * </td> <td class="paramname"><em>v_coeffs</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Initialize a video scaler as a generic convolver. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">scaler</td><td>A video scaler </td></tr> <tr><td class="paramname">format</td><td>Format (must be the same for input and output) </td></tr> <tr><td class="paramname">h_radius</td><td>Horizontal radius </td></tr> <tr><td class="paramname">h_coeffs</td><td>Horizontal coefficients </td></tr> <tr><td class="paramname">v_radius</td><td>Vertical radius </td></tr> <tr><td class="paramname">v_coeffs</td><td>Vertical coefficients </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>If something goes wrong (should never happen), -1 is returned.</dd></dl> <p>This initialized a scaler for use as a generic convolver. The h_radius and v_radius arguments denote the numbers of pixels, which are taken in both left and right from the center pixel, i.e. a value of 1 will result in a 3-tap filter. The coefficients must be given for ALL taps (the convolver does not assume the coeffitients to be symmetric)</p> <p>This function can be called multiple times with one instance. </p> </div> </div> <a class="anchor" id="gaac3cfffdb618b683fe36150beee810c5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">GAVL_PUBLIC void gavl_video_scaler_scale </td> <td>(</td> <td class="paramtype"><a class="el" href="group__video__scaler.html#ga8b4210889926401c0af62a9c423e14ab">gavl_video_scaler_t</a> * </td> <td class="paramname"><em>scaler</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="structgavl__video__frame__t.html">gavl_video_frame_t</a> * </td> <td class="paramname"><em>input_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>output_frame</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Scale video. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">scaler</td><td>A video scaler </td></tr> <tr><td class="paramname">input_frame</td><td>Input frame </td></tr> <tr><td class="paramname">output_frame</td><td>Output frame </td></tr> </table> </dd> </dl> </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>