Hi Georgios,
On Tue, 2002-11-26 at 18:07, Georgios Kapetanakis wrote:
> However, all I get is a black picture, no data.
Hm, I know I should have tested it before clicking that 'send' button...
This one has been tested:
static void
bgr32_to_rgb32 (unsigned char *src,
unsigned char *dest,
unsigned int size)
{
while (size > 3) {
*((guint32*)dest) = ((*((guint32*)src))&0xff000000)>>24 |
((*((guint32*)src))&0x00ff0000)>>8 |
((*((guint32*)src))&0x0000ff00)<<8 |
((*((guint32*)src))&0x000000ff)<<24;
dest += 4; src += 4; size -= 4;
}
}
"works for me". :-).
> Finally, if I don't do the swapping, Mark, I get constant 25fps, with
> precision to the millisecond, so the system can cope with the throughput
> quite well. True, uncompressed rgb24 image is around 1.3MB, but it works so
> far. I'm hoping eventually to move to the 16bit colourdepth, which will
> halve that image size.
For 16-bit, you could adapt the thing a bit to handle 2 bytes at the
same time. This is what libs like hermes or libcolorspace do:
static void
bgr16_to_rgb16 (unsigned char *src,
unsigned char *dest,
unsigned int size)
{
guint16 temp;
while (size > 3) {
temp = ((*((guint16*)src))&0xf800)>>11 |
((*((guint16*)src))&0x0770) |
((*((guint16*)src))&0x008f)<<11;
src += 2;
*((guint32*)dest) = dest<<16 |
((*((guint16*)src))&0xf800)>>11 |
((*((guint16*)src))&0x0770) |
((*((guint16*)src))&0x008f)<<11;
src += 2; dest += 4; size -= 4;
}
if (size > 1)
*((guint16*)dest) = ((*((guint16*)src))&0xf800)>>11 |
((*((guint16*)src))&0x0770) |
((*((guint16*)src))&0x008f)<<11;
}
Or so... Again, this is untested. ;-). Compiler will do some
optimizations with the temporary variable, so be sure to use -O2 or so
with gcc.
HTH,
--
Ronald Bultje <[EMAIL PROTECTED]>
Linux Video/Multimedia developer
--
video4linux-list mailing list
Unsubscribe mailto:[EMAIL PROTECTED]?subject=unsubscribe
https://listman.redhat.com/mailman/listinfo/video4linux-list