[FFmpeg-cvslog] r29010 - in trunk/libswscale: yuv2rgb.c yuv2rgb_template.c

Reimar Döffinger Reimar.Doeffinger
Fri Mar 20 17:33:37 CET 2009


On Fri, Mar 20, 2009 at 03:14:28PM +0100, sdrik wrote:
> Modified: trunk/libswscale/yuv2rgb_template.c
> ==============================================================================
> --- trunk/libswscale/yuv2rgb_template.c	Fri Mar 20 15:01:51 2009	(r29009)
> +++ trunk/libswscale/yuv2rgb_template.c	Fri Mar 20 15:14:28 2009	(r29010)
> @@ -171,6 +171,14 @@
>      __asm__ volatile (EMMS); \
>      return srcSliceH; \
>  
> +#define YUV2RGB_OPERANDS_ALPHA \
> +        : "+r" (index), "+r" (image) \
> +        : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), "r" (py - 2*index), "r" (pa - 2*index) \
> +        ); \
> +    } \
> +    __asm__ volatile (EMMS); \
> +    return srcSliceH; \
> +
>  static inline int RENAME(yuv420_rgb16)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
>                                         int srcSliceH, uint8_t* dst[], int dstStride[]){
>      int y, h_size;
> @@ -456,3 +464,19 @@ static inline int RENAME(yuv420_rgb32)(S
>      YUV2RGB_ENDLOOP(4)
>      YUV2RGB_OPERANDS
>  }
> +
> +static inline int RENAME(yuva420_rgb32)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
> +                                        int srcSliceH, uint8_t* dst[], int dstStride[]){
> +    int y, h_size;
> +
> +    YUV2RGB_LOOP(4)
> +
> +        uint8_t *pa = src[3] + y*srcStride[3];
> +        YUV2RGB_INIT
> +        YUV2RGB
> +        "movq     (%6, %0, 2), %%mm3;"            /* Load 8 A A7 A6 A5 A4 A3 A2 A1 A0 */
> +        RGB_PLANAR2PACKED32
> +
> +    YUV2RGB_ENDLOOP(4)
> +    YUV2RGB_OPERANDS_ALPHA
> +}

Do _not_ commit assembler code without checking compilation with -fPIC
and --enable-debug.
This uses 7 registers and can only be used when the appropriate define
is set.




More information about the ffmpeg-cvslog mailing list