Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > e9a2bf4cbad8eb886872edae7c352314 > files > 27

libvpx-devel-1.0.0-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: decode_with_drops.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.4 -->
<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">
<div class="title">decode_with_drops.c </div>  </div>
</div>
<div class="contents">
<div class="textblock"> 
<h1>Decode With Drops Example</h1>

<p>This is an example utility which drops a series of frames, as specified
on the command line. This is useful for observing the error recovery
features of the codec.</p>

<h2>Usage</h2>

<p>This example adds a single argument to the <code>simple_decoder</code> example,
which specifies the range or pattern of frames to drop. The parameter is
parsed as follows:</p>

<pre class="c"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>argc<span style="color: #339933;">!=</span><span style="color: #0000dd;">4</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; &lt;N-M|N/M&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: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>nptr<span style="color: #339933;">;</span>
    n <span style="color: #339933;">=</span> strtol<span style="color: #009900;">&#40;</span>argv<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: #339933;">&amp;</span>nptr<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    m <span style="color: #339933;">=</span> strtol<span style="color: #009900;">&#40;</span>nptr<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><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>
    is_range <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>nptr <span style="color: #339933;">==</span> <span style="color: #ff0000;">'-'</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>n <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>m <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>nptr <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'-'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">*</span>nptr <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'/'</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;Couldn't parse pattern %s<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;">3</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre>

<h2>Dropping A Range Of Frames</h2>

<p>To drop a range of frames, specify the starting frame and the ending
frame to drop, separated by a dash. The following command will drop
frames 5 through 10 (base 1).</p>

<p>$ ./decode_with_drops in.ivf out.i420 5-10</p>

<h2>Dropping A Pattern Of Frames</h2>

<p>To drop a pattern of frames, specify the number of frames to drop and
the number of frames after which to repeat the pattern, separated by
a forward-slash. The following command will drop 3 of 7 frames.
Specifically, it will decode 4 frames, then drop 3 frames, and then
repeat.</p>

<p>$ ./decode_with_drops in.ivf out.i420 3/7</p>

<h2>Extra Variables</h2>

<p>This example maintains the pattern passed on the command line in the
<code>n</code>, <code>m</code>, and <code>is_range</code> variables:</p>

<pre class="c"><span style="color: #993333;">int</span>              n<span style="color: #339933;">,</span> m<span style="color: #339933;">,</span> is_range<span style="color: #339933;">;</span></pre>

<h2>Making The Drop Decision</h2>

<p>The example decides whether to drop the frame based on the current
frame number, immediately before decoding the frame.</p>

<pre class="c"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>is_range <span style="color: #339933;">&amp;&amp;</span> frame_cnt <span style="color: #339933;">&gt;=</span> n <span style="color: #339933;">&amp;&amp;</span> frame_cnt <span style="color: #339933;">&lt;=</span> m<span style="color: #009900;">&#41;</span>
   <span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>is_range <span style="color: #339933;">&amp;&amp;</span> m <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>m <span style="color: #339933;">&lt;=</span> n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   putc<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'X'</span><span style="color: #339933;">,</span> stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
putc<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'.'</span><span style="color: #339933;">,</span> stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fflush<span style="color: #009900;">&#40;</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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 is an example utility which drops a series of frames, as specified
 on the command line. This is useful for observing the error recovery
 features of the codec.
 */</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;
&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>
    <span style="color: #993333;">int</span>              n<span style="color: #339933;">,</span> m<span style="color: #339933;">,</span> is_range<span style="color: #339933;">;</span>                                          <span style="color: #666666; font-style: italic;">//</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;">4</span><span style="color: #009900;">&#41;</span>                                                               <span style="color: #666666; font-style: italic;">//</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Usage: %s &lt;infile&gt; &lt;outfile&gt; &lt;N-M|N/M&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: #666666; font-style: italic;">//</span>
    <span style="color: #009900;">&#123;</span>                                                                         <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>nptr<span style="color: #339933;">;</span>                                                           <span style="color: #666666; font-style: italic;">//</span>
        n <span style="color: #339933;">=</span> strtol<span style="color: #009900;">&#40;</span>argv<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: #339933;">&amp;</span>nptr<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>
        m <span style="color: #339933;">=</span> strtol<span style="color: #009900;">&#40;</span>nptr<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><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>
        is_range <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>nptr <span style="color: #339933;">==</span> <span style="color: #ff0000;">'-'</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><span style="color: #339933;">!</span>n <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>m <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>nptr <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'-'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">*</span>nptr <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>                        <span style="color: #666666; font-style: italic;">//</span>
            die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Couldn't parse pattern %s<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;">3</span><span style="color: #009900;">&#93;</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><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: #b1b100;">if</span><span style="color: #009900;">&#40;</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> flags<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 initialize decoder&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>is_range <span style="color: #339933;">&amp;&amp;</span> frame_cnt <span style="color: #339933;">&gt;=</span> n <span style="color: #339933;">&amp;&amp;</span> frame_cnt <span style="color: #339933;">&lt;=</span> m<span style="color: #009900;">&#41;</span>                     <span style="color: #666666; font-style: italic;">//</span>
           <span style="color: #339933;">||</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>is_range <span style="color: #339933;">&amp;&amp;</span> m <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">%</span>m <span style="color: #339933;">&lt;=</span> n<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                       <span style="color: #666666; font-style: italic;">//</span>
           putc<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'X'</span><span style="color: #339933;">,</span> stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                                 <span style="color: #666666; font-style: italic;">//</span>
           <span style="color: #b1b100;">continue</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>
        putc<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'.'</span><span style="color: #339933;">,</span> stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                                    <span style="color: #666666; font-style: italic;">//</span>
        fflush<span style="color: #009900;">&#40;</span>stdout<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                                       <span style="color: #666666; font-style: italic;">//</span>
        <span style="color: #808080; font-style: italic;">/* Decode the frame */</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;">0</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>
&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> <span style="color: #009900;">&#40;</span>plane <span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span>img<span style="color: #339933;">-&gt;</span>d_h <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">:</span> img<span style="color: #339933;">-&gt;</span>d_h<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> <span style="color: #009900;">&#40;</span>plane <span style="color: #339933;">?</span> <span style="color: #009900;">&#40;</span>img<span style="color: #339933;">-&gt;</span>d_w <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">:</span> img<span style="color: #339933;">-&gt;</span>d_w<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 Mon Jan 30 2012 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.4 </small></address>
</body>
</html>