@TEMPLATE decoder_tmpl.c
Simple Decoder
==============
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
This is an example of a simple decoder loop. It takes an input file
containing the compressed data (in IVF format), passes it through the
decoder, and writes the decompressed frames to disk. Other decoder
examples build upon this one.

The details of the IVF format have been elided from this example for
simplicity of presentation, as IVF files will not generally be used by
your application. In general, an IVF file consists of a file header,
followed by a variable number of frames. Each frame consists of a frame
header followed by a variable length payload. The length of the payload
is specified in the first four bytes of the frame header. The payload is
the raw compressed data.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION


Standard Includes
-----------------
For decoders, you only have to include `vpx_decoder.h` and then any
header files for the specific codecs you use. In this case, we're using
vp8. The `VPX_CODEC_DISABLE_COMPAT` macro can be defined to ensure
strict compliance with the latest SDK by disabling some backwards
compatibility features. Defining this macro is encouraged.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES


Initializing The Codec
----------------------
The decoder is initialized by the following code. This is an example for
the VP8 decoder, but the code is analogous for all algorithms. Replace
`vpx_codec_vp8_dx()` with a pointer to the interface exposed by the
algorithm you want to use. The `cfg` argument is left as NULL in this
example, because we want the algorithm to determine the stream
configuration (width/height) and allocate memory automatically. This
parameter is generally only used if you need to preallocate memory,
particularly in External Memory Allocation mode.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT


Decoding A Frame
----------------
Once the frame has been read into memory, it is decoded using the
`vpx_codec_decode` function. The call takes a pointer to the data
(`frame`) and the length of the data (`frame_sz`). No application data
is associated with the frame in this example, so the `user_priv`
parameter is NULL. The `deadline` parameter is left at zero for this
example. This parameter is generally only used when doing adaptive
postprocessing.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE

Codecs may produce a variable number of output frames for every call to
`vpx_codec_decode`. These frames are retrieved by the
`vpx_codec_get_frame` iterator function. The iterator variable `iter` is
initialized to NULL each time `vpx_codec_decode` is called.
`vpx_codec_get_frame` is called in a loop, returning a pointer to a
decoded image or NULL to indicate the end of list.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GET_FRAME
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ GET_FRAME


Processing The Decoded Data
---------------------------
In this example, we simply write the encoded data to disk. It is
important to honor the image's `stride` values.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX


Cleanup
-------
The `vpx_codec_destroy` call frees any memory allocated by the codec.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DESTROY


Error Handling
--------------
This example does not special case any error return codes. If there was
an error, a descriptive message is printed and the program exits. With
few exeptions, vpx_codec functions return an enumerated error status,
with the value `0` indicating success.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC
@DEFAULT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC
