summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@google.com>2013-04-16 17:05:20 -0700
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2013-04-16 17:05:20 -0700
commitc0a1b5bc7e76730688b94da7c7a5c29f7b33d8aa (patch)
treeec46e985823fa849e009492347dd2052fb946018
parent6be7b00e01757263354314502c7d705569496d65 (diff)
parent94996b9d267b20a72a746763146cfe65ac87eb97 (diff)
downloadlibvpx-c0a1b5bc7e76730688b94da7c7a5c29f7b33d8aa.tar
libvpx-c0a1b5bc7e76730688b94da7c7a5c29f7b33d8aa.tar.gz
libvpx-c0a1b5bc7e76730688b94da7c7a5c29f7b33d8aa.tar.bz2
libvpx-c0a1b5bc7e76730688b94da7c7a5c29f7b33d8aa.zip
Merge "Slightly hackish workaround to support rectangles in directional intra predictors." into experimental
-rw-r--r--vp9/common/vp9_reconintra.c93
1 files changed, 82 insertions, 11 deletions
diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index 7ef03fc35..632191183 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -373,24 +373,95 @@ void vp9_build_intra_predictors(uint8_t *src, int src_stride,
ypred_ptr += y_stride;
}
break;
+#if CONFIG_SBSEGMENT
case D45_PRED:
- d45_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
- break;
case D135_PRED:
- d135_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
- break;
case D117_PRED:
- d117_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
- break;
case D153_PRED:
- d153_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
- break;
case D27_PRED:
- d27_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
- break;
case D63_PRED:
- d63_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ if (bw == bh) {
+ switch (mode) {
+#endif
+ case D45_PRED:
+ d45_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+ case D135_PRED:
+ d135_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+ case D117_PRED:
+ d117_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+ case D153_PRED:
+ d153_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+ case D27_PRED:
+ d27_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+ case D63_PRED:
+ d63_predictor(ypred_ptr, y_stride, bw, bh, yabove_row, yleft_col);
+ break;
+#if CONFIG_SBSEGMENT
+ default:
+ assert(0);
+ }
+ } else if (bw > bh) {
+ uint8_t pred[64*64];
+ memset(yleft_col + bh, yleft_col[bh - 1], bw - bh);
+ switch (mode) {
+ case D45_PRED:
+ d45_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ case D135_PRED:
+ d135_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ case D117_PRED:
+ d117_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ case D153_PRED:
+ d153_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ case D27_PRED:
+ d27_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ case D63_PRED:
+ d63_predictor(pred, 64, bw, bw, yabove_row, yleft_col);
+ break;
+ default:
+ assert(0);
+ }
+ for (i = 0; i < bh; i++)
+ memcpy(ypred_ptr + y_stride * i, pred + i * 64, bw);
+ } else {
+ uint8_t pred[64 * 64];
+ memset(yabove_row + bw, yabove_row[bw - 1], bh - bw);
+ switch (mode) {
+ case D45_PRED:
+ d45_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ case D135_PRED:
+ d135_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ case D117_PRED:
+ d117_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ case D153_PRED:
+ d153_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ case D27_PRED:
+ d27_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ case D63_PRED:
+ d63_predictor(pred, 64, bh, bh, yabove_row, yleft_col);
+ break;
+ default:
+ assert(0);
+ }
+ for (i = 0; i < bh; i++)
+ memcpy(ypred_ptr + y_stride * i, pred + i * 64, bw);
+ }
break;
+#endif
default:
break;
}