summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2001-11-04 19:36:24 +0000
committerMichael Niedermayer <michaelni@gmx.at>2001-11-04 19:36:24 +0000
commitfcfbc150aa65b3a575186cb2e721dd6008d74c12 (patch)
treec00e218c99ea7007af32aa25f33f2c242d3fa7b9
parent7d7f78b5a4f59cd17d90f75a5e2a99c0b4e864e7 (diff)
bgr32to16, bgr32to15 (needed for palette stuff)
paletteto 32,16,15bgr all in c, will be optimized as soon as they are tested (assuming opt. is possible) Originally committed as revision 2695 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
-rw-r--r--postproc/rgb2rgb.c59
-rw-r--r--postproc/rgb2rgb.h9
-rw-r--r--postproc/rgb2rgb_template.c59
3 files changed, 124 insertions, 3 deletions
diff --git a/postproc/rgb2rgb.c b/postproc/rgb2rgb.c
index 5fe94f04ed..f83d565dbb 100644
--- a/postproc/rgb2rgb.c
+++ b/postproc/rgb2rgb.c
@@ -1,4 +1,4 @@
-/*
+/*
*
* rgb2rgb.c, Software RGB to RGB convertor
* Written by Nick Kurshev.
@@ -170,3 +170,60 @@ void rgb15to16(const uint8_t *src,uint8_t *dst,uint32_t src_size)
}
#endif
}
+
+/**
+ * Pallete is assumed to contain bgr32
+ */
+void palette8torgb32(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint32_t *)dst)[i] = ((uint32_t *)palette)[ src[i] ];
+}
+
+void rgb32to16(uint8_t *src, uint8_t *dst, int src_size)
+{
+ int i;
+ for(i=0; i<src_size; i+=4)
+ {
+ const int b= src[i+0];
+ const int g= src[i+1];
+ const int r= src[i+2];
+
+ ((uint16_t *)dst)[i]= (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
+ }
+}
+
+void rgb32to15(uint8_t *src, uint8_t *dst, int src_size)
+{
+ int i;
+ for(i=0; i<src_size; i+=4)
+ {
+ const int b= src[i+0];
+ const int g= src[i+1];
+ const int r= src[i+2];
+
+ ((uint16_t *)dst)[i]= (b>>3) | ((g&0xF8)<<3) | ((r&0xF8)<<7);
+ }
+}
+
+
+/**
+ * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette
+ */
+void palette8torgb16(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
+}
+
+/**
+ * Pallete is assumed to contain bgr15, see rgb32to15 to convert the palette
+ */
+void palette8torgb15(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
+} \ No newline at end of file
diff --git a/postproc/rgb2rgb.h b/postproc/rgb2rgb.h
index 259bfa6b75..db6aff5f80 100644
--- a/postproc/rgb2rgb.h
+++ b/postproc/rgb2rgb.h
@@ -1,4 +1,4 @@
-/*
+/*
*
* rgb2rgb.h, Software RGB to RGB convertor
*
@@ -11,4 +11,11 @@ extern void rgb24to32(const uint8_t *src,uint8_t *dst,uint32_t src_size);
extern void rgb32to24(const uint8_t *src,uint8_t *dst,uint32_t src_size);
extern void rgb15to16(const uint8_t *src,uint8_t *dst,uint32_t src_size);
+void rgb32to16(uint8_t *src, uint8_t *dst, int src_size);
+void rgb32to15(uint8_t *src, uint8_t *dst, int src_size);
+void palette8torgb32(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette);
+void palette8torgb16(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette);
+void palette8torgb15(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette);
+
+
#endif
diff --git a/postproc/rgb2rgb_template.c b/postproc/rgb2rgb_template.c
index 5fe94f04ed..f83d565dbb 100644
--- a/postproc/rgb2rgb_template.c
+++ b/postproc/rgb2rgb_template.c
@@ -1,4 +1,4 @@
-/*
+/*
*
* rgb2rgb.c, Software RGB to RGB convertor
* Written by Nick Kurshev.
@@ -170,3 +170,60 @@ void rgb15to16(const uint8_t *src,uint8_t *dst,uint32_t src_size)
}
#endif
}
+
+/**
+ * Pallete is assumed to contain bgr32
+ */
+void palette8torgb32(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint32_t *)dst)[i] = ((uint32_t *)palette)[ src[i] ];
+}
+
+void rgb32to16(uint8_t *src, uint8_t *dst, int src_size)
+{
+ int i;
+ for(i=0; i<src_size; i+=4)
+ {
+ const int b= src[i+0];
+ const int g= src[i+1];
+ const int r= src[i+2];
+
+ ((uint16_t *)dst)[i]= (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
+ }
+}
+
+void rgb32to15(uint8_t *src, uint8_t *dst, int src_size)
+{
+ int i;
+ for(i=0; i<src_size; i+=4)
+ {
+ const int b= src[i+0];
+ const int g= src[i+1];
+ const int r= src[i+2];
+
+ ((uint16_t *)dst)[i]= (b>>3) | ((g&0xF8)<<3) | ((r&0xF8)<<7);
+ }
+}
+
+
+/**
+ * Palette is assumed to contain bgr16, see rgb32to16 to convert the palette
+ */
+void palette8torgb16(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
+}
+
+/**
+ * Pallete is assumed to contain bgr15, see rgb32to15 to convert the palette
+ */
+void palette8torgb15(uint8_t *src, uint8_t *dst, int src_size, uint8_t *palette)
+{
+ int i;
+ for(i=0; i<src_size; i++)
+ ((uint16_t *)dst)[i] = ((uint16_t *)palette)[ src[i] ];
+} \ No newline at end of file