| Index: source/libvpx/vp9/common/vp9_alloccommon.c
|
| ===================================================================
|
| --- source/libvpx/vp9/common/vp9_alloccommon.c (revision 278778)
|
| +++ source/libvpx/vp9/common/vp9_alloccommon.c (working copy)
|
| @@ -53,33 +53,42 @@
|
| }
|
|
|
| static int alloc_mi(VP9_COMMON *cm, int mi_size) {
|
| - cm->mip = (MODE_INFO *)vpx_calloc(mi_size, sizeof(*cm->mip));
|
| - if (cm->mip == NULL)
|
| - return 1;
|
| + int i;
|
|
|
| - cm->prev_mip = (MODE_INFO *)vpx_calloc(mi_size, sizeof(*cm->prev_mip));
|
| - if (cm->prev_mip == NULL)
|
| - return 1;
|
| + for (i = 0; i < 2; ++i) {
|
| + cm->mip_array[i] =
|
| + (MODE_INFO *)vpx_calloc(mi_size, sizeof(*cm->mip));
|
| + if (cm->mip_array[i] == NULL)
|
| + return 1;
|
|
|
| - cm->mi_grid_base =
|
| - (MODE_INFO **)vpx_calloc(mi_size, sizeof(*cm->mi_grid_base));
|
| - if (cm->mi_grid_base == NULL)
|
| - return 1;
|
| + cm->mi_grid_base_array[i] =
|
| + (MODE_INFO **)vpx_calloc(mi_size, sizeof(*cm->mi_grid_base));
|
| + if (cm->mi_grid_base_array[i] == NULL)
|
| + return 1;
|
| + }
|
|
|
| - cm->prev_mi_grid_base =
|
| - (MODE_INFO **)vpx_calloc(mi_size, sizeof(*cm->prev_mi_grid_base));
|
| - if (cm->prev_mi_grid_base == NULL)
|
| - return 1;
|
| + // Init the index.
|
| + cm->mi_idx = 0;
|
| + cm->prev_mi_idx = 1;
|
|
|
| + cm->mip = cm->mip_array[cm->mi_idx];
|
| + cm->prev_mip = cm->mip_array[cm->prev_mi_idx];
|
| + cm->mi_grid_base = cm->mi_grid_base_array[cm->mi_idx];
|
| + cm->prev_mi_grid_base = cm->mi_grid_base_array[cm->prev_mi_idx];
|
| +
|
| return 0;
|
| }
|
|
|
| static void free_mi(VP9_COMMON *cm) {
|
| - vpx_free(cm->mip);
|
| - vpx_free(cm->prev_mip);
|
| - vpx_free(cm->mi_grid_base);
|
| - vpx_free(cm->prev_mi_grid_base);
|
| + int i;
|
|
|
| + for (i = 0; i < 2; ++i) {
|
| + vpx_free(cm->mip_array[i]);
|
| + cm->mip_array[i] = NULL;
|
| + vpx_free(cm->mi_grid_base_array[i]);
|
| + cm->mi_grid_base_array[i] = NULL;
|
| + }
|
| +
|
| cm->mip = NULL;
|
| cm->prev_mip = NULL;
|
| cm->mi_grid_base = NULL;
|
| @@ -237,13 +246,16 @@
|
| }
|
|
|
| void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) {
|
| + // Swap indices.
|
| + const int tmp = cm->mi_idx;
|
| + cm->mi_idx = cm->prev_mi_idx;
|
| + cm->prev_mi_idx = tmp;
|
| +
|
| // Current mip will be the prev_mip for the next frame.
|
| - MODE_INFO *temp = cm->prev_mip;
|
| - MODE_INFO **temp2 = cm->prev_mi_grid_base;
|
| - cm->prev_mip = cm->mip;
|
| - cm->mip = temp;
|
| - cm->prev_mi_grid_base = cm->mi_grid_base;
|
| - cm->mi_grid_base = temp2;
|
| + cm->mip = cm->mip_array[cm->mi_idx];
|
| + cm->prev_mip = cm->mip_array[cm->prev_mi_idx];
|
| + cm->mi_grid_base = cm->mi_grid_base_array[cm->mi_idx];
|
| + cm->prev_mi_grid_base = cm->mi_grid_base_array[cm->prev_mi_idx];
|
|
|
| // Update the upper left visible macroblock ptrs.
|
| cm->mi = cm->mip + cm->mi_stride + 1;
|
|
|