Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > a3df0d9d8542dc1f46770d317f9f7add > files > 29

libvpx-devel-0.9.6-1.fc15.i686.rpm

<!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"/>
<title>WebM VP8 Codec SDK: postproc.c</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">WebM VP8 Codec SDK</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li class="current"><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="samples.html">Sample Code</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="headertitle">
<h1>postproc.c </h1>  </div>
</div>
<div class="contents">
<div class="textblock"> 
<h1>Postprocessing Decoder</h1>

<p>This example adds postprocessing to the simple decoder loop.</p>

<h2>Initializing Postprocessing</h2>

<p>You must inform the codec that you might request postprocessing at
initialization time. This is done by passing the VPX_CODEC_USE_POSTPROC
flag to <code>vpx_codec_dec_init</code>. If the codec does not support
postprocessing, this call will return VPX_CODEC_INCAPABLE. For
demonstration purposes, we also fall back to default initialization if
the codec does not provide support.</p>

<pre class="c"><span style="color: #808080; font-style: italic;">/* Initialize codec */</span>
res <span style="color: #339933;">=</span> vpx_codec_dec_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> interface<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span>
                         VPX_CODEC_USE_POSTPROC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>res <span style="color: #339933;">==</span> VPX_CODEC_INCAPABLE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;NOTICE: Postproc not supported by %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>
           vpx_codec_iface_name<span style="color: #009900;">&#40;</span>interface<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    res <span style="color: #339933;">=</span> vpx_codec_dec_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> interface<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span>
    die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to initialize decoder&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

<h2>Using Adaptive Postprocessing</h2>

<p>VP6 provides &#8220;adaptive postprocessing.&#8221; It will automatically select the
best postprocessing filter on a frame by frame basis based on the amount
of time remaining before the user&#8217;s specified deadline expires. The
special value 0 indicates that the codec should take as long as
necessary to provide the best quality frame. This example gives the
codec 15ms (15000us) to return a frame. Remember that this is a soft
deadline, and the codec may exceed it doing its regular processing. In
these cases, no additional postprocessing will be done.</p>

<pre class="c"><span style="color: #808080; font-style: italic;">/* Decode the frame with 15ms deadline */</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_decode<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> frame<span style="color: #339933;">,</span> frame_sz<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">15000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to decode frame&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre>

<h2>Codec Specific Postprocessing Controls</h2>

<p>Some codecs provide fine grained controls over their built-in
postprocessors. VP8 is one example. The following sample code toggles
postprocessing on and off every 15 frames.</p>

<pre class="c"><span style="color: #339933;">#if CONFIG_VP8_DECODER</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">%</span><span style="color:#800080;">30</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    vp8_postproc_cfg_t  pp <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_control<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> VP8_SET_POSTPROC<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pp<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to turn off postproc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">%</span><span style="color:#800080;">30</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    vp8_postproc_cfg_t  pp <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>VP8_DEBLOCK <span style="color: #339933;">|</span> VP8_DEMACROBLOCK<span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_control<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> VP8_SET_POSTPROC<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pp<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to turn on postproc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">#endif</span></pre>

<h1>Putting It All Together</h1>

<pre class="c"><span style="color: #808080; font-style: italic;">/*
  Copyright (c) 2010 The WebM project authors. All Rights Reserved.

  Use of this source code is governed by a BSD-style license
  that can be found in the LICENSE file in the root of the source
  tree. An additional intellectual property rights grant can be found
  in the file PATENTS.  All contributing project authors may
  be found in the AUTHORS file in the root of the source tree.
 */</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 This example adds postprocessing to the simple decoder loop.
 */</span>
<span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;stdarg.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
<span style="color: #339933;">#define VPX_CODEC_DISABLE_COMPAT 1</span>
<span style="color: #339933;">#include &quot;vpx/vpx_decoder.h&quot;</span>
<span style="color: #339933;">#include &quot;vpx/vp8dx.h&quot;</span>
<span style="color: #339933;">#define interface (vpx_codec_vp8_dx())</span>
&nbsp;
&nbsp;
<span style="color: #339933;">#define IVF_FILE_HDR_SZ  (32)</span>
<span style="color: #339933;">#define IVF_FRAME_HDR_SZ (12)</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> mem_get_le32<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mem<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span>mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span>mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span>mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> die<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>fmt<span style="color: #339933;">,</span> ...<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    va_list ap<span style="color: #339933;">;</span>
&nbsp;
    va_start<span style="color: #009900;">&#40;</span>ap<span style="color: #339933;">,</span> fmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    vprintf<span style="color: #009900;">&#40;</span>fmt<span style="color: #339933;">,</span> ap<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fmt<span style="color: #009900;">&#91;</span>strlen<span style="color: #009900;">&#40;</span>fmt<span style="color: #009900;">&#41;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span>
        <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> die_codec<span style="color: #009900;">&#40;</span>vpx_codec_ctx_t <span style="color: #339933;">*</span>ctx<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>detail <span style="color: #339933;">=</span> vpx_codec_error_detail<span style="color: #009900;">&#40;</span>ctx<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> s<span style="color: #339933;">,</span> vpx_codec_error<span style="color: #009900;">&#40;</span>ctx<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>detail<span style="color: #009900;">&#41;</span>
        <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;    %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>detail<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    exit<span style="color: #009900;">&#40;</span>EXIT_FAILURE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    FILE            <span style="color: #339933;">*</span>infile<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>outfile<span style="color: #339933;">;</span>
    vpx_codec_ctx_t  codec<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span>              flags <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> frame_cnt <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span>    file_hdr<span style="color: #009900;">&#91;</span>IVF_FILE_HDR_SZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span>    frame_hdr<span style="color: #009900;">&#91;</span>IVF_FRAME_HDR_SZ<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span>    frame<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">256</span><span style="color: #339933;">*</span><span style="color: #0000dd;">1024</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    vpx_codec_err_t  res<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>res<span style="color: #339933;">;</span>
    <span style="color: #808080; font-style: italic;">/* Open files */</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>argc<span style="color: #339933;">!=</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Usage: %s &lt;infile&gt; &lt;outfile&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>infile <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;rb&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Failed to open %s for reading&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>outfile <span style="color: #339933;">=</span> fopen<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;wb&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Failed to open %s for writing&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Read file header */</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>file_hdr<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> IVF_FILE_HDR_SZ<span style="color: #339933;">,</span> infile<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> IVF_FILE_HDR_SZ
         <span style="color: #339933;">&amp;&amp;</span> file_hdr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'D'</span> <span style="color: #339933;">&amp;&amp;</span> file_hdr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'K'</span> <span style="color: #339933;">&amp;&amp;</span> file_hdr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'I'</span>
         <span style="color: #339933;">&amp;&amp;</span> file_hdr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'F'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s is not an IVF file.&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Using %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>vpx_codec_iface_name<span style="color: #009900;">&#40;</span>interface<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #808080; font-style: italic;">/* Initialize codec */</span>                                                    <span style="color: #666666; font-style: italic;">//</span>
    res <span style="color: #339933;">=</span> vpx_codec_dec_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> interface<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span>                         <span style="color: #666666; font-style: italic;">//</span>
                             VPX_CODEC_USE_POSTPROC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>res <span style="color: #339933;">==</span> VPX_CODEC_INCAPABLE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                          <span style="color: #666666; font-style: italic;">//</span>
        <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;NOTICE: Postproc not supported by %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>                      <span style="color: #666666; font-style: italic;">//</span>
               vpx_codec_iface_name<span style="color: #009900;">&#40;</span>interface<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                              <span style="color: #666666; font-style: italic;">//</span>
        res <span style="color: #339933;">=</span> vpx_codec_dec_init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> interface<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                 <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #009900;">&#125;</span>                                                                         <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span>                                                                   <span style="color: #666666; font-style: italic;">//</span>
        die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to initialize decoder&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                    <span style="color: #666666; font-style: italic;">//</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Read each frame */</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>frame_hdr<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> IVF_FRAME_HDR_SZ<span style="color: #339933;">,</span> infile<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> IVF_FRAME_HDR_SZ<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">int</span>               frame_sz <span style="color: #339933;">=</span> mem_get_le32<span style="color: #009900;">&#40;</span>frame_hdr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        vpx_codec_iter_t  iter <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
        vpx_image_t      <span style="color: #339933;">*</span>img<span style="color: #339933;">;</span>
&nbsp;
&nbsp;
        frame_cnt<span style="color: #339933;">++;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_sz <span style="color: #339933;">&gt;</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>frame<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Frame %d data too big for example code buffer&quot;</span><span style="color: #339933;">,</span> frame_sz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fread<span style="color: #009900;">&#40;</span>frame<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> frame_sz<span style="color: #339933;">,</span> infile<span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> frame_sz<span style="color: #009900;">&#41;</span>
            die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Frame %d failed to read complete frame&quot;</span><span style="color: #339933;">,</span> frame_cnt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #339933;">#if CONFIG_VP8_DECODER                                                //</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">%</span><span style="color:#800080;">30</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                               <span style="color: #666666; font-style: italic;">//</span>
            vp8_postproc_cfg_t  pp <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>                               <span style="color: #666666; font-style: italic;">//</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_control<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> VP8_SET_POSTPROC<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pp<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>              <span style="color: #666666; font-style: italic;">//</span>
                die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to turn off postproc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>             <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">%</span><span style="color:#800080;">30</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                       <span style="color: #666666; font-style: italic;">//</span>
            vp8_postproc_cfg_t  pp <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>VP8_DEBLOCK <span style="color: #339933;">|</span> VP8_DEMACROBLOCK<span style="color: #339933;">,</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_control<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> VP8_SET_POSTPROC<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>pp<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>              <span style="color: #666666; font-style: italic;">//</span>
                die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to turn on postproc&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>              <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>                                                                    <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #339933;">#endif                                                                //</span>
        <span style="color: #808080; font-style: italic;">/* Decode the frame with 15ms deadline */</span>                             <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_decode<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> frame<span style="color: #339933;">,</span> frame_sz<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">15000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>            <span style="color: #666666; font-style: italic;">//</span>
            die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to decode frame&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                      <span style="color: #666666; font-style: italic;">//</span>
&nbsp;
        <span style="color: #808080; font-style: italic;">/* Write decoded data to disk */</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>img <span style="color: #339933;">=</span> vpx_codec_get_frame<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>iter<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> plane<span style="color: #339933;">,</span> y<span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>plane<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> plane <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span> plane<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>buf <span style="color: #339933;">=</span>img<span style="color: #339933;">-&gt;</span>planes<span style="color: #009900;">&#91;</span>plane<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>y<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> y<span style="color: #339933;">&lt;</span>img<span style="color: #339933;">-&gt;</span>d_h <span style="color: #339933;">&gt;&gt;</span> <span style="color: #009900;">&#40;</span>plane<span style="color: #339933;">?</span><span style="color: #0000dd;">1</span><span style="color: #339933;">:</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> y<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fwrite<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> img<span style="color: #339933;">-&gt;</span>d_w <span style="color: #339933;">&gt;&gt;</span> <span style="color: #009900;">&#40;</span>plane<span style="color: #339933;">?</span><span style="color: #0000dd;">1</span><span style="color: #339933;">:</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> outfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    buf <span style="color: #339933;">+=</span> img<span style="color: #339933;">-&gt;</span>stride<span style="color: #009900;">&#91;</span>plane<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Processed %d frames.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>frame_cnt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_destroy<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        die_codec<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Failed to destroy codec&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    fclose<span style="color: #009900;">&#40;</span>outfile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fclose<span style="color: #009900;">&#40;</span>infile<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> EXIT_SUCCESS<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre>
 </div></div>
<hr class="footer"/><address class="footer"><small>Generated on Thu Mar 10 2011 for WebM VP8 Codec SDK by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address>
</body>
</html>