[Ffmpeg-devel] PATCH: Blackfin Accelerated CSC (Color Space Converter)

Michael Niedermayer michaelni
Sat Apr 28 12:29:11 CEST 2007


Hi

On Thu, Apr 26, 2007 at 08:52:16AM -0400, Marc Hoffman wrote:
Content-Description: message body text
> 
> Marc Hoffman writes:
>  > 
>  > Please review, and let me know how this is comming along?
> 
> Couple of small changes, fall back support for handling no more L1
> available.  internal local lables changed to start with L or .L.
> 
> Please review.
> 
> csctst.c:241: warning: passing argument 5 of 'ldframeYUV' from incompatible pointer type
> yoda:~/mp/libswscale mmh$ rsh -l root mad "cd /u/mp/libswscale; ./csctst" 
> [swscaler @ 0x25f5430]BlackFin Accelerated Color Space Converter rgb24
> [swscaler @ 0x25f5430]BlackFin Accelerated Color Space Converter rgb24
> [swscaler @ 0x25f5430]No accelerated colorspace conversion found
> 115397126 133545084 166542709
> 18147958 32997625
> improve 181.825553
> yoda:~/mp/libswscale mmh$ 
> 
> Which is a 182% of a performance boost if anyone is interested.
> 

[...]
> +static
> +int core_yuv420_rgb (SwsContext *c,
> +                     unsigned char **in, int *instrides,
> +                     int srcSliceY, int srcSliceH,
> +                     unsigned char **oplanes, int *outstrides, ltransform_t lcscf, int rgb)
> +{
> +    unsigned char *py,*pu,*pv,*op;
> +    int w  = instrides[0];
> +    int w2 = w/2;
> +    int h2 = srcSliceH>>1;
> +    int i;
> +
> +    py = in[0];
> +    pv = in[1+(0^rgb)];
> +    pu = in[1+(1^rgb)];

exchanging u and v is not equivalent to exchanging r anf b (i dont know if
theres any code which changes to coefficients to compensate the difference)


[...]

> +    c->cy  = c->yCoeff &0xffffffffU;
> +    c->crv = c->vrCoeff&0xffffffffU;
> +    c->cbu = c->ubCoeff&0xffffffffU;
> +    c->cgu = c->ugCoeff&0xffffffffU;
> +    c->cgv = c->vgCoeff&0xffffffffU;

why doesnt the asm code use *Coeff directly?

[...]
> +SwsFunc ff_bfin_yuv2rgb_get_func_ptr (SwsContext *c)
> +{
> +    SwsFunc f = 0;
> +
> +    switch(c->dstFormat) {
> +    case PIX_FMT_RGB555: f = bfin_yuv420_rgb555; break;
> +    case PIX_FMT_BGR555: f = bfin_yuv420_bgr555; break;
> +    case PIX_FMT_RGB565: f = bfin_yuv420_rgb565; break;
> +    case PIX_FMT_BGR565: f = bfin_yuv420_bgr565; break;
> +    case PIX_FMT_RGB24:  f = bfin_yuv420_rgb24;  break;
> +    case PIX_FMT_BGR24:  f = bfin_yuv420_bgr24;  break;
> +    }
> +
> +    if (f)
> +      av_log(c, AV_LOG_INFO, "BlackFin Accelerated Color Space Converter %s\n", sws_format_name (c->dstFormat));

this could be a default: in the switch


[...]
> Index: swscale_internal.h
> ===================================================================
> --- swscale_internal.h	(revision 22874)
> +++ swscale_internal.h	(working copy)
> @@ -162,6 +162,27 @@
>  
>  #endif
>  
> + 
> +#ifdef ARCH_BFIN
> +  int      scl;
> +  uint32_t oc;
> +  uint32_t oy;
> +  uint32_t cy;
> +  uint32_t ymin;
> +  uint32_t ymax;
> +  uint32_t crv;
> +  uint32_t rmask;
> +  uint32_t cgu;
> +  uint32_t cgv;
> +  uint32_t gmask;
> +  uint32_t cbu;
> +  uint32_t bmask;
> + 
> +  /* temporary memory buffers for translating between color spaces */
> +  short *tmpY, *tmpU, *tmpV;
> +#endif
> +

please indent them like the original c code

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Those who are too smart to engage in politics are punished by being
governed by those who are dumber. -- Plato 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070428/8e2045de/attachment.pgp>



More information about the ffmpeg-devel mailing list