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


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


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 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

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

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 
 #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