From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Subject: [FFmpeg-devel] [PATCH 4/7] avcodec/mips/mpegvideo: Set denoise_dct only for encoder Date: Sun, 9 Jun 2024 11:54:35 +0200 Message-ID: <AS8P250MB0744214E4C2E2E38D58B75248FC52@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <AS8P250MB0744B447474582187460B9FB8FC52@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> The C version is set in ff_dct_encode_init(), yet the MIPS version is set in dct_init() (in ff_mpv_common_init() and therefore also for decoders). This commit fixes this inconsistency. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/mips/Makefile | 4 +- libavcodec/mips/mpegvideo_init_mips.c | 2 - libavcodec/mips/mpegvideo_mmi.c | 72 ----------------- libavcodec/mips/mpegvideoenc_init_mips.c | 33 ++++++++ libavcodec/mips/mpegvideoenc_mmi.c | 98 ++++++++++++++++++++++++ libavcodec/mpegvideo_enc.c | 4 +- libavcodec/mpegvideoenc.h | 1 + 7 files changed, 138 insertions(+), 76 deletions(-) create mode 100644 libavcodec/mips/mpegvideoenc_init_mips.c create mode 100644 libavcodec/mips/mpegvideoenc_mmi.c diff --git a/libavcodec/mips/Makefile b/libavcodec/mips/Makefile index 0647c0142a..fc1bc6b03f 100644 --- a/libavcodec/mips/Makefile +++ b/libavcodec/mips/Makefile @@ -31,7 +31,8 @@ OBJS-$(CONFIG_BLOCKDSP) += mips/blockdsp_init_mips.o OBJS-$(CONFIG_PIXBLOCKDSP) += mips/pixblockdsp_init_mips.o OBJS-$(CONFIG_IDCTDSP) += mips/idctdsp_init_mips.o OBJS-$(CONFIG_MPEGVIDEO) += mips/mpegvideo_init_mips.o -OBJS-$(CONFIG_MPEGVIDEOENC) += mips/mpegvideoencdsp_init_mips.o +OBJS-$(CONFIG_MPEGVIDEOENC) += mips/mpegvideoenc_init_mips.o \ + mips/mpegvideoencdsp_init_mips.o OBJS-$(CONFIG_ME_CMP) += mips/me_cmp_init_mips.o OBJS-$(CONFIG_MPEG4_DECODER) += mips/xvididct_init_mips.o OBJS-$(CONFIG_VC1DSP) += mips/vc1dsp_init_mips.o @@ -76,6 +77,7 @@ MMI-OBJS-$(CONFIG_H264DSP) += mips/h264dsp_mmi.o MMI-OBJS-$(CONFIG_H264CHROMA) += mips/h264chroma_mmi.o MMI-OBJS-$(CONFIG_H264PRED) += mips/h264pred_mmi.o MMI-OBJS-$(CONFIG_MPEGVIDEO) += mips/mpegvideo_mmi.o +MMI-OBJS-$(CONFIG_MPEGVIDEOENC) += mips/mpegvideoenc_mmi.o MMI-OBJS-$(CONFIG_IDCTDSP) += mips/idctdsp_mmi.o \ mips/simple_idct_mmi.o MMI-OBJS-$(CONFIG_MPEG4_DECODER) += mips/xvid_idct_mmi.o diff --git a/libavcodec/mips/mpegvideo_init_mips.c b/libavcodec/mips/mpegvideo_init_mips.c index f687ad18f1..1d02b0c937 100644 --- a/libavcodec/mips/mpegvideo_init_mips.c +++ b/libavcodec/mips/mpegvideo_init_mips.c @@ -36,8 +36,6 @@ av_cold void ff_mpv_common_init_mips(MpegEncContext *s) if (!(s->avctx->flags & AV_CODEC_FLAG_BITEXACT)) if (!s->q_scale_type) s->dct_unquantize_mpeg2_intra = ff_dct_unquantize_mpeg2_intra_mmi; - - s->denoise_dct= ff_denoise_dct_mmi; } if (have_msa(cpu_flags)) { diff --git a/libavcodec/mips/mpegvideo_mmi.c b/libavcodec/mips/mpegvideo_mmi.c index 3d5b5e20ab..7af421db6b 100644 --- a/libavcodec/mips/mpegvideo_mmi.c +++ b/libavcodec/mips/mpegvideo_mmi.c @@ -434,75 +434,3 @@ void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block, block[0]= block0; } - -void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block) -{ - const int intra = s->mb_intra; - int *sum = s->dct_error_sum[intra]; - uint16_t *offset = s->dct_offset[intra]; - double ftmp[8]; - mips_reg addr[1]; - DECLARE_VAR_ALL64; - - s->dct_count[intra]++; - - __asm__ volatile( - "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" - "1: \n\t" - MMI_LDC1(%[ftmp1], %[block], 0x00) - "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" - MMI_LDC1(%[ftmp3], %[block], 0x08) - "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" - "pcmpgth %[ftmp2], %[ftmp2], %[ftmp1] \n\t" - "pcmpgth %[ftmp4], %[ftmp4], %[ftmp3] \n\t" - "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" - "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" - "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" - "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" - MMI_LDC1(%[ftmp6], %[offset], 0x00) - "mov.d %[ftmp5], %[ftmp1] \n\t" - "psubush %[ftmp1], %[ftmp1], %[ftmp6] \n\t" - MMI_LDC1(%[ftmp6], %[offset], 0x08) - "mov.d %[ftmp7], %[ftmp3] \n\t" - "psubush %[ftmp3], %[ftmp3], %[ftmp6] \n\t" - "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" - "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" - "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" - "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" - MMI_SDC1(%[ftmp1], %[block], 0x00) - MMI_SDC1(%[ftmp3], %[block], 0x08) - "mov.d %[ftmp1], %[ftmp5] \n\t" - "mov.d %[ftmp3], %[ftmp7] \n\t" - "punpcklhw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" - "punpckhhw %[ftmp1], %[ftmp1], %[ftmp0] \n\t" - "punpcklhw %[ftmp7], %[ftmp7], %[ftmp0] \n\t" - "punpckhhw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" - MMI_LDC1(%[ftmp2], %[sum], 0x00) - "paddw %[ftmp5], %[ftmp5], %[ftmp2] \n\t" - MMI_LDC1(%[ftmp2], %[sum], 0x08) - "paddw %[ftmp1], %[ftmp1], %[ftmp2] \n\t" - MMI_LDC1(%[ftmp2], %[sum], 0x10) - "paddw %[ftmp7], %[ftmp7], %[ftmp2] \n\t" - MMI_LDC1(%[ftmp2], %[sum], 0x18) - "paddw %[ftmp3], %[ftmp3], %[ftmp2] \n\t" - MMI_SDC1(%[ftmp5], %[sum], 0x00) - MMI_SDC1(%[ftmp1], %[sum], 0x08) - MMI_SDC1(%[ftmp7], %[sum], 0x10) - MMI_SDC1(%[ftmp3], %[sum], 0x18) - PTR_ADDIU "%[block], %[block], 0x10 \n\t" - PTR_ADDIU "%[sum], %[sum], 0x20 \n\t" - PTR_SUBU "%[addr0], %[block1], %[block] \n\t" - PTR_ADDIU "%[offset], %[offset], 0x10 \n\t" - "bgtz %[addr0], 1b \n\t" - : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), - [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), - [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), - [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), - RESTRICT_ASM_ALL64 - [addr0]"=&r"(addr[0]), - [block]"+&r"(block), [sum]"+&r"(sum), - [offset]"+&r"(offset) - : [block1]"r"(block+64) - : "memory" - ); -} diff --git a/libavcodec/mips/mpegvideoenc_init_mips.c b/libavcodec/mips/mpegvideoenc_init_mips.c new file mode 100644 index 0000000000..5ef0664937 --- /dev/null +++ b/libavcodec/mips/mpegvideoenc_init_mips.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2015 Manojkumar Bhosale (Manojkumar.Bhosale@imgtec.com) + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/attributes.h" +#include "libavutil/mips/cpu.h" +#include "libavcodec/mpegvideoenc.h" +#include "mpegvideo_mips.h" + +av_cold void ff_mpvenc_dct_init_mips(MpegEncContext *s) +{ + int cpu_flags = av_get_cpu_flags(); + + if (have_mmi(cpu_flags)) { + s->denoise_dct = ff_denoise_dct_mmi; + } +} diff --git a/libavcodec/mips/mpegvideoenc_mmi.c b/libavcodec/mips/mpegvideoenc_mmi.c new file mode 100644 index 0000000000..65da155e9f --- /dev/null +++ b/libavcodec/mips/mpegvideoenc_mmi.c @@ -0,0 +1,98 @@ +/* + * Loongson SIMD optimized mpegvideo + * + * Copyright (c) 2015 Loongson Technology Corporation Limited + * Copyright (c) 2015 Zhou Xiaoyong <zhouxiaoyong@loongson.cn> + * Zhang Shuangshuang <zhangshuangshuang@ict.ac.cn> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "mpegvideo_mips.h" +#include "libavutil/mips/mmiutils.h" + +void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block) +{ + const int intra = s->mb_intra; + int *sum = s->dct_error_sum[intra]; + uint16_t *offset = s->dct_offset[intra]; + double ftmp[8]; + mips_reg addr[1]; + DECLARE_VAR_ALL64; + + s->dct_count[intra]++; + + __asm__ volatile( + "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" + "1: \n\t" + MMI_LDC1(%[ftmp1], %[block], 0x00) + "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp3], %[block], 0x08) + "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" + "pcmpgth %[ftmp2], %[ftmp2], %[ftmp1] \n\t" + "pcmpgth %[ftmp4], %[ftmp4], %[ftmp3] \n\t" + "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + MMI_LDC1(%[ftmp6], %[offset], 0x00) + "mov.d %[ftmp5], %[ftmp1] \n\t" + "psubush %[ftmp1], %[ftmp1], %[ftmp6] \n\t" + MMI_LDC1(%[ftmp6], %[offset], 0x08) + "mov.d %[ftmp7], %[ftmp3] \n\t" + "psubush %[ftmp3], %[ftmp3], %[ftmp6] \n\t" + "pxor %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + "psubh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" + MMI_SDC1(%[ftmp1], %[block], 0x00) + MMI_SDC1(%[ftmp3], %[block], 0x08) + "mov.d %[ftmp1], %[ftmp5] \n\t" + "mov.d %[ftmp3], %[ftmp7] \n\t" + "punpcklhw %[ftmp5], %[ftmp5], %[ftmp0] \n\t" + "punpckhhw %[ftmp1], %[ftmp1], %[ftmp0] \n\t" + "punpcklhw %[ftmp7], %[ftmp7], %[ftmp0] \n\t" + "punpckhhw %[ftmp3], %[ftmp3], %[ftmp0] \n\t" + MMI_LDC1(%[ftmp2], %[sum], 0x00) + "paddw %[ftmp5], %[ftmp5], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp2], %[sum], 0x08) + "paddw %[ftmp1], %[ftmp1], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp2], %[sum], 0x10) + "paddw %[ftmp7], %[ftmp7], %[ftmp2] \n\t" + MMI_LDC1(%[ftmp2], %[sum], 0x18) + "paddw %[ftmp3], %[ftmp3], %[ftmp2] \n\t" + MMI_SDC1(%[ftmp5], %[sum], 0x00) + MMI_SDC1(%[ftmp1], %[sum], 0x08) + MMI_SDC1(%[ftmp7], %[sum], 0x10) + MMI_SDC1(%[ftmp3], %[sum], 0x18) + PTR_ADDIU "%[block], %[block], 0x10 \n\t" + PTR_ADDIU "%[sum], %[sum], 0x20 \n\t" + PTR_SUBU "%[addr0], %[block1], %[block] \n\t" + PTR_ADDIU "%[offset], %[offset], 0x10 \n\t" + "bgtz %[addr0], 1b \n\t" + : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), + [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), + [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), + [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), + RESTRICT_ASM_ALL64 + [addr0]"=&r"(addr[0]), + [block]"+&r"(block), [sum]"+&r"(sum), + [offset]"+&r"(offset) + : [block1]"r"(block+64) + : "memory" + ); +} diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index c9cb4c2e64..bc36d4b5a6 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -292,7 +292,9 @@ static void mpv_encode_defaults(MpegEncContext *s) av_cold int ff_dct_encode_init(MpegEncContext *s) { -#if ARCH_X86 +#if ARCH_MIPS + ff_mpvenc_dct_init_mips(s); +#elif ARCH_X86 ff_dct_encode_init_x86(s); #endif diff --git a/libavcodec/mpegvideoenc.h b/libavcodec/mpegvideoenc.h index 169ed1dc3b..abbcdbc8fa 100644 --- a/libavcodec/mpegvideoenc.h +++ b/libavcodec/mpegvideoenc.h @@ -146,6 +146,7 @@ int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t s void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); int ff_dct_encode_init(MpegEncContext *s); +void ff_mpvenc_dct_init_mips(MpegEncContext *s); void ff_dct_encode_init_x86(MpegEncContext *s); void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], -- 2.40.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2024-06-09 9:55 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-06-09 9:47 [FFmpeg-devel] [PATCH 1/7] avcodec/dnxhdenc: Remove always-false check Andreas Rheinhardt 2024-06-09 9:54 ` [FFmpeg-devel] [PATCH 2/7] avcodec/mpegvideo_enc: Make ff_dct_quantize_c() static Andreas Rheinhardt 2024-06-09 9:54 ` [FFmpeg-devel] [PATCH 3/7] avcodec/mpegvideo_enc: Move initializing H263DSP to ituh263enc.c Andreas Rheinhardt 2024-06-09 9:54 ` Andreas Rheinhardt [this message] 2024-06-09 9:54 ` [FFmpeg-devel] [PATCH 5/7] avcodec/mpegvideo_enc: Always set c funcs in ff_dct_encode_init() Andreas Rheinhardt 2024-06-09 9:54 ` [FFmpeg-devel] [PATCH 6/7] avcodec/mpegvideo: Remove fast_dct_quantize Andreas Rheinhardt 2024-06-09 9:54 ` [FFmpeg-devel] [PATCH 7/7] avcodec/mpegvideo_enc: Don't pretend ff_dct_encode_init() can fail Andreas Rheinhardt 2024-06-09 10:12 ` Rémi Denis-Courmont 2024-06-11 20:56 ` [FFmpeg-devel] [PATCH 1/7] avcodec/dnxhdenc: Remove always-false check Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AS8P250MB0744214E4C2E2E38D58B75248FC52@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git