[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