Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2
On Apr 11, 2011, at 5:26 AM, Kostya wrote: > On Mon, Apr 11, 2011 at 11:07:39AM +0200, Luca Barbato wrote: >> With this commit we should have all the arch specific code moved away. >> Init pattern now: >> - generic C init first >> - arch specific init later overwriting >> >> In future the arch specific init will overwrite just the generics for >> which we have an optimization. >> [..] > >> +void rgb2rgb_init_x86(int flags); > > is that requirement by modern GCC to declare function before its > implementation in the same file? Requirement of the compiler flags (-Werror=missing-prototypes). If it's only used in this file it should be static. > >> +void rgb2rgb_init_x86(int flags) >> +{ >> + >> +#if HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX >> +if (flags & SWS_CPU_CAPS_SSE2) >> +rgb2rgb_init_SSE2(); >> +else if (flags & SWS_CPU_CAPS_MMX2) >> +rgb2rgb_init_MMX2(); >> +else if (flags & SWS_CPU_CAPS_3DNOW) >> +rgb2rgb_init_3DNOW(); >> +else if (flags & SWS_CPU_CAPS_MMX) >> +rgb2rgb_init_MMX(); >> +#endif /* HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX */ >> +} >> -- >> 1.7.4.1 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2
On Mon, Apr 11, 2011 at 11:26:16AM +0200, Kostya wrote: > On Mon, Apr 11, 2011 at 11:07:39AM +0200, Luca Barbato wrote: > > With this commit we should have all the arch specific code moved away. > > Init pattern now: > > - generic C init first > > - arch specific init later overwriting > > > > --- /dev/null > > +++ b/libswscale/x86/rgb2rgb.c > > +void rgb2rgb_init_x86(int flags); > > is that requirement by modern GCC to declare function before its > implementation in the same file? It is a requirement of modern FFmpeg configure which adds -Werror=implicit-declaration to CFLAGS. The declaration should go in a header file instead. Diego ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2
On Mon, Apr 11, 2011 at 11:07:39AM +0200, Luca Barbato wrote: > With this commit we should have all the arch specific code moved away. > Init pattern now: > - generic C init first > - arch specific init later overwriting > > --- a/libswscale/rgb2rgb.c > +++ b/libswscale/rgb2rgb.c > @@ -130,21 +51,14 @@ DECLARE_ASM_CONST(8, uint64_t, blue_15mask) = > 0x001f001fULL; > 32-bit C version, and and&add trick by Michael Niedermayer > */ > > +void rgb2rgb_init_x86(); Do we not have a suitable header for this forward declaration? > --- /dev/null > +++ b/libswscale/x86/rgb2rgb.c > @@ -0,0 +1,146 @@ > +/* > + * software RGB to RGB converter > + * pluralize by software PAL8 to RGB converter > + * software YUV to YUV converter > + * software YUV to RGB converter > + * Written by Nick Kurshev. > + * palette & YUV & runtime CPU stuff by Michael (michae...@gmx.at) > + * > + * This file is part of FFmpeg. U > + * 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 > +#include "config.h" > +#include "libavutil/x86_cpu.h" > +#include "libavutil/bswap.h" > +#include "libswscale/rgb2rgb.h" > +#include "libswscale/swscale.h" > +#include "libswscale/swscale_internal.h" nits: I suspect just stdint.h is enough; add empty lines before the #includes and between system and local #includes. > +#if ARCH_X86 This file is only compiled for x86, so this is unnecessary. > +#if ARCH_X86 again > +void rgb2rgb_init_x86(int flags); Yeah, we need a header file, now the forward declaration is duplicated. Diego ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2
On Mon, Apr 11, 2011 at 11:07:39AM +0200, Luca Barbato wrote: > With this commit we should have all the arch specific code moved away. > Init pattern now: > - generic C init first > - arch specific init later overwriting > > In future the arch specific init will overwrite just the generics for > which we have an optimization. > --- > libswscale/Makefile |3 +- > libswscale/rgb2rgb.c | 94 + > libswscale/x86/rgb2rgb.c | 146 > ++ > 3 files changed, 152 insertions(+), 91 deletions(-) > create mode 100644 libswscale/x86/rgb2rgb.c > > index e6d7971..9e27e82 100644 > --- a/libswscale/rgb2rgb.c > +++ b/libswscale/rgb2rgb.c > @@ -130,21 +51,14 @@ DECLARE_ASM_CONST(8, uint64_t, blue_15mask) = > 0x001f001fULL; > 32-bit C version, and and&add trick by Michael Niedermayer > */ > > +void rgb2rgb_init_x86(); > + > void sws_rgb2rgb_init(int flags) > { > - > +rgb2rgb_init_c(); > #if HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX > -if (flags & SWS_CPU_CAPS_SSE2) > -rgb2rgb_init_SSE2(); > -else if (flags & SWS_CPU_CAPS_MMX2) > -rgb2rgb_init_MMX2(); > -else if (flags & SWS_CPU_CAPS_3DNOW) > -rgb2rgb_init_3DNOW(); > -else if (flags & SWS_CPU_CAPS_MMX) > -rgb2rgb_init_MMX(); > -else > +rgb2rgb_init_x86(); > #endif /* HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX */ > -rgb2rgb_init_c(); > } change condition to #if ARCH_X86 or something, the function is always present on x86 even if empty, isn't it? > #if LIBSWSCALE_VERSION_MAJOR < 1 > diff --git a/libswscale/x86/rgb2rgb.c b/libswscale/x86/rgb2rgb.c > new file mode 100644 > index 000..a1130c3 > --- /dev/null > +++ b/libswscale/x86/rgb2rgb.c [...] > + > +/* > + RGB15->RGB16 original by Strepto/Astral > + ported to gcc & bugfixed : A'rpi > + MMX2, 3DNOW optimization by Nick Kurshev > + 32-bit C version, and and&add trick by Michael Niedermayer > +*/ that comment does not belong here > +void rgb2rgb_init_x86(int flags); is that requirement by modern GCC to declare function before its implementation in the same file? > +void rgb2rgb_init_x86(int flags) > +{ > + > +#if HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX > +if (flags & SWS_CPU_CAPS_SSE2) > +rgb2rgb_init_SSE2(); > +else if (flags & SWS_CPU_CAPS_MMX2) > +rgb2rgb_init_MMX2(); > +else if (flags & SWS_CPU_CAPS_3DNOW) > +rgb2rgb_init_3DNOW(); > +else if (flags & SWS_CPU_CAPS_MMX) > +rgb2rgb_init_MMX(); > +#endif /* HAVE_MMX2 || HAVE_AMD3DNOW || HAVE_MMX */ > +} > -- > 1.7.4.1 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2
With this commit we should have all the arch specific code moved away. Init pattern now: - generic C init first - arch specific init later overwriting In future the arch specific init will overwrite just the generics for which we have an optimization. --- libswscale/Makefile |3 +- libswscale/rgb2rgb.c | 94 + libswscale/x86/rgb2rgb.c | 146 ++ 3 files changed, 152 insertions(+), 91 deletions(-) create mode 100644 libswscale/x86/rgb2rgb.c diff --git a/libswscale/Makefile b/libswscale/Makefile index 3ac60e5..b8f233f 100644 --- a/libswscale/Makefile +++ b/libswscale/Makefile @@ -12,7 +12,8 @@ OBJS-$(ARCH_BFIN) += bfin/internal_bfin.o \ bfin/yuv2rgb_bfin.o OBJS-$(CONFIG_MLIB)+= mlib/yuv2rgb_mlib.o OBJS-$(HAVE_ALTIVEC) += ppc/yuv2rgb_altivec.o -OBJS-$(HAVE_MMX) += x86/yuv2rgb_mmx.o +OBJS-$(HAVE_MMX) += x86/rgb2rgb.o \ + x86/yuv2rgb_mmx.o OBJS-$(HAVE_VIS) += sparc/yuv2rgb_vis.o TESTPROGS = colorspace swscale diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c index e6d7971..9e27e82 100644 --- a/libswscale/rgb2rgb.c +++ b/libswscale/rgb2rgb.c @@ -24,50 +24,11 @@ */ #include #include "config.h" -#include "libavutil/x86_cpu.h" #include "libavutil/bswap.h" #include "rgb2rgb.h" #include "swscale.h" #include "swscale_internal.h" -#if ARCH_X86 -DECLARE_ASM_CONST(8, uint64_t, mmx_ff) = 0x00FFULL; -DECLARE_ASM_CONST(8, uint64_t, mmx_null) = 0xULL; -DECLARE_ASM_CONST(8, uint64_t, mmx_one) = 0xULL; -DECLARE_ASM_CONST(8, uint64_t, mask32b) = 0x00FF00FFULL; -DECLARE_ASM_CONST(8, uint64_t, mask32g) = 0xFF00FF00ULL; -DECLARE_ASM_CONST(8, uint64_t, mask32r) = 0x00FF00FFULL; -DECLARE_ASM_CONST(8, uint64_t, mask32a) = 0xFF00FF00ULL; -DECLARE_ASM_CONST(8, uint64_t, mask32) = 0x00FF00FFULL; -DECLARE_ASM_CONST(8, uint64_t, mask3216br) = 0x00F800F800F800F8ULL; -DECLARE_ASM_CONST(8, uint64_t, mask3216g)= 0xFC00FC00ULL; -DECLARE_ASM_CONST(8, uint64_t, mask3215g)= 0xF800F800ULL; -DECLARE_ASM_CONST(8, uint64_t, mul3216) = 0x20042004ULL; -DECLARE_ASM_CONST(8, uint64_t, mul3215) = 0x20082008ULL; -DECLARE_ASM_CONST(8, uint64_t, mask24b) = 0x00FFFFFFULL; -DECLARE_ASM_CONST(8, uint64_t, mask24g) = 0xFFFFFF00ULL; -DECLARE_ASM_CONST(8, uint64_t, mask24r) = 0xFFFFULL; -DECLARE_ASM_CONST(8, uint64_t, mask24l) = 0x00FFULL; -DECLARE_ASM_CONST(8, uint64_t, mask24h) = 0xFF00ULL; -DECLARE_ASM_CONST(8, uint64_t, mask24hh) = 0xULL; -DECLARE_ASM_CONST(8, uint64_t, mask24hhh)= 0xULL; -DECLARE_ASM_CONST(8, uint64_t, mask24) = 0xULL; -DECLARE_ASM_CONST(8, uint64_t, mask15b) = 0x001F001F001F001FULL; /* 0001 xxB */ -DECLARE_ASM_CONST(8, uint64_t, mask15rg) = 0x7FE07FE07FE07FE0ULL; /* 0111 1110 RGx */ -DECLARE_ASM_CONST(8, uint64_t, mask15s) = 0xFFE0FFE0FFE0FFE0ULL; -DECLARE_ASM_CONST(8, uint64_t, mask15g) = 0x03E003E003E003E0ULL; -DECLARE_ASM_CONST(8, uint64_t, mask15r) = 0x7C007C007C007C00ULL; -#define mask16b mask15b -DECLARE_ASM_CONST(8, uint64_t, mask16g) = 0x07E007E007E007E0ULL; -DECLARE_ASM_CONST(8, uint64_t, mask16r) = 0xF800F800F800F800ULL; -DECLARE_ASM_CONST(8, uint64_t, red_16mask) = 0xf800f800ULL; -DECLARE_ASM_CONST(8, uint64_t, green_16mask) = 0x07e007e0ULL; -DECLARE_ASM_CONST(8, uint64_t, blue_16mask) = 0x001f001fULL; -DECLARE_ASM_CONST(8, uint64_t, red_15mask) = 0x7c007c00ULL; -DECLARE_ASM_CONST(8, uint64_t, green_15mask) = 0x03e003e0ULL; -DECLARE_ASM_CONST(8, uint64_t, blue_15mask) = 0x001f001fULL; -#endif /* ARCH_X86 */ - #define RGB2YUV_SHIFT 8 #define BY ((int)( 0.098*(1