OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... |
37 cm->mi_stride = calc_mi_size(cm->mi_cols); | 37 cm->mi_stride = calc_mi_size(cm->mi_cols); |
38 | 38 |
39 cm->mb_cols = (cm->mi_cols + 1) >> 1; | 39 cm->mb_cols = (cm->mi_cols + 1) >> 1; |
40 cm->mb_rows = (cm->mi_rows + 1) >> 1; | 40 cm->mb_rows = (cm->mi_rows + 1) >> 1; |
41 cm->MBs = cm->mb_rows * cm->mb_cols; | 41 cm->MBs = cm->mb_rows * cm->mb_cols; |
42 } | 42 } |
43 | 43 |
44 static void setup_mi(VP9_COMMON *cm) { | 44 static void setup_mi(VP9_COMMON *cm) { |
45 cm->mi = cm->mip + cm->mi_stride + 1; | 45 cm->mi = cm->mip + cm->mi_stride + 1; |
46 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; | 46 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; |
47 cm->mi_grid_visible = cm->mi_grid_base + cm->mi_stride + 1; | |
48 cm->prev_mi_grid_visible = cm->prev_mi_grid_base + cm->mi_stride + 1; | |
49 | 47 |
50 vpx_memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip)); | 48 vpx_memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip)); |
51 | |
52 vpx_memset(cm->mi_grid_base, 0, cm->mi_stride * (cm->mi_rows + 1) * | |
53 sizeof(*cm->mi_grid_base)); | |
54 | |
55 clear_mi_border(cm, cm->prev_mip); | 49 clear_mi_border(cm, cm->prev_mip); |
56 } | 50 } |
57 | 51 |
58 static int alloc_mi(VP9_COMMON *cm, int mi_size) { | 52 static int alloc_mi(VP9_COMMON *cm, int mi_size) { |
59 int i; | 53 int i; |
60 | 54 |
61 for (i = 0; i < 2; ++i) { | 55 for (i = 0; i < 2; ++i) { |
62 cm->mip_array[i] = | 56 cm->mip_array[i] = |
63 (MODE_INFO *)vpx_calloc(mi_size, sizeof(MODE_INFO)); | 57 (MODE_INFO *)vpx_calloc(mi_size, sizeof(MODE_INFO)); |
64 if (cm->mip_array[i] == NULL) | 58 if (cm->mip_array[i] == NULL) |
65 return 1; | 59 return 1; |
66 | |
67 cm->mi_grid_base_array[i] = | |
68 (MODE_INFO **)vpx_calloc(mi_size, sizeof(MODE_INFO*)); | |
69 if (cm->mi_grid_base_array[i] == NULL) | |
70 return 1; | |
71 } | 60 } |
72 | 61 |
73 cm->mi_alloc_size = mi_size; | 62 cm->mi_alloc_size = mi_size; |
74 | 63 |
75 // Init the index. | 64 // Init the index. |
76 cm->mi_idx = 0; | 65 cm->mi_idx = 0; |
77 cm->prev_mi_idx = 1; | 66 cm->prev_mi_idx = 1; |
78 | 67 |
79 cm->mip = cm->mip_array[cm->mi_idx]; | 68 cm->mip = cm->mip_array[cm->mi_idx]; |
80 cm->prev_mip = cm->mip_array[cm->prev_mi_idx]; | 69 cm->prev_mip = cm->mip_array[cm->prev_mi_idx]; |
81 cm->mi_grid_base = cm->mi_grid_base_array[cm->mi_idx]; | |
82 cm->prev_mi_grid_base = cm->mi_grid_base_array[cm->prev_mi_idx]; | |
83 | 70 |
84 return 0; | 71 return 0; |
85 } | 72 } |
86 | 73 |
87 static void free_mi(VP9_COMMON *cm) { | 74 static void free_mi(VP9_COMMON *cm) { |
88 int i; | 75 int i; |
89 | 76 |
90 for (i = 0; i < 2; ++i) { | 77 for (i = 0; i < 2; ++i) { |
91 vpx_free(cm->mip_array[i]); | 78 vpx_free(cm->mip_array[i]); |
92 cm->mip_array[i] = NULL; | 79 cm->mip_array[i] = NULL; |
93 vpx_free(cm->mi_grid_base_array[i]); | |
94 cm->mi_grid_base_array[i] = NULL; | |
95 } | 80 } |
96 | 81 |
97 cm->mip = NULL; | 82 cm->mip = NULL; |
98 cm->prev_mip = NULL; | 83 cm->prev_mip = NULL; |
99 cm->mi_grid_base = NULL; | |
100 cm->prev_mi_grid_base = NULL; | |
101 } | 84 } |
102 | 85 |
103 void vp9_free_ref_frame_buffers(VP9_COMMON *cm) { | 86 void vp9_free_ref_frame_buffers(VP9_COMMON *cm) { |
104 int i; | 87 int i; |
105 | 88 |
106 for (i = 0; i < FRAME_BUFFERS; ++i) { | 89 for (i = 0; i < FRAME_BUFFERS; ++i) { |
107 vp9_free_frame_buffer(&cm->frame_bufs[i].buf); | 90 vp9_free_frame_buffer(&cm->frame_bufs[i].buf); |
108 | 91 |
109 if (cm->frame_bufs[i].ref_count > 0 && | 92 if (cm->frame_bufs[i].ref_count > 0 && |
110 cm->frame_bufs[i].raw_frame_buffer.data != NULL) { | 93 cm->frame_bufs[i].raw_frame_buffer.data != NULL) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 | 200 |
218 void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) { | 201 void vp9_swap_mi_and_prev_mi(VP9_COMMON *cm) { |
219 // Swap indices. | 202 // Swap indices. |
220 const int tmp = cm->mi_idx; | 203 const int tmp = cm->mi_idx; |
221 cm->mi_idx = cm->prev_mi_idx; | 204 cm->mi_idx = cm->prev_mi_idx; |
222 cm->prev_mi_idx = tmp; | 205 cm->prev_mi_idx = tmp; |
223 | 206 |
224 // Current mip will be the prev_mip for the next frame. | 207 // Current mip will be the prev_mip for the next frame. |
225 cm->mip = cm->mip_array[cm->mi_idx]; | 208 cm->mip = cm->mip_array[cm->mi_idx]; |
226 cm->prev_mip = cm->mip_array[cm->prev_mi_idx]; | 209 cm->prev_mip = cm->mip_array[cm->prev_mi_idx]; |
227 cm->mi_grid_base = cm->mi_grid_base_array[cm->mi_idx]; | |
228 cm->prev_mi_grid_base = cm->mi_grid_base_array[cm->prev_mi_idx]; | |
229 | 210 |
230 // Update the upper left visible macroblock ptrs. | 211 // Update the upper left visible macroblock ptrs. |
231 cm->mi = cm->mip + cm->mi_stride + 1; | 212 cm->mi = cm->mip + cm->mi_stride + 1; |
232 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; | 213 cm->prev_mi = cm->prev_mip + cm->mi_stride + 1; |
233 cm->mi_grid_visible = cm->mi_grid_base + cm->mi_stride + 1; | |
234 cm->prev_mi_grid_visible = cm->prev_mi_grid_base + cm->mi_stride + 1; | |
235 } | 214 } |
OLD | NEW |