From patchwork Sun Jan 6 07:43:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Ross X-Patchwork-Id: 11656 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 1587544D80B for ; Sun, 6 Jan 2019 09:43:28 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C677068A0F6; Sun, 6 Jan 2019 09:43:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx.sdf.org (ol.sdf.org [205.166.94.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 02CF26800E0 for ; Sun, 6 Jan 2019 09:43:17 +0200 (EET) Received: from f8eea98b7f8729cc959a832590936f87 (pa49-199-3-1.pa.vic.optusnet.com.au [49.199.3.1]) (authenticated (128 bits)) by mx.sdf.org (8.15.2/8.14.5) with ESMTPSA id x067hFk8012221 (using TLSv1.2 with cipher AES256-GCM-SHA384 (256 bits) verified NO) for ; Sun, 6 Jan 2019 07:43:23 GMT Authentication-Results: mx.sdf.org; dkim=none Date: Sun, 6 Jan 2019 18:43:12 +1100 From: Peter Ross To: ffmpeg-devel@ffmpeg.org Message-ID: <88edef73ebb5487dd2de9420ef7470d6e6d5c362.1546760371.git.pross@xvid.org> References: MIME-Version: 1.0 In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) Subject: [FFmpeg-devel] [PATCH 2/4] vp3dsp: add 12 pixel loop filter functions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavcodec/vp3dsp.c | 28 ++++++++++++++++++++-------- libavcodec/vp3dsp.h | 5 +++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/libavcodec/vp3dsp.c b/libavcodec/vp3dsp.c index cdf7d6490e..c21d1539ee 100644 --- a/libavcodec/vp3dsp.c +++ b/libavcodec/vp3dsp.c @@ -227,14 +227,14 @@ static void vp3_idct_dc_add_c(uint8_t *dest /* align 8 */, ptrdiff_t stride, block[0] = 0; } -static void vp3_v_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, - int *bounding_values) +static av_always_inline void vp3_v_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, + int *bounding_values, int count) { unsigned char *end; int filter_value; const ptrdiff_t nstride = -stride; - for (end = first_pixel + 8; first_pixel < end; first_pixel++) { + for (end = first_pixel + count; first_pixel < end; first_pixel++) { filter_value = (first_pixel[2 * nstride] - first_pixel[stride]) + (first_pixel[0] - first_pixel[nstride]) * 3; filter_value = bounding_values[(filter_value + 4) >> 3]; @@ -244,13 +244,13 @@ static void vp3_v_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, } } -static void vp3_h_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, - int *bounding_values) +static av_always_inline void vp3_h_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, + int *bounding_values, int count) { unsigned char *end; int filter_value; - for (end = first_pixel + 8 * stride; first_pixel != end; first_pixel += stride) { + for (end = first_pixel + count * stride; first_pixel != end; first_pixel += stride) { filter_value = (first_pixel[-2] - first_pixel[1]) + (first_pixel[ 0] - first_pixel[-1]) * 3; filter_value = bounding_values[(filter_value + 4) >> 3]; @@ -260,6 +260,18 @@ static void vp3_h_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride, } } +#define LOOP_FILTER(prefix, dim, count) \ +void prefix##_##dim##_loop_filter_##count##_c(uint8_t *first_pixel, ptrdiff_t stride, \ + int *bounding_values) \ +{ \ + vp3_##dim##_loop_filter_c(first_pixel, stride, bounding_values, count); \ +} + +static LOOP_FILTER(vp3, v, 8) +static LOOP_FILTER(vp3, h, 8) +LOOP_FILTER(ff_vp4, v, 12) +LOOP_FILTER(ff_vp4, h, 12) + static void put_no_rnd_pixels_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, ptrdiff_t stride, int h) { @@ -284,8 +296,8 @@ av_cold void ff_vp3dsp_init(VP3DSPContext *c, int flags) c->idct_put = vp3_idct_put_c; c->idct_add = vp3_idct_add_c; c->idct_dc_add = vp3_idct_dc_add_c; - c->v_loop_filter = vp3_v_loop_filter_c; - c->h_loop_filter = vp3_h_loop_filter_c; + c->v_loop_filter = vp3_v_loop_filter_8_c; + c->h_loop_filter = vp3_h_loop_filter_8_c; if (ARCH_ARM) ff_vp3dsp_init_arm(c, flags); diff --git a/libavcodec/vp3dsp.h b/libavcodec/vp3dsp.h index f5f042dc0c..da320531ac 100644 --- a/libavcodec/vp3dsp.h +++ b/libavcodec/vp3dsp.h @@ -43,8 +43,13 @@ typedef struct VP3DSPContext { void (*idct_dc_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block); void (*v_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values); void (*h_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values); + void (*v_loop_filter_12)(uint8_t *src, ptrdiff_t stride, int *bounding_values); + void (*h_loop_filter_12)(uint8_t *src, ptrdiff_t stride, int *bounding_values); } VP3DSPContext; +void ff_vp4_v_loop_filter_12_c(uint8_t *first_pixel, ptrdiff_t stride, int *bounding_values); +void ff_vp4_h_loop_filter_12_c(uint8_t *first_pixel, ptrdiff_t stride, int *bounding_values); + void ff_vp3dsp_init(VP3DSPContext *c, int flags); void ff_vp3dsp_init_arm(VP3DSPContext *c, int flags); void ff_vp3dsp_init_ppc(VP3DSPContext *c, int flags);