Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2

2011-04-12 Thread Alexander Strange

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


[libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2

2011-04-11 Thread Luca Barbato
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 inttypes.h
 #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*(1RGB2YUV_SHIFT)+0.5))
 #define BV ((int)(-0.071*(1RGB2YUV_SHIFT)+0.5))
@@ -79,49 +40,9 @@ DECLARE_ASM_CONST(8, uint64_t, blue_15mask)  = 
0x001f001fULL;
 #define RV ((int)( 0.439*(1RGB2YUV_SHIFT)+0.5))
 #define RU ((int)(-0.148*(1RGB2YUV_SHIFT)+0.5))
 
-//Note: We have C, MMX, MMX2, 3DNOW versions, there is no 3DNOW + MMX2 one.
 //plain C versions
 #include rgb2rgb_template.c
 
-#if ARCH_X86
-#define COMPILE_TEMPLATE_MMX 0
-#define COMPILE_TEMPLATE_MMX2 0
-#define COMPILE_TEMPLATE_AMD3DNOW 0
-#define COMPILE_TEMPLATE_SSE2 0
-
-//MMX versions
-#undef RENAME
-#undef COMPILE_TEMPLATE_MMX
-#define COMPILE_TEMPLATE_MMX 1
-#define RENAME(a) a ## _MMX
-#include x86/rgb2rgb_template.c
-
-//MMX2 versions
-#undef RENAME
-#undef COMPILE_TEMPLATE_MMX2
-#define COMPILE_TEMPLATE_MMX2 1
-#define RENAME(a) a ## _MMX2
-#include x86/rgb2rgb_template.c
-
-//SSE2 versions
-#undef RENAME
-#undef COMPILE_TEMPLATE_SSE2
-#define 

Re: [libav-devel] [PATCH 06/14] Move away x86 specific code from rgb2rgb part 2

2011-04-11 Thread Diego Biurrun
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 andadd 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 inttypes.h
 +#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

2011-04-11 Thread Diego Biurrun
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