Upstream version 5.34.98.0
[platform/framework/web/crosswalk.git] / src / third_party / libvpx / source / libvpx / examples / vp8cx_set_ref.txt
1 @TEMPLATE encoder_tmpl.c
2 VP8 Set Reference Frame
3 =======================
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
5 This is an example demonstrating how to overwrite the VP8 encoder's
6 internal reference frame. In the sample we set the last frame to the
7 current frame. If this is done at a cut scene it will avoid a keyframe.
8 This technique could be used to bounce between two cameras.
9
10 Note that the decoder would also have to set the reference frame to the
11 same value on the same frame, or the video will become corrupt.
12 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
13
14
15 Usage
16 -----
17 This example adds a single argument to the `simple_encoder` example,
18 which specifies the frame number to update the reference frame on.
19 The parameter is parsed as follows:
20
21 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE
22 if(argc!=6)
23     die("Usage: %s <width> <height> <infile> <outfile> <frame>\n",
24         argv[0]);
25
26     update_frame_num = atoi(argv[5]);
27     if(!update_frame_num)
28         die("Couldn't parse frame number '%s'\n", argv[5]);
29
30 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE
31
32
33 Extra Variables
34 ---------------
35 This example maintains the frame number passed on the command line
36 in the `update_frame_num` variable:
37
38 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS
39 int                  update_frame_num = 0;
40 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS
41
42
43 Configuration
44 -------------
45
46 The reference frame is updated on the frame specified on the command
47 line.
48
49 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME
50 frame_avail = read_frame(infile, &raw);
51
52 if(frame_cnt + 1 == update_frame_num) {
53     vpx_ref_frame_t ref;
54
55     ref.frame_type = VP8_LAST_FRAME;
56     ref.img        = raw;
57
58     if(vpx_codec_control(&codec, VP8_SET_REFERENCE, &ref))
59         die_codec(&codec, "Failed to set reference frame");
60 }
61
62 if(vpx_codec_encode(&codec, frame_avail? &raw : NULL, frame_cnt,
63                     1, flags, VPX_DL_REALTIME))
64     die_codec(&codec, "Failed to encode frame");
65 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENCODE_FRAME
66
67
68 Observing The Effects
69 ---------------------
70 Use the `simple_encoder` example to encode a sample with a cut scene.
71 Determine the frame number of the cut scene by looking for a generated
72 key-frame (indicated by a 'K'). Supply that frame number as an argument
73 to this example, and observe that no key-frame is generated.