Index: source/libvpx/vp9/common/vp9_blockd.h |
diff --git a/source/libvpx/vp9/common/vp9_blockd.h b/source/libvpx/vp9/common/vp9_blockd.h |
index 018a9c2b975550456c2ceaae5d56e00aeabb0986..319d34832b196b38f474671a6ebddf9e5c65f05b 100644 |
--- a/source/libvpx/vp9/common/vp9_blockd.h |
+++ b/source/libvpx/vp9/common/vp9_blockd.h |
@@ -18,74 +18,28 @@ |
#include "vpx_scale/yv12config.h" |
#include "vp9/common/vp9_common_data.h" |
-#include "vp9/common/vp9_filter.h" |
+#include "vp9/common/vp9_entropy.h" |
+#include "vp9/common/vp9_entropymode.h" |
#include "vp9/common/vp9_mv.h" |
#include "vp9/common/vp9_scale.h" |
+#include "vp9/common/vp9_seg_common.h" |
#ifdef __cplusplus |
extern "C" { |
#endif |
-#define BLOCK_SIZE_GROUPS 4 |
-#define SKIP_CONTEXTS 3 |
-#define INTER_MODE_CONTEXTS 7 |
- |
-/* Segment Feature Masks */ |
-#define MAX_MV_REF_CANDIDATES 2 |
- |
-#define INTRA_INTER_CONTEXTS 4 |
-#define COMP_INTER_CONTEXTS 5 |
-#define REF_CONTEXTS 5 |
- |
-typedef enum { |
- PLANE_TYPE_Y = 0, |
- PLANE_TYPE_UV = 1, |
- PLANE_TYPES |
-} PLANE_TYPE; |
- |
#define MAX_MB_PLANE 3 |
-typedef char ENTROPY_CONTEXT; |
- |
-static INLINE int combine_entropy_contexts(ENTROPY_CONTEXT a, |
- ENTROPY_CONTEXT b) { |
- return (a != 0) + (b != 0); |
-} |
- |
typedef enum { |
KEY_FRAME = 0, |
INTER_FRAME = 1, |
FRAME_TYPES, |
} FRAME_TYPE; |
-typedef enum { |
- DC_PRED, // Average of above and left pixels |
- V_PRED, // Vertical |
- H_PRED, // Horizontal |
- D45_PRED, // Directional 45 deg = round(arctan(1/1) * 180/pi) |
- D135_PRED, // Directional 135 deg = 180 - 45 |
- D117_PRED, // Directional 117 deg = 180 - 63 |
- D153_PRED, // Directional 153 deg = 180 - 27 |
- D207_PRED, // Directional 207 deg = 180 + 27 |
- D63_PRED, // Directional 63 deg = round(arctan(2/1) * 180/pi) |
- TM_PRED, // True-motion |
- NEARESTMV, |
- NEARMV, |
- ZEROMV, |
- NEWMV, |
- MB_MODE_COUNT |
-} PREDICTION_MODE; |
- |
static INLINE int is_inter_mode(PREDICTION_MODE mode) { |
return mode >= NEARESTMV && mode <= NEWMV; |
} |
-#define INTRA_MODES (TM_PRED + 1) |
- |
-#define INTER_MODES (1 + NEWMV - NEARESTMV) |
- |
-#define INTER_OFFSET(mode) ((mode) - NEARESTMV) |
- |
/* For keyframes, intra block modes are predicted by the (already decoded) |
modes for the Y blocks to the left and above us; for interframes, there |
is a single probability table. */ |
@@ -217,13 +171,9 @@ typedef struct macroblockd { |
PARTITION_CONTEXT *above_seg_context; |
PARTITION_CONTEXT left_seg_context[8]; |
- /* mc buffer */ |
- DECLARE_ALIGNED(16, uint8_t, mc_buf[80 * 2 * 80 * 2]); |
- |
#if CONFIG_VP9_HIGHBITDEPTH |
/* Bit depth: 8, 10, 12 */ |
int bd; |
- DECLARE_ALIGNED(16, uint16_t, mc_buf_high[80 * 2 * 80 * 2]); |
#endif |
/* dqcoeff are shared by all the planes. So planes must be decoded serially */ |
@@ -285,6 +235,27 @@ static INLINE BLOCK_SIZE get_plane_block_size(BLOCK_SIZE bsize, |
return ss_size_lookup[bsize][pd->subsampling_x][pd->subsampling_y]; |
} |
+static INLINE void reset_skip_context(MACROBLOCKD *xd, BLOCK_SIZE bsize) { |
+ int i; |
+ for (i = 0; i < MAX_MB_PLANE; i++) { |
+ struct macroblockd_plane *const pd = &xd->plane[i]; |
+ const BLOCK_SIZE plane_bsize = get_plane_block_size(bsize, pd); |
+ memset(pd->above_context, 0, |
+ sizeof(ENTROPY_CONTEXT) * num_4x4_blocks_wide_lookup[plane_bsize]); |
+ memset(pd->left_context, 0, |
+ sizeof(ENTROPY_CONTEXT) * num_4x4_blocks_high_lookup[plane_bsize]); |
+ } |
+} |
+ |
+static INLINE const vp9_prob *get_y_mode_probs(const MODE_INFO *mi, |
+ const MODE_INFO *above_mi, |
+ const MODE_INFO *left_mi, |
+ int block) { |
+ const PREDICTION_MODE above = vp9_above_block_mode(mi, above_mi, block); |
+ const PREDICTION_MODE left = vp9_left_block_mode(mi, left_mi, block); |
+ return vp9_kf_y_mode_prob[above][left]; |
+} |
+ |
typedef void (*foreach_transformed_block_visitor)(int plane, int block, |
BLOCK_SIZE plane_bsize, |
TX_SIZE tx_size, |