Modularize resize related params from AV1_COMP
This CL groups resize related parameters from AV1_COMP into
a new struct ResizeParams, and cleans up related function
interfaces.
BUG=aomedia:2610
Change-Id: If953b18b8f396923ff788e8fef873489285341cc
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index e4f9bdf..928501f 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -2447,9 +2447,9 @@
aom_scaling_mode_t *const mode = va_arg(args, aom_scaling_mode_t *);
if (mode) {
- const int res =
- av1_set_internal_size(ctx->cpi, (AOM_SCALING)mode->h_scaling_mode,
- (AOM_SCALING)mode->v_scaling_mode);
+ const int res = av1_set_internal_size(
+ &ctx->cpi->oxcf, &ctx->cpi->resize_pending_params,
+ (AOM_SCALING)mode->h_scaling_mode, (AOM_SCALING)mode->v_scaling_mode);
return (res == 0) ? AOM_CODEC_OK : AOM_CODEC_INVALID_PARAM;
} else {
return AOM_CODEC_INVALID_PARAM;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 5bf61d1..8290723 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -1400,6 +1400,7 @@
static void init_config(struct AV1_COMP *cpi, AV1EncoderConfig *oxcf) {
AV1_COMMON *const cm = &cpi->common;
SequenceHeader *const seq_params = &cm->seq_params;
+ ResizePendingParams *resize_pending_params = &cpi->resize_pending_params;
cpi->oxcf = *oxcf;
cpi->framerate = oxcf->init_framerate;
@@ -1495,8 +1496,8 @@
cpi->ref_frame_flags = 0;
// Reset resize pending flags
- cpi->resize_pending_width = 0;
- cpi->resize_pending_height = 0;
+ resize_pending_params->width = 0;
+ resize_pending_params->height = 0;
init_buffer_indices(&cpi->force_intpel_info, cm->remapped_ref_idx);
}
@@ -4703,6 +4704,7 @@
// Calculates resize and superres params for next frame
static size_params_type calculate_next_size_params(AV1_COMP *cpi) {
const AV1EncoderConfig *oxcf = &cpi->oxcf;
+ ResizePendingParams *resize_pending_params = &cpi->resize_pending_params;
size_params_type rsz = { oxcf->width, oxcf->height, SCALE_NUMERATOR };
int resize_denom = SCALE_NUMERATOR;
if (has_no_stats_stage(cpi) && cpi->use_svc &&
@@ -4712,14 +4714,14 @@
return rsz;
}
if (is_stat_generation_stage(cpi)) return rsz;
- if (cpi->resize_pending_width && cpi->resize_pending_height) {
- rsz.resize_width = cpi->resize_pending_width;
- rsz.resize_height = cpi->resize_pending_height;
- cpi->resize_pending_width = cpi->resize_pending_height = 0;
+ if (resize_pending_params->width && resize_pending_params->height) {
+ rsz.resize_width = resize_pending_params->width;
+ rsz.resize_height = resize_pending_params->height;
+ resize_pending_params->width = resize_pending_params->height = 0;
} else {
resize_denom = calculate_next_resize_scale(cpi);
- rsz.resize_width = cpi->oxcf.width;
- rsz.resize_height = cpi->oxcf.height;
+ rsz.resize_width = oxcf->width;
+ rsz.resize_height = oxcf->height;
av1_calculate_scaled_size(&rsz.resize_width, &rsz.resize_height,
resize_denom);
}
@@ -6948,8 +6950,9 @@
return cm->error.error_code;
}
-int av1_set_internal_size(AV1_COMP *cpi, AOM_SCALING horiz_mode,
- AOM_SCALING vert_mode) {
+int av1_set_internal_size(AV1EncoderConfig *const oxcf,
+ ResizePendingParams *resize_pending_params,
+ AOM_SCALING horiz_mode, AOM_SCALING vert_mode) {
int hr = 0, hs = 0, vr = 0, vs = 0;
if (horiz_mode > ONETWO || vert_mode > ONETWO) return -1;
@@ -6958,8 +6961,8 @@
Scale2Ratio(vert_mode, &vr, &vs);
// always go to the next whole number
- cpi->resize_pending_width = (hs - 1 + cpi->oxcf.width * hr) / hs;
- cpi->resize_pending_height = (vs - 1 + cpi->oxcf.height * vr) / vs;
+ resize_pending_params->width = (hs - 1 + oxcf->width * hr) / hs;
+ resize_pending_params->height = (vs - 1 + oxcf->height * vr) / vs;
return 0;
}
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 4a3cb4f..6de08bd 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -917,6 +917,14 @@
} MotionVectorSearchParams;
typedef struct {
+ // When resize is triggered externally, the desired dimensions are stored in
+ // this struct until used in the next frame to be coded. These values are
+ // effective only for one frame and are reset after they are used.
+ int width;
+ int height;
+} ResizePendingParams;
+
+typedef struct {
// Threshold of transform domain distortion
// Index 0: Default mode evaluation, Winner mode processing is not applicable
// (Eg : IntraBc).
@@ -1217,13 +1225,8 @@
// normalize the firstpass stats. This will differ from the
// number of MBs in the current frame when the frame is
// scaled.
-
- // When resize is triggered through external control, the desired width/height
- // are stored here until use in the next frame coded. They are effective only
- // for
- // one frame and are reset after use.
- int resize_pending_width;
- int resize_pending_height;
+ // Resize related parameters
+ ResizePendingParams resize_pending_params;
TileDataEnc *tile_data;
int allocated_tiles; // Keep track of memory allocated for tiles.
@@ -1438,8 +1441,9 @@
int av1_get_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
-int av1_set_internal_size(AV1_COMP *cpi, AOM_SCALING horiz_mode,
- AOM_SCALING vert_mode);
+int av1_set_internal_size(AV1EncoderConfig *const oxcf,
+ ResizePendingParams *resize_pending_params,
+ AOM_SCALING horiz_mode, AOM_SCALING vert_mode);
int av1_get_quantizer(struct AV1_COMP *cpi);
diff --git a/av1/encoder/ratectrl.c b/av1/encoder/ratectrl.c
index d24a929..ea4ff9f 100644
--- a/av1/encoder/ratectrl.c
+++ b/av1/encoder/ratectrl.c
@@ -2021,12 +2021,14 @@
RATE_CONTROL *const rc = &cpi->rc;
AV1_COMMON *const cm = &cpi->common;
GF_GROUP *const gf_group = &cpi->gf_group;
+ ResizePendingParams *const resize_pending_params =
+ &cpi->resize_pending_params;
int gf_update = 0;
int target;
const int resize_pending =
- (cpi->resize_pending_width && cpi->resize_pending_height &&
- (cm->width != cpi->resize_pending_width ||
- cm->height != cpi->resize_pending_height));
+ (resize_pending_params->width && resize_pending_params->height &&
+ (cm->width != resize_pending_params->width ||
+ cm->height != resize_pending_params->height));
// Turn this on to explicitly set the reference structure rather than
// relying on internal/default structure.
const int set_reference_structure = 1;