Some random ideas if anyone wants to optimize this patch:

> +// Converts from RGB image to 32-bit pixels in CAIRO_FORMAT_RGB24 format
> ...
> +     for (int x = 0;  x < im->m_width;  x++, src += 3)
> +     {
> +         *dst++ = src[2];    // blue
> +         *dst++ = src[1];    // green
> +         *dst++ = src[0];    // red
> +         *dst++;             // alpha not used
> +     }

I suspect it would be faster to write a zero into the alpha byte,
rather than just increment past it.  This would let the CPU's write buffer
merge all the writes, rather than leaving holes that require
read-modify-write cycles on main memory.

Hmm, since the code already 32-bit aligns each scanline of the video
buffer, then the loop could instead just do:

     unsigned int *dstint = dst;
  ...
     {
         *dstint++ = (src[0] << 8) | (src[1] << 16) | (src[2] << 14);
     }

This would probably be significantly faster, but you'd need a second
version for little-endian machines.

        John


_______________________________________________
Gnash-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnash-dev

Reply via email to