vpx/examples/vp8_set_maps.txt
John Koleszar 7ee516d2b3 vp8_set_maps: remove hard-coded width/height
The example for disabling the active map used a hard-coded 320x240
resolution, rather than using what was passed on the command line.

Fixes #218

Change-Id: I3aed713e8aa7fcbf18dfbffd57f142b5cd9ee492
2010-11-17 09:24:05 -05:00

97 lines
3.0 KiB
Plaintext

@TEMPLATE encoder_tmpl.c
VP8 Set Active and ROI Maps
===========================
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
This is an example demonstrating how to control the VP8 encoder's
ROI and Active maps.
ROI (Reigon of Interest) maps are a way for the application to assign
each macroblock in the image to a region, and then set quantizer and
filtering parameters on that image.
Active maps are a way for the application to specify on a
macroblock-by-macroblock basis whether there is any activity in that
macroblock.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
Configuration
-------------
An ROI map is set on frame 22. If the width of the image in macroblocks
is evenly divisble by 4, then the output will appear to have distinct
columns, where the quantizer, loopfilter, and static threshold differ
from column to column.
An active map is set on frame 33. If the width of the image in macroblocks
is evenly divisble by 4, then the output will appear to have distinct
columns, where one column will have motion and the next will not.
The active map is cleared on frame 44.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PER_FRAME_CFG
if(frame_cnt + 1 == 22) {
vpx_roi_map_t roi;
int i;
roi.rows = cfg.g_h/16;
roi.cols = cfg.g_w/16;
roi.delta_q[0] = 0;
roi.delta_q[1] = -2;
roi.delta_q[2] = -4;
roi.delta_q[3] = -6;
roi.delta_lf[0] = 0;
roi.delta_lf[1] = 1;
roi.delta_lf[2] = 2;
roi.delta_lf[3] = 3;
roi.static_threshold[0] = 1500;
roi.static_threshold[1] = 1000;
roi.static_threshold[2] = 500;
roi.static_threshold[3] = 0;
/* generate an ROI map for example */
roi.roi_map = malloc(roi.rows * roi.cols);
for(i=0;i<roi.rows*roi.cols;i++)
roi.roi_map[i] = i & 3;
if(vpx_codec_control(&codec, VP8E_SET_ROI_MAP, &roi))
die_codec(&codec, "Failed to set ROI map");
free(roi.roi_map);
} else if(frame_cnt + 1 == 33) {
vpx_active_map_t active;
int i;
active.rows = cfg.g_h/16;
active.cols = cfg.g_w/16;
/* generate active map for example */
active.active_map = malloc(active.rows * active.cols);
for(i=0;i<active.rows*active.cols;i++)
active.active_map[i] = i & 1;
if(vpx_codec_control(&codec, VP8E_SET_ACTIVEMAP, &active))
die_codec(&codec, "Failed to set active map");
free(active.active_map);
} else if(frame_cnt + 1 == 44) {
vpx_active_map_t active;
active.rows = cfg.g_h/16;
active.cols = cfg.g_w/16;
/* pass in null map to disable active_map*/
active.active_map = NULL;
if(vpx_codec_control(&codec, VP8E_SET_ACTIVEMAP, &active))
die_codec(&codec, "Failed to set active map");
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PER_FRAME_CFG
Observing The Effects
---------------------
Use the `simple_decoder` example to decode this sample, and observe
the change in the image at frames 22, 33, and 44.