summaryrefslogtreecommitdiff
path: root/vp9/common
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
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')
-rw-r--r--vp9/common/vp9_reconinter.c7
-rw-r--r--vp9/common/vp9_reconintra.c47
-rw-r--r--vp9/common/vp9_reconintra.h8
3 files changed, 62 insertions, 0 deletions
diff --git a/vp9/common/vp9_reconinter.c b/vp9/common/vp9_reconinter.c
index e8ff42fd4..fb4906e6a 100644
--- a/vp9/common/vp9_reconinter.c
+++ b/vp9/common/vp9_reconinter.c
@@ -773,6 +773,13 @@ void vp9_build_inter32x32_predictors_sb(MACROBLOCKD *x,
x->second_pre.u_buffer = u2;
x->second_pre.v_buffer = v2;
}
+
+#if CONFIG_COMP_INTERINTRA_PRED
+ if (x->mode_info_context->mbmi.second_ref_frame == INTRA_FRAME) {
+ vp9_build_interintra_32x32_predictors_sb(
+ x, dst_y, dst_u, dst_v, dst_ystride, dst_uvstride);
+ }
+#endif
}
#endif
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) {
diff --git a/vp9/common/vp9_reconintra.h b/vp9/common/vp9_reconintra.h
index c9a11f8ca..92882d318 100644
--- a/vp9/common/vp9_reconintra.h
+++ b/vp9/common/vp9_reconintra.h
@@ -31,6 +31,14 @@ extern void vp9_build_interintra_16x16_predictors_mbuv(MACROBLOCKD *xd,
unsigned char *upred,
unsigned char *vpred,
int uvstride);
+#if CONFIG_SUPERBLOCKS
+extern void vp9_build_interintra_32x32_predictors_sb(MACROBLOCKD *xd,
+ unsigned char *ypred,
+ unsigned char *upred,
+ unsigned char *vpred,
+ int ystride,
+ int uvstride);
+#endif
#endif
#endif // __INC_RECONINTRA_H