diff options
Diffstat (limited to 'vp9/common')
-rw-r--r-- | vp9/common/vp9_reconinter.c | 7 | ||||
-rw-r--r-- | vp9/common/vp9_reconintra.c | 47 | ||||
-rw-r--r-- | vp9/common/vp9_reconintra.h | 8 |
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 |