96 lines · 4.2 KB · Text
RawDownload
@TEMPLATE decoder_tmpl.cSimple Decoder==============~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTIONThis is an example of a simple decoder loop. It takes an input filecontaining the compressed data (in IVF format), passes it through thedecoder, and writes the decompressed frames to disk. Other decoderexamples build upon this one. The details of the IVF format have been elided from this example forsimplicity of presentation, as IVF files will not generally be used byyour application. In general, an IVF file consists of a file header,followed by a variable number of frames. Each frame consists of a frameheader followed by a variable length payload. The length of the payloadis specified in the first four bytes of the frame header. The payload isthe raw compressed data.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION  Standard Includes-----------------For decoders, you only have to include `vpx_decoder.h` and then anyheader files for the specific codecs you use. In this case, we're usingvp8. The `VPX_CODEC_DISABLE_COMPAT` macro can be defined to ensurestrict compliance with the latest SDK by disabling some backwardscompatibility 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 forthe VP8 decoder, but the code is analogous for all algorithms. Replace`vpx_codec_vp8_dx()` with a pointer to the interface exposed by thealgorithm you want to use. The `cfg` argument is left as NULL in thisexample, because we want the algorithm to determine the streamconfiguration (width/height) and allocate memory automatically. Thisparameter 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 datais associated with the frame in this example, so the `user_priv`parameter is NULL. The `deadline` parameter is left at zero for thisexample. This parameter is generally only used when doing adaptivepostprocessing.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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` isinitialized to NULL each time `vpx_codec_decode` is called.`vpx_codec_get_frame` is called in a loop, returning a pointer to adecoded 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 isimportant 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 wasan error, a descriptive message is printed and the program exits. Withfew exeptions, vpx_codec functions return an enumerated error status,with the value `0` indicating success.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DIE_CODEC

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t