summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_reconintra.c
diff options
context:
space:
mode:
authorDeb Mukherjee <debargha@google.com>2012-11-30 11:46:20 -0800
committerDeb Mukherjee <debargha@google.com>2012-12-01 15:19:55 -0800
commit8b92f1e0238a9b35096ca7be273f69456354a031 (patch)
tree79bce0936771dcfaac920d231e1d665524566f02 /vp9/common/vp9_reconintra.c
parent66323307029f9e9c9ed3f40aa225019e1f074f20 (diff)
downloadlibvpx-8b92f1e0238a9b35096ca7be273f69456354a031.tar
libvpx-8b92f1e0238a9b35096ca7be273f69456354a031.tar.gz
libvpx-8b92f1e0238a9b35096ca7be273f69456354a031.tar.bz2
libvpx-8b92f1e0238a9b35096ca7be273f69456354a031.zip
Supports inter-intra prediction with superblocks
Adds support for compound inter-intra prediction with superblocks. Also, fixes a bug that disabled intra modes for superblocks. Change-Id: I4d711317e1bc19df8c2f32dc645429f7fff31036
Diffstat (limited to 'vp9/common/vp9_reconintra.c')
-rw-r--r--vp9/common/vp9_reconintra.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c
index 5c8d33960..92492aa5b 100644
--- a/vp9/common/vp9_reconintra.c
+++ b/vp9/common/vp9_reconintra.c
@@ -655,6 +655,53 @@ void vp9_build_interintra_16x16_predictors_mbuv(MACROBLOCKD *xd,
combine_interintra(xd->mode_info_context->mbmi.interintra_uv_mode,
vpred, uvstride, vintrapredictor, 8, 8);
}
+
+#if CONFIG_SUPERBLOCKS
+void vp9_build_interintra_32x32_predictors_sby(MACROBLOCKD *xd,
+ unsigned char *ypred,
+ int ystride) {
+ unsigned char intrapredictor[1024];
+ vp9_build_intra_predictors_internal(
+ xd->dst.y_buffer, xd->dst.y_stride,
+ intrapredictor, 32,
+ xd->mode_info_context->mbmi.interintra_mode, 32,
+ xd->up_available, xd->left_available);
+ combine_interintra(xd->mode_info_context->mbmi.interintra_mode,
+ ypred, ystride, intrapredictor, 32, 32);
+}
+
+void vp9_build_interintra_32x32_predictors_sbuv(MACROBLOCKD *xd,
+ unsigned char *upred,
+ unsigned char *vpred,
+ int uvstride) {
+ unsigned char uintrapredictor[256];
+ unsigned char vintrapredictor[256];
+ vp9_build_intra_predictors_internal(
+ xd->dst.u_buffer, xd->dst.uv_stride,
+ uintrapredictor, 16,
+ xd->mode_info_context->mbmi.interintra_uv_mode, 16,
+ xd->up_available, xd->left_available);
+ vp9_build_intra_predictors_internal(
+ xd->dst.v_buffer, xd->dst.uv_stride,
+ vintrapredictor, 16,
+ xd->mode_info_context->mbmi.interintra_uv_mode, 16,
+ xd->up_available, xd->left_available);
+ combine_interintra(xd->mode_info_context->mbmi.interintra_uv_mode,
+ upred, uvstride, uintrapredictor, 16, 16);
+ combine_interintra(xd->mode_info_context->mbmi.interintra_uv_mode,
+ vpred, uvstride, vintrapredictor, 16, 16);
+}
+
+void vp9_build_interintra_32x32_predictors_sb(MACROBLOCKD *xd,
+ unsigned char *ypred,
+ unsigned char *upred,
+ unsigned char *vpred,
+ int ystride,
+ int uvstride) {
+ vp9_build_interintra_32x32_predictors_sby(xd, ypred, ystride);
+ vp9_build_interintra_32x32_predictors_sbuv(xd, upred, vpred, uvstride);
+}
+#endif
#endif
void vp9_build_intra_predictors_mby(MACROBLOCKD *xd) {