Sophie

Sophie

distrib > Mandriva > 2010.0 > x86_64 > media > main-release > by-pkgid > f250c16c2b84c9364a2f35a71121aaa2 > files > 297

lib64dirac-devel-1.0.2-2mdv2010.0.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Dirac Video Codec</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<h1 align="center" color="#606080">
Dirac - A Video Codec
</h1>
<p align="center">
Created by the <a href="http://www.bbc.co.uk">British Broadcasting Corporation</a>.
</p>
<hr>
<!-- Generated by Doxygen 1.5.9 -->
<div class="contents">
<h1>dirac_encoder.h File Reference</h1>C interface to Dirac Encoder.  
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="a00184_source.html">libdirac_common/dirac_inttypes.h</a>&gt;</code><br>
<code>#include &lt;<a class="el" href="a00186_source.html">libdirac_common/dirac_types.h</a>&gt;</code><br>

<p>
<a href="a00182_source.html">Go to the source code of this file.</a><h2>Classes</h2>
<ul>
<li>struct <a class="el" href="a00039.html">dirac_encparams_t</a>
<li>struct <a class="el" href="a00037.html">dirac_encoder_context_t</a>
<li>struct <a class="el" href="a00034.html">dirac_enc_data_t</a>
<li>struct <a class="el" href="a00035.html">dirac_enc_picstats_t</a>
<li>struct <a class="el" href="a00036.html">dirac_enc_seqstats_t</a>
<li>struct <a class="el" href="a00043.html">dirac_mv_t</a>
<li>struct <a class="el" href="a00042.html">dirac_mv_cost_t</a>
<li>struct <a class="el" href="a00041.html">dirac_instr_t</a>
<li>struct <a class="el" href="a00038.html">dirac_encoder_t</a>
</ul>
<h2>Typedefs</h2>
<ul>
<li>typedef <a class="el" href="a00172.html#6f1cf42c54ea112b7d140127834ea43d">PrefilterType</a> <a class="el" href="a00182.html#e4f97a518d7dadee20022b31388ea197">dirac_prefilter_t</a>
<li>typedef <a class="el" href="a00172.html#216a5d43d2a518325c84f100ed7735a5">VideoFormat</a> <a class="el" href="a00182.html#5c2b1cecf4880c180845367d9a891689">dirac_encoder_presets_t</a>
<li>typedef <a class="el" href="a00172.html#73c509e14745c98e30772b6c4f8b6e1e">MVPrecisionType</a> <a class="el" href="a00182.html#7533c4c4245e67a6517d95749b712755">dirac_mvprecision_t</a>
</ul>
<h2>Enumerations</h2>
<ul>
<li>enum <a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306">dirac_encoder_state_t</a> { <a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306de4346f74475e567da4d6649338f94b8">ENC_STATE_INVALID</a> =  -1, 
<a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306c0af1f9ec7a1e9c3df9edb491ca239ae">ENC_STATE_BUFFER</a>, 
<a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb30606dc87bdac156124d857134bd3cd21a7">ENC_STATE_AVAIL</a>, 
<a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb3060646324c54664fd896a9c7862ff1fd0d">ENC_STATE_EOS</a>
 }
</ul>
<h2>Functions</h2>
<ul>
<li>DllExport void <a class="el" href="a00182.html#24cf3cb4253eb9034252e2885278cb00">dirac_encoder_context_init</a> (<a class="el" href="a00037.html">dirac_encoder_context_t</a> *enc_ctx, <a class="el" href="a00172.html#216a5d43d2a518325c84f100ed7735a5">dirac_encoder_presets_t</a> preset)
<li>DllExport <a class="el" href="a00038.html">dirac_encoder_t</a> * <a class="el" href="a00182.html#9062baaff3bbbc1880d8d59b5ee8e1e0">dirac_encoder_init</a> (const <a class="el" href="a00037.html">dirac_encoder_context_t</a> *enc_ctx, int verbose)
<li>DllExport int <a class="el" href="a00182.html#bec8d7f0c177114a47910bedf807ea8e">dirac_encoder_load</a> (<a class="el" href="a00038.html">dirac_encoder_t</a> *encoder, unsigned char *uncdata, int uncdata_size)
<li>DllExport <a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306">dirac_encoder_state_t</a> <a class="el" href="a00182.html#2e7991c68ecf07b21eba6c06bd8fa43c">dirac_encoder_output</a> (<a class="el" href="a00038.html">dirac_encoder_t</a> *encoder)
<li>DllExport void <a class="el" href="a00182.html#10b4ec1d1c0d1c571c5ea195e55fbd99">dirac_encoder_end_sequence</a> (<a class="el" href="a00038.html">dirac_encoder_t</a> *encoder)
<li>DllExport void <a class="el" href="a00182.html#dbfe5fb6e0928ceeef27fe9ee7007054">dirac_encoder_close</a> (<a class="el" href="a00038.html">dirac_encoder_t</a> *encoder)
</ul>
<hr><h2>Detailed Description</h2>
A set of 'C' functions that define the public interface to the Dirac encoder. Refer to the the reference encoder source code, encoder/encmain.cpp for an example of how to use the "C" interface. The pseudocode below gives a brief description of the "C" interface usage.<p>
<div class="fragment"><pre class="fragment">
 #include &lt;libdirac_decoder/dirac_encoder.h&gt;

 #define ENCBUF_SIZE 1024*1024;
 unsigned char *buffer, enc_buf[ENC_BUFSIZE];
 int buffer_size;
 dirac_encoder_t *encoder;
 dirac_encoder_context_t enc_ctx;

 // Initialse the encoder context with the presets for SD576 - Standard
 // Definition Digital
 dirac_encoder_context_init (&amp;enc_ctx, VIDEO_FORMAT_SD576I50);

 // Override parameters if required
 // interlace : 1 - interlaced; 0 - progressive
 enc_ctx.seq_params.interlace = 0;
 enc_ctx.seq_params.topfieldfirst = 0;
 enc_ctx.enc_params.qf = 7.5;
 // disable instrumentation flag
 enc_ctx.instr_flag = 0;
 // return locally decoded output
 enc_ctx.decode_flag = 1;

 // Initialise the encoder with the encoder context. 
 // Setting verbose output to false
 encoder= dirac_encoder_init(&amp;enc_ctx, false);

 // Set the buffer size. For SD576 4:2:0 chroma
 buffer_size = (720*576*3)/2;
 buffer = (unsigned char *)malloc (buffer_size);

 // Output buffer

 dirac_encoder_state_t state;
 int go = 1;
 do
 {
    read uncompressed frame data into buffer
    if (end of file)
    {
        // push end of sequence
        dirac_encoder_end_sequence(encoder);
    }
    // load one frame of data into encoder
     if (dirac_encoder_load(encoder, buffer, buffer_size) == 0)
    {
        // Retrieve encoded frames from encoder
        do
        {
            encoder-&gt;enc_buf.buffer = enc_buf;
            encoder-&gt;enc_buf.size = ENCBUF_SIZE;
            state = dirac_encoder_output (encoder);
            switch (state)
            {
            case ENC_STATE_AVAIL:
                 // Encoded frame available in encoder-&gt;enc_buf
                 // Encoded frame params available in enccoder-&gt;enc_fparams
                 // Encoded frame stats available in enccoder-&gt;enc_fstats
                 break;
            case ENC_STATE_BUFFER:
                break;
            case ENC_STATE_EOS:
                // Reached end of sequence
                // End of sequence information is available in encoder-&gt;enc_buf
                // Sequence statistics available in encoder-&gt;enc_seqstats;
                go = 0; // exit from the encoding loop
                break;
            case ENC_STATE_INVALID:
            default:
                // Unrecoverable error encountered. Exit;
                exit (exit code);
            }
            if (encoder-&gt;decoded_frame_avail)
            {
                //locally decoded frame is available in 
                //encoder-&gt;dec_buf
                //locally decoded frame parameters available
                //in encoder-&gt;dec_fparams
            }
            if (encoder-&gt;instr_data_avail)
            {
                //Instrumentation data (motion vectors etc.)
                //available in encoder-&gt;instr
            }
        } while (state == ENC_STATE_AVAIL)
    }
 } while (go == 1);

 // Free the encoder resources
 dirac_encoder_close(encoder)
 // Free the uncompressed data buffer
 free (buffer);

 </pre></div> <hr><h2>Typedef Documentation</h2>
<a class="anchor" name="5c2b1cecf4880c180845367d9a891689"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_presets_t" ref="5c2b1cecf4880c180845367d9a891689" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="a00172.html#216a5d43d2a518325c84f100ed7735a5">VideoFormat</a> <a class="el" href="a00172.html#216a5d43d2a518325c84f100ed7735a5">dirac_encoder_presets_t</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Enumerated type that defines encoder presets that set the encoder and sequence paramters. More presets may be added in future 
</div>
</div><p>
<a class="anchor" name="7533c4c4245e67a6517d95749b712755"></a><!-- doxytag: member="dirac_encoder.h::dirac_mvprecision_t" ref="7533c4c4245e67a6517d95749b712755" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="a00172.html#73c509e14745c98e30772b6c4f8b6e1e">MVPrecisionType</a> <a class="el" href="a00172.html#73c509e14745c98e30772b6c4f8b6e1e">dirac_mvprecision_t</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Enumerated type that defines motion vector precisions supported by the encoder. 
</div>
</div><p>
<a class="anchor" name="e4f97a518d7dadee20022b31388ea197"></a><!-- doxytag: member="dirac_encoder.h::dirac_prefilter_t" ref="e4f97a518d7dadee20022b31388ea197" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef <a class="el" href="a00172.html#6f1cf42c54ea112b7d140127834ea43d">PrefilterType</a> <a class="el" href="a00172.html#6f1cf42c54ea112b7d140127834ea43d">dirac_prefilter_t</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Enumerated type that defines prefiltering types supported by the encoder. 
</div>
</div><p>
<hr><h2>Enumeration Type Documentation</h2>
<a class="anchor" name="5fc325d503a9b28131076aa3f8ebb306"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_state_t" ref="5fc325d503a9b28131076aa3f8ebb306" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306">dirac_encoder_state_t</a>          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Enumerated type that defines encoder state <dl compact><dt><b>Enumerator: </b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" name="5fc325d503a9b28131076aa3f8ebb306de4346f74475e567da4d6649338f94b8"></a><!-- doxytag: member="ENC_STATE_INVALID" ref="5fc325d503a9b28131076aa3f8ebb306de4346f74475e567da4d6649338f94b8" args="" -->ENC_STATE_INVALID</em>&nbsp;</td><td>
</td></tr>
<tr><td valign="top"><em><a class="anchor" name="5fc325d503a9b28131076aa3f8ebb306c0af1f9ec7a1e9c3df9edb491ca239ae"></a><!-- doxytag: member="ENC_STATE_BUFFER" ref="5fc325d503a9b28131076aa3f8ebb306c0af1f9ec7a1e9c3df9edb491ca239ae" args="" -->ENC_STATE_BUFFER</em>&nbsp;</td><td>
</td></tr>
<tr><td valign="top"><em><a class="anchor" name="5fc325d503a9b28131076aa3f8ebb30606dc87bdac156124d857134bd3cd21a7"></a><!-- doxytag: member="ENC_STATE_AVAIL" ref="5fc325d503a9b28131076aa3f8ebb30606dc87bdac156124d857134bd3cd21a7" args="" -->ENC_STATE_AVAIL</em>&nbsp;</td><td>
</td></tr>
<tr><td valign="top"><em><a class="anchor" name="5fc325d503a9b28131076aa3f8ebb3060646324c54664fd896a9c7862ff1fd0d"></a><!-- doxytag: member="ENC_STATE_EOS" ref="5fc325d503a9b28131076aa3f8ebb3060646324c54664fd896a9c7862ff1fd0d" args="" -->ENC_STATE_EOS</em>&nbsp;</td><td>
</td></tr>
</table>
</dl>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="dbfe5fb6e0928ceeef27fe9ee7007054"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_close" ref="dbfe5fb6e0928ceeef27fe9ee7007054" args="(dirac_encoder_t *encoder)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport void dirac_encoder_close           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00038.html">dirac_encoder_t</a> *&nbsp;</td>
          <td class="paramname"> <em>encoder</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Free resources held by encoder <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>encoder</em>&nbsp;</td><td>Encoder Handle </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="24cf3cb4253eb9034252e2885278cb00"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_context_init" ref="24cf3cb4253eb9034252e2885278cb00" args="(dirac_encoder_context_t *enc_ctx, dirac_encoder_presets_t preset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport void dirac_encoder_context_init           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00037.html">dirac_encoder_context_t</a> *&nbsp;</td>
          <td class="paramname"> <em>enc_ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00172.html#216a5d43d2a518325c84f100ed7735a5">dirac_encoder_presets_t</a>&nbsp;</td>
          <td class="paramname"> <em>preset</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Function that creates an encoder context based on a preset value. The values can then be overridden by the user by setting each field separately <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>enc_ctx</em>&nbsp;</td><td>pointer to Encoder context tp be initialised. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>preset</em>&nbsp;</td><td>Preset to be used to initialise the encoder context <div class="fragment"><pre class="fragment">

    For a full list of video formats presets supported and the default values
    of the source and encoder parameters. refer to Annex C of the Dirac
    ByteStream Specification.

    </pre></div> </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="10b4ec1d1c0d1c571c5ea195e55fbd99"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_end_sequence" ref="10b4ec1d1c0d1c571c5ea195e55fbd99" args="(dirac_encoder_t *encoder)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport void dirac_encoder_end_sequence           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00038.html">dirac_encoder_t</a> *&nbsp;</td>
          <td class="paramname"> <em>encoder</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Request the encoder to end the sequence. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>encoder</em>&nbsp;</td><td>Encoder Handle </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="9062baaff3bbbc1880d8d59b5ee8e1e0"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_init" ref="9062baaff3bbbc1880d8d59b5ee8e1e0" args="(const dirac_encoder_context_t *enc_ctx, int verbose)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport <a class="el" href="a00038.html">dirac_encoder_t</a>* dirac_encoder_init           </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="a00037.html">dirac_encoder_context_t</a> *&nbsp;</td>
          <td class="paramname"> <em>enc_ctx</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>verbose</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialise encoder. Makes a copy of the enc_ctx passed to it. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>enc_ctx</em>&nbsp;</td><td>Parameters to initialise encoder context </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>verbose</em>&nbsp;</td><td>boolean flag to set verbose output </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>encoder Handle to encoder if successful or NULL on failure </dd></dl>

</div>
</div><p>
<a class="anchor" name="bec8d7f0c177114a47910bedf807ea8e"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_load" ref="bec8d7f0c177114a47910bedf807ea8e" args="(dirac_encoder_t *encoder, unsigned char *uncdata, int uncdata_size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport int dirac_encoder_load           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00038.html">dirac_encoder_t</a> *&nbsp;</td>
          <td class="paramname"> <em>encoder</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned char *&nbsp;</td>
          <td class="paramname"> <em>uncdata</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>uncdata_size</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Load uncompressed data into the encoder. Expects one full frame of data <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>encoder</em>&nbsp;</td><td>Encoder Handle </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>uncdata</em>&nbsp;</td><td>Uncompressed data buffer </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>uncdata_size</em>&nbsp;</td><td>boolean flag to set verbose output </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>return status. &gt;0 - successful; -1 failed Failure may be due to input data size not matching the required frame size. </dd></dl>

</div>
</div><p>
<a class="anchor" name="2e7991c68ecf07b21eba6c06bd8fa43c"></a><!-- doxytag: member="dirac_encoder.h::dirac_encoder_output" ref="2e7991c68ecf07b21eba6c06bd8fa43c" args="(dirac_encoder_t *encoder)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DllExport <a class="el" href="a00182.html#5fc325d503a9b28131076aa3f8ebb306">dirac_encoder_state_t</a> dirac_encoder_output           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00038.html">dirac_encoder_t</a> *&nbsp;</td>
          <td class="paramname"> <em>encoder</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Retrieve an encoded frame from the encoder. Returns the state of the encoder. The encoder buffer enc_buf in the encodermust be set up with the buffer and buffer_size that will hold the encoded frame <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>encoder</em>&nbsp;</td><td>Encoder Handle </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>ENC_STATE_INVALID - unrecoverable error ENC_STATE_BUFFER - load data into encoder ENC_STATE_AVAIL - Encoded frame available ENC_STATE_EOS - End of Sequence info available </dd></dl>

</div>
</div><p>
</div>
<hr>
<p align="center"><small>
&copy; 2004 British Broadcasting Corporation.
Dirac code licensed under the <a href="http://www.mozilla.org/MPL/">Mozilla Public License (MPL) Version 1.1</a>.<br>
HTML documentation generated by Dimitri van Heesch's
excellent <a href="http://www.doxygen.org">Doxygen</a> tool.
</small></p>
</body>
</html>