summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2013-05-17 12:50:40 -0700
committerPaul Wilkins <paulwilkins@google.com>2013-05-22 11:53:19 +0100
commit8ba92a0bed9f05b79851b364c4fafd97ac88e824 (patch)
tree7992dafde6cea94a4b38cceb6dce02df628354c3 /vp9/common
parent232d90d8fd47cdc07625036bdd0e4c8f009b8c10 (diff)
downloadlibvpx-8ba92a0bed9f05b79851b364c4fafd97ac88e824.tar
libvpx-8ba92a0bed9f05b79851b364c4fafd97ac88e824.tar.gz
libvpx-8ba92a0bed9f05b79851b364c4fafd97ac88e824.tar.bz2
libvpx-8ba92a0bed9f05b79851b364c4fafd97ac88e824.zip
changes intra coding to be based on txfm block
This commit changed the encoding and decoding of intra blocks to be based on transform block. In each prediction block, the intra coding iterates thorough each transform block based on raster scan order. This commit also fixed a bug in D135 prediction code. TODO next: The RD mode/txfm_size selection should take this into account when computing RD values. Change-Id: I6d1be2faa4c4948a52e830b6a9a84a6b2b6850f6
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_blockd.h2
-rw-r--r--vp9/common/vp9_reconintra.c14
-rw-r--r--vp9/common/vp9_reconintra.h2
3 files changed, 8 insertions, 10 deletions
diff --git a/vp9/common/vp9_blockd.h b/vp9/common/vp9_blockd.h
index 71d1dd934..f1722fd72 100644
--- a/vp9/common/vp9_blockd.h
+++ b/vp9/common/vp9_blockd.h
@@ -192,6 +192,7 @@ static INLINE int b_width_log2(BLOCK_SIZE_TYPE sb_type) {
case BLOCK_SIZE_SB64X32:
case BLOCK_SIZE_SB64X64: return 4;
default: assert(0);
+ return -1;
}
}
@@ -215,6 +216,7 @@ static INLINE int b_height_log2(BLOCK_SIZE_TYPE sb_type) {
case BLOCK_SIZE_SB32X64:
case BLOCK_SIZE_SB64X64: return 4;
default: assert(0);
+ return -1;
}
}
diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index 1588f33ce..dd60a76c7 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -138,14 +138,10 @@ static void d135_predictor(uint8_t *ypred_ptr, int y_stride,
ypred_ptr[y_stride] = ROUND_POWER_OF_TWO(yabove_row[-1] +
yleft_col[0] * 2 +
yleft_col[1], 2);
- for (r = 2; r < bh - 1; ++r)
+ for (r = 2; r < bh; ++r)
ypred_ptr[r * y_stride] = ROUND_POWER_OF_TWO(yleft_col[r - 2] +
yleft_col[r - 1] * 2 +
- yleft_col[r + 1], 2);
-
- ypred_ptr[(bh - 1) * y_stride] = ROUND_POWER_OF_TWO(yleft_col[bh - 2] +
- yleft_col[bh - 1] * 3,
- 2);
+ yleft_col[r], 2);
ypred_ptr += y_stride;
for (r = 1; r < bh; ++r) {
@@ -396,11 +392,11 @@ void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd,
void vp9_predict_intra_block(MACROBLOCKD *xd,
int block_idx,
- BLOCK_SIZE_TYPE bsize,
+ int bwl_in,
TX_SIZE tx_size,
int mode,
uint8_t *predictor, int pre_stride) {
- const int bwl = b_width_log2(bsize) - tx_size;
+ const int bwl = bwl_in - tx_size;
const int wmask = (1 << bwl) - 1;
const int have_top =
(block_idx >> bwl) || xd->up_available;
@@ -424,6 +420,6 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd,
BLOCK_SIZE_TYPE bsize,
int mode,
uint8_t *predictor, int pre_stride) {
- vp9_predict_intra_block(xd, block_idx, bsize, TX_4X4,
+ vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize), TX_4X4,
mode, predictor, pre_stride);
}
diff --git a/vp9/common/vp9_reconintra.h b/vp9/common/vp9_reconintra.h
index faecd6be7..b88761b02 100644
--- a/vp9/common/vp9_reconintra.h
+++ b/vp9/common/vp9_reconintra.h
@@ -23,7 +23,7 @@ B_PREDICTION_MODE vp9_find_bpred_context(MACROBLOCKD *xd, int block,
void vp9_predict_intra_block(MACROBLOCKD *xd,
int block_idx,
- BLOCK_SIZE_TYPE bsize,
+ int bwl_in,
TX_SIZE tx_size,
int mode,
uint8_t *predictor, int pre_stride);