Sophie

Sophie

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

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_to_md5.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_to_md5.c </div>  </div>
</div>
<div class="contents">
<div class="textblock"> 
<h1>Frame-by-frame MD5 Checksum</h1>

<p>This example builds upon the simple decoder loop to show how checksums
of the decoded output can be generated. These are used for validating
decoder implementations against the reference implementation, for example.</p>

<h2>MD5 algorithm</h2>

<p>The Message-Digest 5 (MD5) is a well known hash function. We have provided
an implementation derived from the RSA Data Security, Inc. MD5 Message-Digest
Algorithm for your use. Our implmentation only changes the interface of this
reference code. You must include the <code>md5_utils.h</code> header for access to these
functions.</p>

<pre class="c"><span style="color: #339933;">#include &quot;md5_utils.h&quot;</span></pre>

<h2>Processing The Decoded Data</h2>

<p>Each row of the image is passed to the MD5 accumulator. First the Y plane
is processed, then U, then V. It is important to honor the image&#8217;s <code>stride</code>
values.</p>

<pre class="c"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span>  md5_sum<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
MD5Context     md5<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span>            i<span style="color: #339933;">;</span>
&nbsp;
MD5Init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>md5<span style="color: #009900;">&#41;</span><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>
        MD5Update<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>md5<span style="color: #339933;">,</span> buf<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: #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>
&nbsp;
MD5Final<span style="color: #009900;">&#40;</span>md5_sum<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>md5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">16</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    fprintf<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%02x&quot;</span><span style="color: #339933;">,</span>md5_sum<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fprintf<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;  img-%dx%d-%04d.i420<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> img<span style="color: #339933;">-&gt;</span>d_w<span style="color: #339933;">,</span> img<span style="color: #339933;">-&gt;</span>d_h<span style="color: #339933;">,</span>
        frame_cnt<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 example builds upon the simple decoder loop to show how checksums
 of the decoded output can be generated. These are used for validating
 decoder implementations against the reference implementation, for example.
 */</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>
<span style="color: #339933;">#include &quot;md5_utils.h&quot;                                                        //</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>
&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: #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: #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: #993333;">unsigned</span> <span style="color: #993333;">char</span>  md5_sum<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>                                       <span style="color: #666666; font-style: italic;">//</span>
            MD5Context     md5<span style="color: #339933;">;</span>                                               <span style="color: #666666; font-style: italic;">//</span>
            <span style="color: #993333;">int</span>            i<span style="color: #339933;">;</span>                                                 <span style="color: #666666; font-style: italic;">//</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
            MD5Init<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>md5<span style="color: #009900;">&#41;</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;">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: #666666; font-style: italic;">//</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>                       <span style="color: #666666; font-style: italic;">//</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
                <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: #666666; font-style: italic;">//</span>
                    MD5Update<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>md5<span style="color: #339933;">,</span> buf<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: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//</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: #666666; font-style: italic;">//</span>
                <span style="color: #009900;">&#125;</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: #666666; font-style: italic;">//</span>
            MD5Final<span style="color: #009900;">&#40;</span>md5_sum<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>md5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                                          <span style="color: #666666; font-style: italic;">//</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">16</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>                                               <span style="color: #666666; font-style: italic;">//</span>
                fprintf<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%02x&quot;</span><span style="color: #339933;">,</span>md5_sum<span style="color: #009900;">&#91;</span>i<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>
            fprintf<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;  img-%dx%d-%04d.i420<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> img<span style="color: #339933;">-&gt;</span>d_w<span style="color: #339933;">,</span> img<span style="color: #339933;">-&gt;</span>d_h<span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;">//</span>
                    frame_cnt<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: #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>