Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > d1581bfadd36c1fdc3944ab001e27eac > files > 34

libvpx-devel-0.9.7.1-1.fc16.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: vp8_scalable_patterns.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">vp8_scalable_patterns.c </div>  </div>
</div>
<div class="contents">
<div class="textblock"> 
<h1>VP8 Scalable Frame Patterns</h1>

<p>This is an example demonstrating how to control the VP8 encoder&#8217;s
reference frame selection and update mechanism for video applications
that benefit from a scalable bitstream.</p>

<h2>Configuration</h2>

<p>Scalable frame patterns are most useful in an error resilient context,
so error resiliency mode is enabled, as in the <code>error_resilient.c</code>
example. In addition, we want to disable automatic keyframe selection,
so we force an interval of 1000 frames.</p>

<pre class="c"><span style="color: #339933;">&lt;</span>br <span style="color: #339933;">/&gt;</span><span style="color: #808080; font-style: italic;">/* Enable error resilient mode */</span>
cfg.<span style="color: #202020;">g_error_resilient</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
cfg.<span style="color: #202020;">g_lag_in_frames</span>   <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
cfg.<span style="color: #202020;">kf_mode</span>           <span style="color: #339933;">=</span> VPX_KF_FIXED<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Disable automatic keyframe placement */</span>
cfg.<span style="color: #202020;">kf_min_dist</span> <span style="color: #339933;">=</span> cfg.<span style="color: #202020;">kf_max_dist</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span></pre>

<p>This example uses the following frame pattern (L->last_frame,
G->golden_frame, A->alt_ref_frame):</p>

<ul>
<li>Frame  0  Intra, use none,  update L&amp;G&amp;A</li>
<li>Frame  1  Inter, use LGA,   update none</li>
<li>Frame  2  Inter, use LGA,   update L</li>
<li>Frame  3  Inter, use LGA,   update none</li>
<li>Frame  4  Inter, use GA,    update L&amp;G</li>
<li>Frame  5  Inter, use LGA,   update none</li>
<li>Frame  6  Inter, use LGA,   update L</li>
<li>Frame  7  Inter, use LGA,   update none</li>
<li>Frame  8  Inter, use A,     update L&amp;G&amp;A</li>
<li>Frame  9  Inter, use LGA,   update none</li>
<li>Frame 10  Inter, use LGA,   update L</li>
<li>Frame 11  Inter, use LGA,   update none</li>
<li>Frame 12  Inter, use GA,    update L&amp;G</li>
<li>Frame 13  Inter, use LGA,   update none</li>
<li>Frame 14  Inter, use LGA,   update L</li>
<li>Frame 15  Inter, use LGA,   update none</li>
<li>&#8230;Repeats the pattern from frame 0</li>
</ul>

<p>Change this variable to test the 3 decodable streams case.</p>

<pre class="c"><span style="color: #993333;">int</span>                  num_streams <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span></pre>

<pre class="c">flags <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>num_streams <span style="color: #339933;">==</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>frame_cnt <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: #b1b100;">case</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">:</span>
            flags <span style="color: #339933;">|=</span> VPX_EFLAG_FORCE_KF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">9</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">11</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">13</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">15</span><span style="color: #339933;">:</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_LAST<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_GF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_ARF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">14</span><span style="color: #339933;">:</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">:</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_GF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">:</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>frame_cnt <span style="color: #339933;">%</span> <span style="color: #0000dd;">9</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">:</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>frame_cnt<span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                flags <span style="color: #339933;">|=</span> VPX_EFLAG_FORCE_KF<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">else</span>
            <span style="color: #009900;">&#123;</span>
                cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">26</span><span style="color: #339933;">;</span>
                cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">300</span><span style="color: #339933;">;</span>
                flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>
                flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_ARF<span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">:</span>
            cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">45</span><span style="color: #339933;">;</span>
            cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">230</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>
            cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">45</span><span style="color: #339933;">;</span>
            cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">215</span><span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>
            flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre>

<h2>Observing The Effects</h2>

<p>Use the <code>decode_with_drops</code> example to decode with various dropped frame
patterns. Good patterns to start with are 1/2, 3/4, 7/8, and 15/16
drops.</p>

<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 demonstrating how to control the VP8 encoder's
 reference frame selection and update mechanism for video applications
 that benefit from a scalable bitstream.
 */</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_encoder.h&quot;</span>
<span style="color: #339933;">#include &quot;vpx/vp8cx.h&quot;</span>
<span style="color: #339933;">#define interface (vpx_codec_vp8_cx())</span>
<span style="color: #339933;">#define fourcc    0x30385056</span>
&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;">void</span> mem_put_le16<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mem<span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> val<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">8</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> mem_put_le32<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span>mem<span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> val<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">16</span><span style="color: #339933;">;</span>
    mem<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">24</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;">static</span> <span style="color: #993333;">int</span> read_frame<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span>f<span style="color: #339933;">,</span> vpx_image_t <span style="color: #339933;">*</span>img<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    size_t nbytes<span style="color: #339933;">,</span> to_read<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span>    res <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
    to_read <span style="color: #339933;">=</span> img<span style="color: #339933;">-&gt;</span>w<span style="color: #339933;">*</span>img<span style="color: #339933;">-&gt;</span>h<span style="color: #339933;">*</span><span style="color: #0000dd;">3</span><span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
    nbytes <span style="color: #339933;">=</span> fread<span style="color: #009900;">&#40;</span>img<span style="color: #339933;">-&gt;</span>planes<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: #0000dd;">1</span><span style="color: #339933;">,</span> to_read<span style="color: #339933;">,</span> f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>nbytes <span style="color: #339933;">!=</span> to_read<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        res <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>nbytes <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</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;Warning: Read partial frame. Check your width &amp; height!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">return</span> res<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> write_ivf_file_header<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span>outfile<span style="color: #339933;">,</span>
                                  <span style="color: #993333;">const</span> vpx_codec_enc_cfg_t <span style="color: #339933;">*</span>cfg<span style="color: #339933;">,</span>
                                  <span style="color: #993333;">int</span> frame_cnt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span> header<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">32</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>cfg<span style="color: #339933;">-&gt;</span>g_pass <span style="color: #339933;">!=</span> VPX_RC_ONE_PASS <span style="color: #339933;">&amp;&amp;</span> cfg<span style="color: #339933;">-&gt;</span>g_pass <span style="color: #339933;">!=</span> VPX_RC_LAST_PASS<span style="color: #009900;">&#41;</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
    header<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;">;</span>
    header<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;">;</span>
    header<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;">;</span>
    header<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: #339933;">;</span>
    mem_put_le16<span style="color: #009900;">&#40;</span>header<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;">&#41;</span><span style="color: #339933;">;</span>                   <span style="color: #808080; font-style: italic;">/* version */</span>
    mem_put_le16<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span>  <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                  <span style="color: #808080; font-style: italic;">/* headersize */</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">8</span><span style="color: #339933;">,</span>  fourcc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>              <span style="color: #808080; font-style: italic;">/* headersize */</span>
    mem_put_le16<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">12</span><span style="color: #339933;">,</span> cfg<span style="color: #339933;">-&gt;</span>g_w<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>            <span style="color: #808080; font-style: italic;">/* width */</span>
    mem_put_le16<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">14</span><span style="color: #339933;">,</span> cfg<span style="color: #339933;">-&gt;</span>g_h<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>            <span style="color: #808080; font-style: italic;">/* height */</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">16</span><span style="color: #339933;">,</span> cfg<span style="color: #339933;">-&gt;</span>g_timebase.<span style="color: #202020;">den</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* rate */</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">20</span><span style="color: #339933;">,</span> cfg<span style="color: #339933;">-&gt;</span>g_timebase.<span style="color: #202020;">num</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* scale */</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">24</span><span style="color: #339933;">,</span> frame_cnt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>           <span style="color: #808080; font-style: italic;">/* length */</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">28</span><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: #808080; font-style: italic;">/* unused */</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fwrite<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">32</span><span style="color: #339933;">,</span> outfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">void</span> write_ivf_frame_header<span style="color: #009900;">&#40;</span>FILE <span style="color: #339933;">*</span>outfile<span style="color: #339933;">,</span>
                                   <span style="color: #993333;">const</span> vpx_codec_cx_pkt_t <span style="color: #339933;">*</span>pkt<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">char</span>             header<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">12</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    vpx_codec_pts_t  pts<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pkt<span style="color: #339933;">-&gt;</span>kind <span style="color: #339933;">!=</span> VPX_CODEC_CX_FRAME_PKT<span style="color: #009900;">&#41;</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
&nbsp;
    pts <span style="color: #339933;">=</span> pkt<span style="color: #339933;">-&gt;</span>data.<span style="color: #202020;">frame</span>.<span style="color: #202020;">pts</span><span style="color: #339933;">;</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> pkt<span style="color: #339933;">-&gt;</span>data.<span style="color: #202020;">frame</span>.<span style="color: #202020;">sz</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> pts<span style="color: #339933;">&amp;</span><span style="color: #208080;">0xFFFFFFFF</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    mem_put_le32<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">+</span><span style="color: #0000dd;">8</span><span style="color: #339933;">,</span> pts <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fwrite<span style="color: #009900;">&#40;</span>header<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">,</span> outfile<span style="color: #009900;">&#41;</span><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>
    vpx_codec_enc_cfg_t  cfg<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span>                  frame_cnt <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    vpx_image_t          raw<span style="color: #339933;">;</span>
    vpx_codec_err_t      res<span style="color: #339933;">;</span>
    <span style="color: #993333;">long</span>                 width<span style="color: #339933;">;</span>
    <span style="color: #993333;">long</span>                 height<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span>                  frame_avail<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span>                  got_data<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>
    <span style="color: #993333;">int</span>                  num_streams <span style="color: #339933;">=</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">;</span>                                     <span style="color: #666666; font-style: italic;">//</span>
&nbsp;
    <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;">5</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Usage: %s &lt;width&gt; &lt;height&gt; &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>
    width <span style="color: #339933;">=</span> strtol<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> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    height <span style="color: #339933;">=</span> strtol<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> 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: #b1b100;">if</span><span style="color: #009900;">&#40;</span>width <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">16</span> <span style="color: #339933;">||</span> width<span style="color: #339933;">%</span><span style="color:#800080;">2</span> <span style="color: #339933;">||</span> height <span style="color: #339933;">&lt;</span><span style="color: #0000dd;">16</span> <span style="color: #339933;">||</span> height<span style="color: #339933;">%</span><span style="color:#800080;">2</span><span style="color: #009900;">&#41;</span>
        die<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Invalid resolution: %ldx%ld&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<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>vpx_img_alloc<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>raw<span style="color: #339933;">,</span> VPX_IMG_FMT_I420<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</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;Faile to allocate image&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<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;">4</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;">4</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>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Populate encoder configuration */</span>
    res <span style="color: #339933;">=</span> vpx_codec_enc_config_default<span style="color: #009900;">&#40;</span>interface<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>cfg<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: #b1b100;">if</span><span style="color: #009900;">&#40;</span>res<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;Failed to get config: %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> vpx_codec_err_to_string<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> EXIT_FAILURE<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Update the default configuration with our settings */</span>
    cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> width <span style="color: #339933;">*</span> height <span style="color: #339933;">*</span> cfg.<span style="color: #202020;">rc_target_bitrate</span>
                            <span style="color: #339933;">/</span> cfg.<span style="color: #202020;">g_w</span> <span style="color: #339933;">/</span> cfg.<span style="color: #202020;">g_h</span><span style="color: #339933;">;</span>
    cfg.<span style="color: #202020;">g_w</span> <span style="color: #339933;">=</span> width<span style="color: #339933;">;</span>
    cfg.<span style="color: #202020;">g_h</span> <span style="color: #339933;">=</span> height<span style="color: #339933;">;</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #808080; font-style: italic;">/* Enable error resilient mode */</span>                                         <span style="color: #666666; font-style: italic;">//</span>
    cfg.<span style="color: #202020;">g_error_resilient</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
    cfg.<span style="color: #202020;">g_lag_in_frames</span>   <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
    cfg.<span style="color: #202020;">kf_mode</span>           <span style="color: #339933;">=</span> VPX_KF_FIXED<span style="color: #339933;">;</span>                                     <span style="color: #666666; font-style: italic;">//</span>
                                                                              <span style="color: #666666; font-style: italic;">//</span>
    <span style="color: #808080; font-style: italic;">/* Disable automatic keyframe placement */</span>                                <span style="color: #666666; font-style: italic;">//</span>
    cfg.<span style="color: #202020;">kf_min_dist</span> <span style="color: #339933;">=</span> cfg.<span style="color: #202020;">kf_max_dist</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>                                 <span style="color: #666666; font-style: italic;">//</span>
&nbsp;
    write_ivf_file_header<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>cfg<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;">/* Open input file for this encoding pass */</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;">3</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;">3</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;">/* Initialize codec */</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vpx_codec_enc_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> <span style="color: #339933;">&amp;</span>cfg<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 initialize encoder&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        frame_avail <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        got_data <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>frame_avail <span style="color: #339933;">||</span> got_data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vpx_codec_iter_t iter <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
            <span style="color: #993333;">const</span> vpx_codec_cx_pkt_t <span style="color: #339933;">*</span>pkt<span style="color: #339933;">;</span>
&nbsp;
            flags <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</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>num_streams <span style="color: #339933;">==</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</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: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>frame_cnt <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>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VPX_EFLAG_FORCE_KF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">9</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">11</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">13</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">15</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_LAST<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_GF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_UPD_ARF<span style="color: #339933;">;</span>                        <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">14</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_GF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">:</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</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: #b1b100;">else</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: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>frame_cnt <span style="color: #339933;">%</span> <span style="color: #0000dd;">9</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                       <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">0</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>frame_cnt<span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>                                      <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #009900;">&#123;</span>                                                     <span style="color: #666666; font-style: italic;">//</span>
                            flags <span style="color: #339933;">|=</span> VPX_EFLAG_FORCE_KF<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;">else</span>                                                  <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #009900;">&#123;</span>                                                     <span style="color: #666666; font-style: italic;">//</span>
                            cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">26</span><span style="color: #339933;">;</span>                        <span style="color: #666666; font-style: italic;">//</span>
                            cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                            cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">300</span><span style="color: #339933;">;</span>                      <span style="color: #666666; font-style: italic;">//</span>
                            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>                   <span style="color: #666666; font-style: italic;">//</span>
                            flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_ARF<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>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_GF<span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">45</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                             <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">230</span><span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>                                                <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>                                                   <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_max_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">45</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_min_quantizer</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                             <span style="color: #666666; font-style: italic;">//</span>
                        cfg.<span style="color: #202020;">rc_target_bitrate</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">215</span><span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_NO_REF_LAST<span style="color: #339933;">;</span>                       <span style="color: #666666; font-style: italic;">//</span>
                        flags <span style="color: #339933;">|=</span> VP8_EFLAG_FORCE_ARF<span style="color: #339933;">;</span>                         <span style="color: #666666; font-style: italic;">//</span>
                        <span style="color: #000000; font-weight: bold;">break</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>
            frame_avail <span style="color: #339933;">=</span> read_frame<span style="color: #009900;">&#40;</span>infile<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>raw<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_encode<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>codec<span style="color: #339933;">,</span> frame_avail<span style="color: #339933;">?</span> <span style="color: #339933;">&amp;</span>raw <span style="color: #339933;">:</span> NULL<span style="color: #339933;">,</span> frame_cnt<span style="color: #339933;">,</span>
                                <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> flags<span style="color: #339933;">,</span> VPX_DL_REALTIME<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 encode frame&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            got_data <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>pkt <span style="color: #339933;">=</span> vpx_codec_get_cx_data<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>
                got_data <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>pkt<span style="color: #339933;">-&gt;</span>kind<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">case</span> VPX_CODEC_CX_FRAME_PKT<span style="color: #339933;">:</span>
                    write_ivf_frame_header<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> pkt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>fwrite<span style="color: #009900;">&#40;</span>pkt<span style="color: #339933;">-&gt;</span>data.<span style="color: #202020;">frame</span>.<span style="color: #202020;">buf</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> pkt<span style="color: #339933;">-&gt;</span>data.<span style="color: #202020;">frame</span>.<span style="color: #202020;">sz</span><span style="color: #339933;">,</span>
                              outfile<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
                    <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</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>pkt<span style="color: #339933;">-&gt;</span>kind <span style="color: #339933;">==</span> VPX_CODEC_CX_FRAME_PKT
                       <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span>pkt<span style="color: #339933;">-&gt;</span>data.<span style="color: #202020;">frame</span>.<span style="color: #202020;">flags</span> <span style="color: #339933;">&amp;</span> VPX_FRAME_IS_KEY<span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span> <span style="color: #ff0000;">&quot;K&quot;</span><span style="color: #339933;">:</span><span style="color: #ff0000;">&quot;.&quot;</span><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>
            <span style="color: #009900;">&#125;</span>
            frame_cnt<span style="color: #339933;">++;</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;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><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>
&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;Processed %d frames.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</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>
    <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;
    <span style="color: #808080; font-style: italic;">/* Try to rewrite the file header with the actual frame count */</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>fseek<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> SEEK_SET<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        write_ivf_file_header<span style="color: #009900;">&#40;</span>outfile<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>cfg<span style="color: #339933;">,</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>
    fclose<span style="color: #009900;">&#40;</span>outfile<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 Tue Aug 16 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.4 </small></address>
</body>
</html>