@TEMPLATE encoder_tmpl.c
VP8 Set Reference Frame
=======================
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
This is an example demonstrating how to overwrite the VP8 encoder's
internal reference frame. In the sample we set the last frame to the
current frame. If this is done at a cut scene it will avoid a keyframe.
This technique could be used to bounce between two cameras.

Note that the decoder would also have to set the reference frame to the
same value on the same frame, or the video will become corrupt.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION


Usage
-----
This example adds a single argument to the `simple_encoder` example,
which specifies the frame number to update the reference frame on.
The parameter is parsed as follows:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE
if(argc!=6)
    die("Usage: %s <width> <height> <infile> <outfile> <frame>\n",
        argv[0]);

    update_frame_num = atoi(argv[5]);
    if(!update_frame_num)
        die("Couldn't parse frame number '%s'\n", argv[5]);

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE


Extra Variables
---------------
This example maintains the frame number passed on the command line
in the `update_frame_num` variable:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS
int                  update_frame_num = 0;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS


Configuration
-------------

The reference frame is updated on the frame specified on the command
line.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME
frame_avail = read_frame(infile, &raw);

if(frame_cnt + 1 == update_frame_num) {
    vpx_ref_frame_t ref;

    ref.frame_type = VP8_LAST_FRAME;
    ref.img        = raw;

    if(vpx_codec_control(&codec, VP8_SET_REFERENCE, &ref))
        die_codec(&codec, "Failed to set reference frame");
}

if(vpx_codec_encode(&codec, frame_avail? &raw : NULL, frame_cnt,
                    1, flags, VPX_DL_REALTIME))
    die_codec(&codec, "Failed to encode frame");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME


Observing The Effects
---------------------
Use the `simple_encoder` example to encode a sample with a cut scene.
Determine the frame number of the cut scene by looking for a generated
key-frame (indicated by a 'K'). Supply that frame number as an argument
to this example, and observe that no key-frame is generated.
