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

Unified Diff: source/libvpx/vp9/common/vp9_blockd.h

Issue 11974002: libvpx: Pull from upstream (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 7 years, 11 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp9/common/vp9_blockd.h
===================================================================
--- source/libvpx/vp9/common/vp9_blockd.h (revision 177019)
+++ source/libvpx/vp9/common/vp9_blockd.h (working copy)
@@ -14,7 +14,7 @@
void vpx_log(const char *format, ...);
-#include "vpx_ports/config.h"
+#include "./vpx_config.h"
#include "vpx_scale/yv12config.h"
#include "vp9/common/vp9_mv.h"
#include "vp9/common/vp9_treecoder.h"
@@ -45,7 +45,20 @@
#define SEGMENT_DELTADATA 0
#define SEGMENT_ABSDATA 1
#define MAX_MV_REFS 9
+#define MAX_MV_REF_CANDIDATES 4
+#if CONFIG_DWTDCTHYBRID
+#define DWT_MAX_LENGTH 64
+#define DWT_TYPE 26 // 26/53/97
+#define DWT_PRECISION_BITS 2
+#define DWT_PRECISION_RND ((1 << DWT_PRECISION_BITS) / 2)
+
+#define DWTDCT16X16 0
+#define DWTDCT16X16_LEAN 1
+#define DWTDCT8X8 2
+#define DWTDCT_TYPE DWTDCT16X16_LEAN
+#endif
+
typedef struct {
int r, c;
} POS;
@@ -65,11 +78,6 @@
ENTROPY_CONTEXT y2;
} ENTROPY_CONTEXT_PLANES;
-extern const unsigned char vp9_block2left[25];
-extern const unsigned char vp9_block2above[25];
-extern const unsigned char vp9_block2left_8x8[25];
-extern const unsigned char vp9_block2above_8x8[25];
-
#define VP9_COMBINEENTROPYCONTEXTS( Dest, A, B) \
Dest = ((A)!=0) + ((B)!=0);
@@ -80,10 +88,13 @@
typedef enum
{
- SIXTAP = 0,
- BILINEAR = 1,
- EIGHTTAP = 2,
- EIGHTTAP_SHARP = 3,
+#if CONFIG_ENABLE_6TAP
+ SIXTAP,
+#endif
+ EIGHTTAP_SMOOTH,
+ EIGHTTAP,
+ EIGHTTAP_SHARP,
+ BILINEAR,
SWITCHABLE /* should be the last one */
} INTERPOLATIONFILTERTYPE;
@@ -101,13 +112,11 @@
TM_PRED, /* Truemotion prediction */
I8X8_PRED, /* 8x8 based prediction, each 8x8 has its own prediction mode */
B_PRED, /* block based prediction, each block has its own prediction mode */
-
NEARESTMV,
NEARMV,
ZEROMV,
NEWMV,
SPLITMV,
-
MB_MODE_COUNT
} MB_PREDICTION_MODE;
@@ -120,15 +129,16 @@
SEG_LVL_EOB = 4, // EOB end stop marker.
SEG_LVL_TRANSFORM = 5, // Block transform size.
SEG_LVL_MAX = 6 // Number of MB level features supported
-
} SEG_LVL_FEATURES;
// Segment level features.
typedef enum {
- TX_4X4, // 4x4 dct transform
- TX_8X8, // 8x8 dct transform
- TX_16X16, // 16x16 dct transform
- TX_SIZE_MAX // Number of different transforms available
+ TX_4X4 = 0, // 4x4 dct transform
+ TX_8X8 = 1, // 8x8 dct transform
+ TX_16X16 = 2, // 16x16 dct transform
+ TX_SIZE_MAX_MB = 3, // Number of different transforms available
+ TX_32X32 = TX_SIZE_MAX_MB, // 32x32 dct transform
+ TX_SIZE_MAX_SB, // Number of transforms available to SBs
} TX_SIZE;
typedef enum {
@@ -205,9 +215,6 @@
struct {
B_PREDICTION_MODE first;
TX_TYPE tx_type;
-#if CONFIG_COMP_INTRA_PRED
- B_PREDICTION_MODE second;
-#endif
#if CONFIG_NEWBINTRAMODES
B_PREDICTION_MODE context;
#endif
@@ -227,18 +234,21 @@
MAX_REF_FRAMES = 4
} MV_REFERENCE_FRAME;
+typedef enum {
+ BLOCK_SIZE_MB16X16 = 0,
+ BLOCK_SIZE_SB32X32 = 1,
+ BLOCK_SIZE_SB64X64 = 2,
+} BLOCK_SIZE_TYPE;
+
typedef struct {
MB_PREDICTION_MODE mode, uv_mode;
-#if CONFIG_COMP_INTRA_PRED
- MB_PREDICTION_MODE second_mode, second_uv_mode;
-#endif
#if CONFIG_COMP_INTERINTRA_PRED
MB_PREDICTION_MODE interintra_mode, interintra_uv_mode;
#endif
MV_REFERENCE_FRAME ref_frame, second_ref_frame;
TX_SIZE txfm_size;
int_mv mv[2]; // for each reference frame used
- int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REFS];
+ int_mv ref_mvs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES];
int_mv best_mv, best_second_mv;
#if CONFIG_NEW_MVREF
int best_index, best_second_index;
@@ -261,17 +271,9 @@
// a valid predictor
unsigned char mb_in_image;
-#if CONFIG_PRED_FILTER
- // Flag to turn prediction signal filter on(1)/off(0 ) at the MB level
- unsigned int pred_filter_enabled;
-#endif
- INTERPOLATIONFILTERTYPE interp_filter;
+ INTERPOLATIONFILTERTYPE interp_filter;
-#if CONFIG_SUPERBLOCKS
- // FIXME need a SB array of 4 MB_MODE_INFOs that
- // only needs one encoded_as_sb.
- unsigned char encoded_as_sb;
-#endif
+ BLOCK_SIZE_TYPE sb_type;
} MB_MODE_INFO;
typedef struct {
@@ -280,19 +282,19 @@
} MODE_INFO;
typedef struct blockd {
- short *qcoeff;
- short *dqcoeff;
- unsigned char *predictor;
- short *diff;
- short *dequant;
+ int16_t *qcoeff;
+ int16_t *dqcoeff;
+ uint8_t *predictor;
+ int16_t *diff;
+ int16_t *dequant;
/* 16 Y blocks, 4 U blocks, 4 V blocks each with 16 entries */
- unsigned char **base_pre;
- unsigned char **base_second_pre;
+ uint8_t **base_pre;
+ uint8_t **base_second_pre;
int pre;
int pre_stride;
- unsigned char **base_dst;
+ uint8_t **base_dst;
int dst;
int dst_stride;
@@ -301,13 +303,22 @@
union b_mode_info bmi;
} BLOCKD;
+typedef struct superblockd {
+ /* 32x32 Y and 16x16 U/V. No 2nd order transform yet. */
+ DECLARE_ALIGNED(16, int16_t, diff[32*32+16*16*2]);
+ DECLARE_ALIGNED(16, int16_t, qcoeff[32*32+16*16*2]);
+ DECLARE_ALIGNED(16, int16_t, dqcoeff[32*32+16*16*2]);
+} SUPERBLOCKD;
+
typedef struct macroblockd {
- DECLARE_ALIGNED(16, short, diff[400]); /* from idct diff */
- DECLARE_ALIGNED(16, unsigned char, predictor[384]);
- DECLARE_ALIGNED(16, short, qcoeff[400]);
- DECLARE_ALIGNED(16, short, dqcoeff[400]);
- DECLARE_ALIGNED(16, unsigned short, eobs[25]);
+ DECLARE_ALIGNED(16, int16_t, diff[400]); /* from idct diff */
+ DECLARE_ALIGNED(16, uint8_t, predictor[384]);
+ DECLARE_ALIGNED(16, int16_t, qcoeff[400]);
+ DECLARE_ALIGNED(16, int16_t, dqcoeff[400]);
+ DECLARE_ALIGNED(16, uint16_t, eobs[25]);
+ SUPERBLOCKD sb_coeff_data;
+
/* 16 Y blocks, 4 U, 4 V, 1 DC 2nd order block, each with 16 entries. */
BLOCKD block[25];
int fullpixel_mask;
@@ -350,7 +361,7 @@
vp9_prob mb_segment_tree_probs[MB_FEATURE_TREE_PROBS];
#if CONFIG_NEW_MVREF
- vp9_prob mb_mv_ref_id_probs[MAX_REF_FRAMES][3];
+ vp9_prob mb_mv_ref_probs[MAX_REF_FRAMES][MAX_MV_REF_CANDIDATES-1];
#endif
// Segment features
@@ -377,17 +388,17 @@
unsigned int frames_till_alt_ref_frame;
/* Inverse transform function pointers. */
- void (*inv_xform4x4_1_x8)(short *input, short *output, int pitch);
- void (*inv_xform4x4_x8)(short *input, short *output, int pitch);
- void (*inv_walsh4x4_1)(short *in, short *out);
- void (*inv_walsh4x4_lossless)(short *in, short *out);
+ void (*inv_xform4x4_1_x8)(int16_t *input, int16_t *output, int pitch);
+ void (*inv_xform4x4_x8)(int16_t *input, int16_t *output, int pitch);
+ void (*inv_walsh4x4_1)(int16_t *in, int16_t *out);
+ void (*inv_walsh4x4_lossless)(int16_t *in, int16_t *out);
- vp9_subpix_fn_t subpixel_predict;
+ vp9_subpix_fn_t subpixel_predict4x4;
vp9_subpix_fn_t subpixel_predict8x4;
vp9_subpix_fn_t subpixel_predict8x8;
vp9_subpix_fn_t subpixel_predict16x16;
- vp9_subpix_fn_t subpixel_predict_avg;
+ vp9_subpix_fn_t subpixel_predict_avg4x4;
vp9_subpix_fn_t subpixel_predict_avg8x4;
vp9_subpix_fn_t subpixel_predict_avg8x8;
vp9_subpix_fn_t subpixel_predict_avg16x16;
@@ -395,14 +406,7 @@
int corrupted;
-#if !CONFIG_SUPERBLOCKS && (ARCH_X86 || ARCH_X86_64)
- /* This is an intermediate buffer currently used in sub-pixel motion search
- * to keep a copy of the reference area. This buffer can be used for other
- * purpose.
- */
- DECLARE_ALIGNED(32, unsigned char, y_buf[22 * 32]);
-#endif
-
+ int sb_index;
int mb_index; // Index of the MB in the SB (0..3)
int q_index;
@@ -490,6 +494,9 @@
return tx_type;
}
+extern const uint8_t vp9_block2left[TX_SIZE_MAX_SB][25];
+extern const uint8_t vp9_block2above[TX_SIZE_MAX_SB][25];
+
#define USE_ADST_FOR_I16X16_8X8 0
#define USE_ADST_FOR_I16X16_4X4 0
#define USE_ADST_FOR_I8X8_4X4 1
@@ -502,11 +509,9 @@
int ib = (int)(b - xd->block);
if (ib >= 16)
return tx_type;
-#if CONFIG_SUPERBLOCKS
// TODO(rbultje, debargha): Explore ADST usage for superblocks
- if (xd->mode_info_context->mbmi.encoded_as_sb)
+ if (xd->mode_info_context->mbmi.sb_type)
return tx_type;
-#endif
if (xd->mode_info_context->mbmi.mode == B_PRED &&
xd->q_index < ACTIVE_HT) {
tx_type = txfm_map(
@@ -559,11 +564,9 @@
int ib = (int)(b - xd->block);
if (ib >= 16)
return tx_type;
-#if CONFIG_SUPERBLOCKS
// TODO(rbultje, debargha): Explore ADST usage for superblocks
- if (xd->mode_info_context->mbmi.encoded_as_sb)
+ if (xd->mode_info_context->mbmi.sb_type)
return tx_type;
-#endif
if (xd->mode_info_context->mbmi.mode == I8X8_PRED &&
xd->q_index < ACTIVE_HT8) {
// TODO(rbultje): MB_PREDICTION_MODE / B_PREDICTION_MODE should be merged
@@ -594,11 +597,9 @@
int ib = (int)(b - xd->block);
if (ib >= 16)
return tx_type;
-#if CONFIG_SUPERBLOCKS
// TODO(rbultje, debargha): Explore ADST usage for superblocks
- if (xd->mode_info_context->mbmi.encoded_as_sb)
+ if (xd->mode_info_context->mbmi.sb_type)
return tx_type;
-#endif
if (xd->mode_info_context->mbmi.mode < I8X8_PRED &&
xd->q_index < ACTIVE_HT16) {
tx_type = txfm_map(pred_mode_conv(xd->mode_info_context->mbmi.mode));
@@ -650,4 +651,4 @@
}
}
}
-#endif /* __INC_BLOCKD_H */
+#endif // VP9_COMMON_VP9_BLOCKD_H_
« 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