[FFmpeg-devel] make swscale's palette functions public
Reinhard Tartler
siretart
Fri May 14 09:16:28 CEST 2010
On Fri, May 14, 2010 at 01:08:36 (CEST), Michael Niedermayer wrote:
>> So, what do you think about this change?
>
> its probably a good idea but the functions need to be documented in
> teh header
In this case I propose the following patch for swscale:
Index: swscale.c
===================================================================
--- swscale.c (revision 31171)
+++ swscale.c (working copy)
@@ -1424,12 +1424,12 @@
if (usePal(srcFormat)) {
switch (dstFormat) {
- case PIX_FMT_RGB32 : conv = palette8topacked32; break;
- case PIX_FMT_BGR32 : conv = palette8topacked32; break;
- case PIX_FMT_BGR32_1: conv = palette8topacked32; break;
- case PIX_FMT_RGB32_1: conv = palette8topacked32; break;
- case PIX_FMT_RGB24 : conv = palette8topacked24; break;
- case PIX_FMT_BGR24 : conv = palette8topacked24; break;
+ case PIX_FMT_RGB32 : conv = sws_palette8topacked32; break;
+ case PIX_FMT_BGR32 : conv = sws_palette8topacked32; break;
+ case PIX_FMT_BGR32_1: conv = sws_palette8topacked32; break;
+ case PIX_FMT_RGB32_1: conv = sws_palette8topacked32; break;
+ case PIX_FMT_RGB24 : conv = sws_palette8topacked24; break;
+ case PIX_FMT_BGR24 : conv = sws_palette8topacked24; break;
}
}
@@ -1962,3 +1962,51 @@
return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride);
}
#endif
+
+void sws_palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+
+ for (i=0; i<num_pixels; i++)
+ ((uint32_t *) dst)[i] = ((const uint32_t *) palette)[src[i]];
+}
+
+void sws_palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+
+ for (i=0; i<num_pixels; i++) {
+ //FIXME slow?
+ dst[0]= palette[src[i]*4+0];
+ dst[1]= palette[src[i]*4+1];
+ dst[2]= palette[src[i]*4+2];
+ dst+= 3;
+ }
+}
+
+void sws_palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+ for (i=0; i<num_pixels; i++)
+ ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];
+}
+void sws_palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+ for (i=0; i<num_pixels; i++)
+ ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);
+}
+
+void sws_palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+ for (i=0; i<num_pixels; i++)
+ ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];
+}
+
+void sws_palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
+{
+ long i;
+ for (i=0; i<num_pixels; i++)
+ ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);
+}
Index: swscale.h
===================================================================
--- swscale.h (revision 31171)
+++ swscale.h (working copy)
@@ -302,4 +302,34 @@
int flags, SwsFilter *srcFilter,
SwsFilter *dstFilter, const double *param);
+/**
+ * Convert the palette to the same packet 32-bit format as the palette
+ */
+void sws_palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
+/**
+ * Palette format: ABCD -> dst format: ABC
+ */
+void sws_palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
+/**
+ * Palette is assumed to contain BGR16
+ */
+void sws_palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
+/**
+ * Palette is assumed to contain BGR16
+ */
+void sws_palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
+/**
+ * Palette is assumed to contain BGR15
+ */
+void sws_palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
+/**
+ * Palette is assumed to contain BGR15
+ */
+void sws_palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+
#endif /* SWSCALE_SWSCALE_H */
Index: rgb2rgb.c
===================================================================
--- rgb2rgb.c (revision 31171)
+++ rgb2rgb.c (working copy)
@@ -207,63 +207,34 @@
rgb2rgb_init_C();
}
-/**
- * Convert the palette to the same packet 32-bit format as the palette
- */
void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
-
- for (i=0; i<num_pixels; i++)
- ((uint32_t *) dst)[i] = ((const uint32_t *) palette)[src[i]];
+ sws_palette8topacked32(src, dst, num_pixels, palette);
}
-/**
- * Palette format: ABCD -> dst format: ABC
- */
void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
-
- for (i=0; i<num_pixels; i++) {
- //FIXME slow?
- dst[0]= palette[src[i]*4+0];
- dst[1]= palette[src[i]*4+1];
- dst[2]= palette[src[i]*4+2];
- dst+= 3;
- }
+ sws_palette8topacked24(src, dst, num_pixels, palette);
}
-/**
- * Palette is assumed to contain BGR16, see rgb32to16 to convert the palette.
- */
void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
- for (i=0; i<num_pixels; i++)
- ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];
+ sws_palette8torgb16(src, dst, num_pixels, palette);
}
+
void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
- for (i=0; i<num_pixels; i++)
- ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);
+ sws_palette8tobgr16(src, dst, num_pixels, palette);
}
-/**
- * Palette is assumed to contain BGR15, see rgb32to15 to convert the palette.
- */
void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
- for (i=0; i<num_pixels; i++)
- ((uint16_t *)dst)[i] = ((const uint16_t *)palette)[src[i]];
+ sws_palette8torgb15(src, dst, num_pixels, palette);
}
+
void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette)
{
- long i;
- for (i=0; i<num_pixels; i++)
- ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]);
+ sws_palette8tobgr15(src, dst, num_pixels, palette);
}
void rgb32to24(const uint8_t *src, uint8_t *dst, long src_size)
Index: rgb2rgb.h
===================================================================
--- rgb2rgb.h (revision 31171)
+++ rgb2rgb.h (working copy)
@@ -4,7 +4,7 @@
* Software YUV to YUV converter
* Software YUV to RGB converter
* Written by Nick Kurshev.
- * palette & YUV & runtime CPU stuff by Michael (michaelni at gmx.at)
+ * YUV & runtime CPU stuff by Michael (michaelni at gmx.at)
*
* This file is part of FFmpeg.
*
@@ -66,6 +66,7 @@
void shuffle_bytes_3012(const uint8_t *src, uint8_t *dst, long src_size);
void shuffle_bytes_3210(const uint8_t *src, uint8_t *dst, long src_size);
+/* deprecated, use the public versions in swscale.h */
void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
--
Gruesse/greetings,
Reinhard Tartler, KeyID 945348A4
More information about the ffmpeg-devel
mailing list