John KoleszarInitial WebM release0ea50ce16 years agoHistory
105 lines · 4.5 KB · Text
RawDownload
@TEMPLATE encoder_tmpl.cSimple Encoder==============~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTIONThis is an example of a simple encoder loop. It takes an input file inYV12 format, passes it through the encoder, and writes the compressedframes to disk in IVF format. Other decoder examples build upon thisone. 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 encoders, you only have to include `vpx_encoder.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.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES  Getting The Default Configuration---------------------------------Encoders have the notion of "usage profiles." For example, an encodermay want to publish default configurations for both a videoconferencing appliction and a best quality offline encoder. Theseobviously have very different default settings. Consult thedocumentation for your codec to see if it provides any defaultconfigurations. All codecs provide a default configuration, number 0,which is valid for material in the vacinity of QCIF/QVGA.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_DEF_CFG@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_DEF_CFG  Updating The Configuration---------------------------------Almost all applications will want to update the default configurationwith settings specific to their usage. Here we set the width and heightof the video file to that specified on the command line. We also scalethe default bitrate based on the ratio between the default resolutionand the resolution specified on the command line.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_SET_CFG@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_SET_CFG  Initializing The Codec----------------------The encoder is initialized by the following code.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INIT@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INIT  Encoding A Frame----------------The frame is read as a continuous block (size width * height * 3 / 2)from the input file. If a frame was read (the input file has not hitEOF) then the frame is passed to the encoder. Otherwise, a NULLis passed, indicating the End-Of-Stream condition to the encoder. The`frame_cnt` is reused as the presentation time stamp (PTS) and eachframe is shown for one frame-time in duration. The flags parameter isunused in this example. The deadline is set to VPX_DL_REALTIME tomake the example run as quickly as possible.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME Processing The Encoded Data---------------------------Each packet of type `VPX_CODEC_CX_FRAME_PKT` contains the encoded datafor this frame. We write a IVF frame header, followed by the raw data.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME@DEFAULT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_FRAME  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