summaryrefslogtreecommitdiff
path: root/vp9/common
diff options
context:
space:
mode:
authorYaowu Xu <yaowu@google.com>2013-05-15 17:21:15 -0700
committerPaul Wilkins <paulwilkins@google.com>2013-05-22 11:44:12 +0100
commit232d90d8fd47cdc07625036bdd0e4c8f009b8c10 (patch)
tree69a31d32932556dfad999a2abd061c6ff629a418 /vp9/common
parent0b713f8c18f6695f882ad9a469ddba6842c3fa9e (diff)
downloadlibvpx-232d90d8fd47cdc07625036bdd0e4c8f009b8c10.tar
libvpx-232d90d8fd47cdc07625036bdd0e4c8f009b8c10.tar.gz
libvpx-232d90d8fd47cdc07625036bdd0e4c8f009b8c10.tar.bz2
libvpx-232d90d8fd47cdc07625036bdd0e4c8f009b8c10.zip
Generalized intra 4x4 encoding for all sizes
Change-Id: I1b86744fa247233c8df031b3f4b87b212c8dd094
Diffstat (limited to 'vp9/common')
-rw-r--r--vp9/common/vp9_reconinter.h1
-rw-r--r--vp9/common/vp9_reconintra.c56
-rw-r--r--vp9/common/vp9_reconintra.h6
3 files changed, 41 insertions, 22 deletions
diff --git a/vp9/common/vp9_reconinter.h b/vp9/common/vp9_reconinter.h
index af289d27e..4e521850d 100644
--- a/vp9/common/vp9_reconinter.h
+++ b/vp9/common/vp9_reconinter.h
@@ -15,7 +15,6 @@
#include "vp9/common/vp9_onyxc_int.h"
struct subpix_fn_table;
-
void vp9_build_inter_predictors_sby(MACROBLOCKD *xd,
int mb_row,
int mb_col,
diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index ea4805f33..1588f33ce 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -13,6 +13,7 @@
#include "./vpx_config.h"
#include "vp9_rtcd.h"
#include "vp9/common/vp9_reconintra.h"
+#include "vp9/common/vp9_onyxc_int.h"
#include "vpx_mem/vpx_mem.h"
static void d27_predictor(uint8_t *ypred_ptr, int y_stride,
@@ -378,38 +379,51 @@ void vp9_build_intra_predictors_sby_s(MACROBLOCKD *xd,
void vp9_build_intra_predictors_sbuv_s(MACROBLOCKD *xd,
BLOCK_SIZE_TYPE bsize) {
- int p;
+ const int bwl = b_width_log2(bsize), bw = 2 << bwl;
+ const int bhl = b_height_log2(bsize), bh = 2 << bhl;
- for (p = 1; p < MAX_MB_PLANE; p++) {
- const struct macroblockd_plane* const pd = &xd->plane[p];
- const int bwl = b_width_log2(bsize) - pd->subsampling_x;
- const int bw = 4 << bwl;
- const int bhl = b_height_log2(bsize) - pd->subsampling_y;
- const int bh = 4 << bhl;
-
- vp9_build_intra_predictors(pd->dst.buf, pd->dst.stride,
- pd->dst.buf, pd->dst.stride,
- xd->mode_info_context->mbmi.uv_mode,
- bw, bh, xd->up_available,
- xd->left_available, 0 /*xd->right_available*/);
- }
+ vp9_build_intra_predictors(xd->plane[1].dst.buf, xd->plane[1].dst.stride,
+ xd->plane[1].dst.buf, xd->plane[1].dst.stride,
+ xd->mode_info_context->mbmi.uv_mode,
+ bw, bh, xd->up_available,
+ xd->left_available, 0 /*xd->right_available*/);
+ vp9_build_intra_predictors(xd->plane[2].dst.buf, xd->plane[1].dst.stride,
+ xd->plane[2].dst.buf, xd->plane[1].dst.stride,
+ xd->mode_info_context->mbmi.uv_mode,
+ bw, bh, xd->up_available,
+ xd->left_available, 0 /*xd->right_available*/);
}
-void vp9_intra4x4_predict(MACROBLOCKD *xd,
- int block_idx,
- BLOCK_SIZE_TYPE bsize,
- int mode,
- uint8_t *predictor, int pre_stride) {
- const int bwl = b_width_log2(bsize);
+void vp9_predict_intra_block(MACROBLOCKD *xd,
+ int block_idx,
+ BLOCK_SIZE_TYPE bsize,
+ TX_SIZE tx_size,
+ int mode,
+ uint8_t *predictor, int pre_stride) {
+ const int bwl = b_width_log2(bsize) - tx_size;
const int wmask = (1 << bwl) - 1;
const int have_top =
(block_idx >> bwl) || xd->up_available;
const int have_left =
(block_idx & wmask) || xd->left_available;
const int have_right = ((block_idx & wmask) != wmask);
+ const int txfm_block_size = 4 << tx_size;
+ assert(bwl >= 0);
vp9_build_intra_predictors(predictor, pre_stride,
predictor, pre_stride,
- mode, 4, 4, have_top, have_left,
+ mode,
+ txfm_block_size,
+ txfm_block_size,
+ have_top, have_left,
have_right);
}
+
+void vp9_intra4x4_predict(MACROBLOCKD *xd,
+ int block_idx,
+ BLOCK_SIZE_TYPE bsize,
+ int mode,
+ uint8_t *predictor, int pre_stride) {
+ vp9_predict_intra_block(xd, block_idx, bsize, TX_4X4,
+ mode, predictor, pre_stride);
+}
diff --git a/vp9/common/vp9_reconintra.h b/vp9/common/vp9_reconintra.h
index 1a715c3ee..faecd6be7 100644
--- a/vp9/common/vp9_reconintra.h
+++ b/vp9/common/vp9_reconintra.h
@@ -21,4 +21,10 @@ B_PREDICTION_MODE vp9_find_dominant_direction(uint8_t *ptr,
B_PREDICTION_MODE vp9_find_bpred_context(MACROBLOCKD *xd, int block,
uint8_t *ptr, int stride);
+void vp9_predict_intra_block(MACROBLOCKD *xd,
+ int block_idx,
+ BLOCK_SIZE_TYPE bsize,
+ TX_SIZE tx_size,
+ int mode,
+ uint8_t *predictor, int pre_stride);
#endif // VP9_COMMON_VP9_RECONINTRA_H_