Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: source/libvpx/vp9/common/vp9_blockd.h

Issue 232133009: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/common/vp9_alloccommon.c ('k') | source/libvpx/vp9/common/vp9_blockd.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 static INLINE int b_height_log2(BLOCK_SIZE sb_type) { 113 static INLINE int b_height_log2(BLOCK_SIZE sb_type) {
114 return b_height_log2_lookup[sb_type]; 114 return b_height_log2_lookup[sb_type];
115 } 115 }
116 116
117 static INLINE int mi_width_log2(BLOCK_SIZE sb_type) { 117 static INLINE int mi_width_log2(BLOCK_SIZE sb_type) {
118 return mi_width_log2_lookup[sb_type]; 118 return mi_width_log2_lookup[sb_type];
119 } 119 }
120 120
121 // This structure now relates to 8x8 block regions. 121 // This structure now relates to 8x8 block regions.
122 typedef struct { 122 typedef struct {
123 MB_PREDICTION_MODE mode, uv_mode; 123 // Common for both INTER and INTRA blocks
124 BLOCK_SIZE sb_type;
125 MB_PREDICTION_MODE mode;
126 TX_SIZE tx_size;
127 uint8_t skip;
128 uint8_t segment_id;
129 uint8_t seg_id_predicted; // valid only when temporal_update is enabled
130
131 // Only for INTRA blocks
132 MB_PREDICTION_MODE uv_mode;
133
134 // Only for INTER blocks
124 MV_REFERENCE_FRAME ref_frame[2]; 135 MV_REFERENCE_FRAME ref_frame[2];
125 TX_SIZE tx_size; 136 int_mv mv[2];
126 int_mv mv[2]; // for each reference frame used
127 int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES]; 137 int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
128
129 uint8_t mode_context[MAX_REF_FRAMES]; 138 uint8_t mode_context[MAX_REF_FRAMES];
130
131 unsigned char skip; // 0=need to decode coeffs, 1=no coefficients
132 unsigned char segment_id; // Segment id for this block.
133
134 // Flags used for prediction status of various bit-stream signals
135 unsigned char seg_id_predicted;
136
137 INTERP_FILTER interp_filter; 139 INTERP_FILTER interp_filter;
138
139 BLOCK_SIZE sb_type;
140 } MB_MODE_INFO; 140 } MB_MODE_INFO;
141 141
142 typedef struct { 142 typedef struct {
143 MB_MODE_INFO mbmi; 143 MB_MODE_INFO mbmi;
144 b_mode_info bmi[4]; 144 b_mode_info bmi[4];
145 } MODE_INFO; 145 } MODE_INFO;
146 146
147 static INLINE MB_PREDICTION_MODE get_y_mode(const MODE_INFO *mi, int block) { 147 static INLINE MB_PREDICTION_MODE get_y_mode(const MODE_INFO *mi, int block) {
148 return mi->mbmi.sb_type < BLOCK_8X8 ? mi->bmi[block].as_mode 148 return mi->mbmi.sb_type < BLOCK_8X8 ? mi->bmi[block].as_mode
149 : mi->mbmi.mode; 149 : mi->mbmi.mode;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // TODO(dkovalev): idx is not really required and should be removed, now it 197 // TODO(dkovalev): idx is not really required and should be removed, now it
198 // is used in vp9_onyxd_if.c 198 // is used in vp9_onyxd_if.c
199 int idx; 199 int idx;
200 YV12_BUFFER_CONFIG *buf; 200 YV12_BUFFER_CONFIG *buf;
201 struct scale_factors sf; 201 struct scale_factors sf;
202 } RefBuffer; 202 } RefBuffer;
203 203
204 typedef struct macroblockd { 204 typedef struct macroblockd {
205 struct macroblockd_plane plane[MAX_MB_PLANE]; 205 struct macroblockd_plane plane[MAX_MB_PLANE];
206 206
207 MODE_INFO *last_mi; 207 int mi_stride;
208 int mode_info_stride;
209 208
210 // A NULL indicates that the 8x8 is not part of the image 209 // A NULL indicates that the 8x8 is not part of the image
211 MODE_INFO **mi_8x8; 210 MODE_INFO **mi;
212 MODE_INFO **prev_mi_8x8;
213 MODE_INFO *mi_stream;
214 211
215 int up_available; 212 int up_available;
216 int left_available; 213 int left_available;
217 214
218 /* Distance of MB away from frame edges */ 215 /* Distance of MB away from frame edges */
219 int mb_to_left_edge; 216 int mb_to_left_edge;
220 int mb_to_right_edge; 217 int mb_to_right_edge;
221 int mb_to_top_edge; 218 int mb_to_top_edge;
222 int mb_to_bottom_edge; 219 int mb_to_bottom_edge;
223 220
224 /* pointers to reference frames */ 221 /* pointers to reference frames */
225 RefBuffer *block_refs[2]; 222 RefBuffer *block_refs[2];
226 223
227 /* pointer to current frame */ 224 /* pointer to current frame */
228 const YV12_BUFFER_CONFIG *cur_buf; 225 const YV12_BUFFER_CONFIG *cur_buf;
229 226
230 /* mc buffer */ 227 /* mc buffer */
231 DECLARE_ALIGNED(16, uint8_t, mc_buf[80 * 2 * 80 * 2]); 228 DECLARE_ALIGNED(16, uint8_t, mc_buf[80 * 2 * 80 * 2]);
232 229
233 int lossless; 230 int lossless;
234 /* Inverse transform function pointers. */ 231 /* Inverse transform function pointers. */
235 void (*itxm_add)(const int16_t *input, uint8_t *dest, int stride, int eob); 232 void (*itxm_add)(const int16_t *input, uint8_t *dest, int stride, int eob);
236 233
237 const InterpKernel *interp_kernel;
238
239 int corrupted; 234 int corrupted;
240 235
241 /* Y,U,V,(A) */ 236 DECLARE_ALIGNED(16, int16_t, dqcoeff[MAX_MB_PLANE][64 * 64]);
237
242 ENTROPY_CONTEXT *above_context[MAX_MB_PLANE]; 238 ENTROPY_CONTEXT *above_context[MAX_MB_PLANE];
243 ENTROPY_CONTEXT left_context[MAX_MB_PLANE][16]; 239 ENTROPY_CONTEXT left_context[MAX_MB_PLANE][16];
244 240
245 PARTITION_CONTEXT *above_seg_context; 241 PARTITION_CONTEXT *above_seg_context;
246 PARTITION_CONTEXT left_seg_context[8]; 242 PARTITION_CONTEXT left_seg_context[8];
247 } MACROBLOCKD; 243 } MACROBLOCKD;
248 244
249
250
251 static INLINE BLOCK_SIZE get_subsize(BLOCK_SIZE bsize, 245 static INLINE BLOCK_SIZE get_subsize(BLOCK_SIZE bsize,
252 PARTITION_TYPE partition) { 246 PARTITION_TYPE partition) {
253 const BLOCK_SIZE subsize = subsize_lookup[partition][bsize]; 247 const BLOCK_SIZE subsize = subsize_lookup[partition][bsize];
254 assert(subsize < BLOCK_SIZES); 248 assert(subsize < BLOCK_SIZES);
255 return subsize; 249 return subsize;
256 } 250 }
257 251
258 extern const TX_TYPE mode2txfm_map[MB_MODE_COUNT]; 252 extern const TX_TYPE intra_mode_to_tx_type_lookup[INTRA_MODES];
253
254 static INLINE TX_TYPE get_tx_type(PLANE_TYPE plane_type,
255 const MACROBLOCKD *xd) {
256 const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
257
258 if (plane_type != PLANE_TYPE_Y || is_inter_block(mbmi))
259 return DCT_DCT;
260 return intra_mode_to_tx_type_lookup[mbmi->mode];
261 }
259 262
260 static INLINE TX_TYPE get_tx_type_4x4(PLANE_TYPE plane_type, 263 static INLINE TX_TYPE get_tx_type_4x4(PLANE_TYPE plane_type,
261 const MACROBLOCKD *xd, int ib) { 264 const MACROBLOCKD *xd, int ib) {
262 const MODE_INFO *const mi = xd->mi_8x8[0]; 265 const MODE_INFO *const mi = xd->mi[0];
263 266
264 if (plane_type != PLANE_TYPE_Y || xd->lossless || is_inter_block(&mi->mbmi)) 267 if (plane_type != PLANE_TYPE_Y || xd->lossless || is_inter_block(&mi->mbmi))
265 return DCT_DCT; 268 return DCT_DCT;
266 269
267 return mode2txfm_map[get_y_mode(mi, ib)]; 270 return intra_mode_to_tx_type_lookup[get_y_mode(mi, ib)];
268 }
269
270 static INLINE TX_TYPE get_tx_type_8x8(PLANE_TYPE plane_type,
271 const MACROBLOCKD *xd) {
272 return plane_type == PLANE_TYPE_Y ? mode2txfm_map[xd->mi_8x8[0]->mbmi.mode]
273 : DCT_DCT;
274 }
275
276 static INLINE TX_TYPE get_tx_type_16x16(PLANE_TYPE plane_type,
277 const MACROBLOCKD *xd) {
278 return plane_type == PLANE_TYPE_Y ? mode2txfm_map[xd->mi_8x8[0]->mbmi.mode]
279 : DCT_DCT;
280 } 271 }
281 272
282 void vp9_setup_block_planes(MACROBLOCKD *xd, int ss_x, int ss_y); 273 void vp9_setup_block_planes(MACROBLOCKD *xd, int ss_x, int ss_y);
283 274
284 static INLINE TX_SIZE get_uv_tx_size_impl(TX_SIZE y_tx_size, BLOCK_SIZE bsize) { 275 static INLINE TX_SIZE get_uv_tx_size_impl(TX_SIZE y_tx_size, BLOCK_SIZE bsize) {
285 if (bsize < BLOCK_8X8) { 276 if (bsize < BLOCK_8X8) {
286 return TX_4X4; 277 return TX_4X4;
287 } else { 278 } else {
288 // TODO(dkovalev): Assuming YUV420 (ss_x == 1, ss_y == 1) 279 // TODO(dkovalev): Assuming YUV420 (ss_x == 1, ss_y == 1)
289 const BLOCK_SIZE plane_bsize = ss_size_lookup[bsize][1][1]; 280 const BLOCK_SIZE plane_bsize = ss_size_lookup[bsize][1][1];
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 320
330 void vp9_set_contexts(const MACROBLOCKD *xd, struct macroblockd_plane *pd, 321 void vp9_set_contexts(const MACROBLOCKD *xd, struct macroblockd_plane *pd,
331 BLOCK_SIZE plane_bsize, TX_SIZE tx_size, int has_eob, 322 BLOCK_SIZE plane_bsize, TX_SIZE tx_size, int has_eob,
332 int aoff, int loff); 323 int aoff, int loff);
333 324
334 #ifdef __cplusplus 325 #ifdef __cplusplus
335 } // extern "C" 326 } // extern "C"
336 #endif 327 #endif
337 328
338 #endif // VP9_COMMON_VP9_BLOCKD_H_ 329 #endif // VP9_COMMON_VP9_BLOCKD_H_
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/vp9_alloccommon.c ('k') | source/libvpx/vp9/common/vp9_blockd.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698