Common alloc_mi() function for encoder/decoder.
This does not change the behavior as this common function uses
'mi_alloc_bsize' (set by set_mb_mi() function earlier) to set mi_alloc_*
appropriately (as the encoder was doing before).
BUG=aomedia:2610
Change-Id: Ibca7798339c3cc60a6336845b3c2ba9d998c8a44
diff --git a/av1/common/alloccommon.c b/av1/common/alloccommon.c
index 7c5d545..fd66022 100644
--- a/av1/common/alloccommon.c
+++ b/av1/common/alloccommon.c
@@ -217,10 +217,41 @@
return 0;
}
+// Allocate the dynamically allocated arrays in 'mi_params' assuming
+// 'mi_params->set_mb_mi()' was already called earlier to initialize the rest of
+// the struct members.
+static int alloc_mi(CommonModeInfoParams *mi_params) {
+ const int aligned_mi_rows = calc_mi_size(mi_params->mi_rows);
+ const int mi_grid_size = mi_params->mi_stride * aligned_mi_rows;
+ const int alloc_size_1d = mi_size_wide[mi_params->mi_alloc_bsize];
+ const int alloc_mi_size =
+ mi_params->mi_alloc_stride * (aligned_mi_rows / alloc_size_1d);
+
+ if (mi_params->mi_alloc_size < alloc_mi_size ||
+ mi_params->mi_grid_size < mi_grid_size) {
+ mi_params->free_mi(mi_params);
+
+ mi_params->mi = aom_calloc(alloc_mi_size, sizeof(*mi_params->mi));
+ if (!mi_params->mi) return 1;
+ mi_params->mi_alloc_size = alloc_mi_size;
+
+ mi_params->mi_grid_base = (MB_MODE_INFO **)aom_calloc(
+ mi_grid_size, sizeof(*mi_params->mi_grid_base));
+ if (!mi_params->mi_grid_base) return 1;
+ mi_params->mi_grid_size = mi_grid_size;
+
+ mi_params->tx_type_map =
+ aom_calloc(mi_grid_size, sizeof(*mi_params->tx_type_map));
+ if (!mi_params->tx_type_map) return 1;
+ }
+
+ return 0;
+}
+
int av1_alloc_context_buffers(AV1_COMMON *cm, int width, int height) {
CommonModeInfoParams *const mi_params = &cm->mi_params;
mi_params->set_mb_mi(mi_params, width, height);
- if (mi_params->alloc_mi(mi_params)) goto fail;
+ if (alloc_mi(mi_params)) goto fail;
return 0;
fail:
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h
index 7d193e7..1e04084 100644
--- a/av1/common/av1_common_int.h
+++ b/av1/common/av1_common_int.h
@@ -389,8 +389,7 @@
uint8_t *tx_type_map;
- // Separate mi functions between encoder and decoder.
- int (*alloc_mi)(struct CommonModeInfoParams *mi_params);
+ // Function pointers to allow separate logic for encoder and decoder.
void (*free_mi)(struct CommonModeInfoParams *mi_params);
void (*setup_mi)(struct CommonModeInfoParams *mi_params);
void (*set_mb_mi)(struct CommonModeInfoParams *mi_params, int width,
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index 041776b..ba98555 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -83,32 +83,6 @@
mi_grid_size * sizeof(*mi_params->mi_grid_base));
}
-static int dec_alloc_mi(CommonModeInfoParams *mi_params) {
- const int mi_grid_size =
- mi_params->mi_stride * calc_mi_size(mi_params->mi_rows);
-
- if (mi_params->mi_alloc_size < mi_grid_size ||
- mi_params->mi_grid_size < mi_grid_size) {
- mi_params->free_mi(mi_params);
-
- mi_params->mi = aom_calloc(mi_grid_size, sizeof(*mi_params->mi));
- if (!mi_params->mi) return 1;
- mi_params->mi_alloc_size = mi_grid_size;
-
- mi_params->mi_grid_base =
- (MB_MODE_INFO **)aom_calloc(mi_grid_size, sizeof(MB_MODE_INFO *));
- if (!mi_params->mi_grid_base) return 1;
- mi_params->mi_grid_size = mi_grid_size;
-
- mi_params->tx_type_map =
- aom_calloc(calc_mi_size(mi_params->mi_rows) * mi_params->mi_stride,
- sizeof(*mi_params->tx_type_map));
- if (!mi_params->tx_type_map) return 1;
- }
-
- return 0;
-}
-
static void dec_free_mi(CommonModeInfoParams *mi_params) {
aom_free(mi_params->mi);
mi_params->mi = NULL;
@@ -159,7 +133,6 @@
cm->seq_params.bit_depth = AOM_BITS_8;
- cm->mi_params.alloc_mi = dec_alloc_mi;
cm->mi_params.free_mi = dec_free_mi;
cm->mi_params.setup_mi = dec_setup_mi;
cm->mi_params.set_mb_mi = dec_set_mb_mi;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index dd2ebab..2151183 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -681,35 +681,6 @@
mi_grid_size * sizeof(*mi_params->tx_type_map));
}
-static int enc_alloc_mi(CommonModeInfoParams *mi_params) {
- const int mi_grid_size =
- mi_params->mi_stride * calc_mi_size(mi_params->mi_rows);
- const int alloc_size_1d = mi_size_wide[mi_params->mi_alloc_bsize];
- const int alloc_mi_size = mi_params->mi_alloc_stride *
- (calc_mi_size(mi_params->mi_rows) / alloc_size_1d);
-
- if (mi_params->mi_alloc_size < alloc_mi_size ||
- mi_params->mi_grid_size < mi_grid_size) {
- mi_params->free_mi(mi_params);
-
- mi_params->mi = aom_calloc(alloc_mi_size, sizeof(*mi_params->mi));
- if (!mi_params->mi) return 1;
- mi_params->mi_alloc_size = alloc_mi_size;
-
- mi_params->mi_grid_base =
- (MB_MODE_INFO **)aom_calloc(mi_grid_size, sizeof(MB_MODE_INFO *));
- if (!mi_params->mi_grid_base) return 1;
- mi_params->mi_grid_size = mi_grid_size;
-
- mi_params->tx_type_map =
- aom_calloc(calc_mi_size(mi_params->mi_rows) * mi_params->mi_stride,
- sizeof(*mi_params->tx_type_map));
- if (!mi_params->tx_type_map) return 1;
- }
-
- return 0;
-}
-
static void enc_free_mi(CommonModeInfoParams *mi_params) {
aom_free(mi_params->mi);
mi_params->mi = NULL;
@@ -3038,7 +3009,6 @@
cm->error.setjmp = 1;
CommonModeInfoParams *const mi_params = &cm->mi_params;
- mi_params->alloc_mi = enc_alloc_mi;
mi_params->free_mi = enc_free_mi;
mi_params->setup_mi = enc_setup_mi;
mi_params->set_mb_mi = enc_set_mb_mi;