From: Yaowu Xu Date: Fri, 11 Jan 2013 23:53:32 +0000 (-0800) Subject: Add loop filtering for UV plane X-Git-Tag: v1.3.0~1210^2~14^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a1d73d;p=libvpx Add loop filtering for UV plane On block boundary within a MB when 8x8 block boundary only is filtered for Y. Change-Id: Ie1c804c877d199e78e2fecd8c2d3f1e114ce9ec1 --- diff --git a/vp9/common/vp9_loopfilter_filters.c b/vp9/common/vp9_loopfilter_filters.c index 18f0fea13..adb10750e 100644 --- a/vp9/common/vp9_loopfilter_filters.c +++ b/vp9/common/vp9_loopfilter_filters.c @@ -439,6 +439,14 @@ void vp9_loop_filter_bh8x8_c(uint8_t *y_ptr, uint8_t *u_ptr, struct loop_filter_info *lfi) { vp9_mbloop_filter_horizontal_edge_c( y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp9_loop_filter_horizontal_edge_c(u_ptr + 4 * uv_stride, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp9_loop_filter_horizontal_edge_c(v_ptr + 4 * uv_stride, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); } void vp9_loop_filter_bhs_c(uint8_t *y_ptr, int y_stride, @@ -456,6 +464,14 @@ void vp9_loop_filter_bv8x8_c(uint8_t *y_ptr, uint8_t *u_ptr, struct loop_filter_info *lfi) { vp9_mbloop_filter_vertical_edge_c( y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp9_loop_filter_vertical_edge_c(u_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp9_loop_filter_vertical_edge_c(v_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); } void vp9_loop_filter_bvs_c(uint8_t *y_ptr, int y_stride, diff --git a/vp9/common/x86/vp9_loopfilter_x86.c b/vp9/common/x86/vp9_loopfilter_x86.c index 61b1c77da..1ec7d5c48 100644 --- a/vp9/common/x86/vp9_loopfilter_x86.c +++ b/vp9/common/x86/vp9_loopfilter_x86.c @@ -609,6 +609,11 @@ void vp9_loop_filter_bh8x8_sse2(unsigned char *y_ptr, unsigned char *u_ptr, struct loop_filter_info *lfi) { vp9_mbloop_filter_horizontal_edge_sse2( y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr); + + if (u_ptr) + vp9_loop_filter_horizontal_edge_uv_sse2(u_ptr + 4 * uv_stride, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, + v_ptr + 4 * uv_stride); } /* Vertical MB Filtering */ @@ -629,6 +634,11 @@ void vp9_loop_filter_bv8x8_sse2(unsigned char *y_ptr, unsigned char *u_ptr, struct loop_filter_info *lfi) { vp9_mbloop_filter_vertical_edge_sse2( y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr); + + if (u_ptr) + vp9_loop_filter_vertical_edge_uv_sse2(u_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, + v_ptr + 4); } /* Horizontal B Filtering */