[FFmpeg-devel] [PATCH v1 2/3] swscale/la: Add yuv2rgb_lasx.c and rgb2rgb_lasx.c files
Shiyou Yin
yinshiyou-hf at loongson.cn
Wed Aug 31 12:56:10 EEST 2022
> --- /dev/null
> +++ b/libswscale/loongarch/rgb2rgb_lasx.c
> @@ -0,0 +1,52 @@
> +/*
> + * Copyright (c) 2022 Loongson Technology Corporation Limited
> + * Contributed by Hao Chen(chenhao at loongson.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 "swscale_loongarch.h"
> +#include "libavutil/loongarch/loongson_intrinsics.h"
> +
> +void ff_interleave_bytes_lasx(const uint8_t *src1, const uint8_t *src2,
> + uint8_t *dest, int width, int height,
> + int src1Stride, int src2Stride, int dstStride)
> +{
> + int h;
> + int len = width & (0xFFFFFFF0);
> +
> + for (h = 0; h < height; h++) {
> + int w, index = 0;
> + __m256i src_1, src_2, dst;
> +
> + for (w = 0; w < len; w += 16) {
> + DUP2_ARG2(__lasx_xvld, src1 + w, 0, src2 + w, 0, src_1, src_2);
> + src_1 = __lasx_xvpermi_d(src_1, 0xD8);
> + src_2 = __lasx_xvpermi_d(src_2, 0xD8);
> + dst = __lasx_xvilvl_b(src_2, src_1);
> + __lasx_xvst(dst, dest + index, 0);
> + index += 32;
> + }
> + for (w = 0; w < width; w++) {
w shouldn’t be reset to 0.
More information about the ffmpeg-devel
mailing list