summaryrefslogtreecommitdiff
path: root/examples/simple_encoder.txt
diff options
context:
space:
mode:
Diffstat (limited to 'examples/simple_encoder.txt')
-rw-r--r--examples/simple_encoder.txt105
1 files changed, 105 insertions, 0 deletions
diff --git a/examples/simple_encoder.txt b/examples/simple_encoder.txt
new file mode 100644
index 000000000..44c5b086d
--- /dev/null
+++ b/examples/simple_encoder.txt
@@ -0,0 +1,105 @@
+@TEMPLATE encoder_tmpl.c
+Simple Encoder
+==============
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
+This is an example of a simple encoder loop. It takes an input file in
+YV12 format, passes it through the encoder, and writes the compressed
+frames to disk in IVF format. 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 encoders, you only have to include `vpx_encoder.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.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
+@DEFAULT
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
+
+
+Getting The Default Configuration
+---------------------------------
+Encoders have the notion of "usage profiles." For example, an encoder
+may want to publish default configurations for both a video
+conferencing appliction and a best quality offline encoder. These
+obviously have very different default settings. Consult the
+documentation for your codec to see if it provides any default
+configurations. 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 configuration
+with settings specific to their usage. Here we set the width and height
+of the video file to that specified on the command line. We also scale
+the default bitrate based on the ratio between the default resolution
+and 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 hit
+EOF) then the frame is passed to the encoder. Otherwise, a NULL
+is passed, indicating the End-Of-Stream condition to the encoder. The
+`frame_cnt` is reused as the presentation time stamp (PTS) and each
+frame is shown for one frame-time in duration. The flags parameter is
+unused in this example. The deadline is set to VPX_DL_REALTIME to
+make 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 data
+for 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 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