additionallym deprecate palette8torgb16 and its bgr variant without replacement. These functions are not meant to be used by applications. Discussed at: http://comments.gmane.org/gmane.comp.video.ffmpeg.devel/109340 Originally committed as revision 31301 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscaletags/n0.8
| @@ -207,31 +207,15 @@ void sws_rgb2rgb_init(int flags) | |||||
| rgb2rgb_init_C(); | rgb2rgb_init_C(); | ||||
| } | } | ||||
| /** | |||||
| * Convert the palette to the same packet 32-bit format as the palette | |||||
| */ | |||||
| #if LIBSWSCALE_VERSION_MAJOR < 1 | |||||
| void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *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_convertPalette8ToPacked32(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) | 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_convertPalette8ToPacked24(src, dst, num_pixels, palette); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -249,6 +233,7 @@ void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const ui | |||||
| for (i=0; i<num_pixels; i++) | for (i=0; i<num_pixels; i++) | ||||
| ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]); | ((uint16_t *)dst)[i] = bswap_16(((const uint16_t *)palette)[src[i]]); | ||||
| } | } | ||||
| #endif | |||||
| void rgb32to24(const uint8_t *src, uint8_t *dst, long src_size) | void rgb32to24(const uint8_t *src, uint8_t *dst, long src_size) | ||||
| { | { | ||||
| @@ -4,7 +4,7 @@ | |||||
| * Software YUV to YUV converter | * Software YUV to YUV converter | ||||
| * Software YUV to RGB converter | * Software YUV to RGB converter | ||||
| * Written by Nick Kurshev. | * Written by Nick Kurshev. | ||||
| * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at) | |||||
| * YUV & runtime CPU stuff by Michael (michaelni@gmx.at) | |||||
| * | * | ||||
| * This file is part of FFmpeg. | * This file is part of FFmpeg. | ||||
| * | * | ||||
| @@ -28,6 +28,9 @@ | |||||
| #include <inttypes.h> | #include <inttypes.h> | ||||
| #include "libswscale/swscale.h" | |||||
| #include "libavutil/avutil.h" | |||||
| /* A full collection of RGB to RGB(BGR) converters */ | /* A full collection of RGB to RGB(BGR) converters */ | ||||
| extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); | extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); | ||||
| extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); | extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); | ||||
| @@ -66,10 +69,15 @@ void shuffle_bytes_2103(const uint8_t *src, uint8_t *dst, long src_size); | |||||
| void shuffle_bytes_3012(const uint8_t *src, uint8_t *dst, long src_size); | 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); | void shuffle_bytes_3210(const uint8_t *src, uint8_t *dst, long src_size); | ||||
| 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); | |||||
| void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| #if LIBSWSCALE_VERSION_MAJOR < 1 | |||||
| /* deprecated, use the public versions in swscale.h */ | |||||
| attribute_deprecated void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| attribute_deprecated void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| /* totally deprecated, please fix code that uses this */ | |||||
| attribute_deprecated void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| attribute_deprecated void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| #endif | |||||
| /** | /** | ||||
| * Height should be a multiple of 2 and width should be a multiple of 16. | * Height should be a multiple of 2 and width should be a multiple of 16. | ||||
| @@ -1419,12 +1419,12 @@ static int palToRgbWrapper(SwsContext *c, const uint8_t* src[], int srcStride[], | |||||
| if (usePal(srcFormat)) { | if (usePal(srcFormat)) { | ||||
| switch (dstFormat) { | 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_convertPalette8ToPacked32; break; | |||||
| case PIX_FMT_BGR32 : conv = sws_convertPalette8ToPacked32; break; | |||||
| case PIX_FMT_BGR32_1: conv = sws_convertPalette8ToPacked32; break; | |||||
| case PIX_FMT_RGB32_1: conv = sws_convertPalette8ToPacked32; break; | |||||
| case PIX_FMT_RGB24 : conv = sws_convertPalette8ToPacked24; break; | |||||
| case PIX_FMT_BGR24 : conv = sws_convertPalette8ToPacked24; break; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1957,3 +1957,26 @@ int sws_scale_ordered(SwsContext *c, const uint8_t* const src[], int srcStride[] | |||||
| return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride); | return sws_scale(c, src, srcStride, srcSliceY, srcSliceH, dst, dstStride); | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* Convert the palette to the same packed 32-bit format as the palette */ | |||||
| void sws_convertPalette8ToPacked32(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]]; | |||||
| } | |||||
| /* Palette format: ABCD -> dst format: ABC */ | |||||
| void sws_convertPalette8ToPacked24(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; | |||||
| } | |||||
| } | |||||
| @@ -30,7 +30,7 @@ | |||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
| #define LIBSWSCALE_VERSION_MAJOR 0 | #define LIBSWSCALE_VERSION_MAJOR 0 | ||||
| #define LIBSWSCALE_VERSION_MINOR 10 | |||||
| #define LIBSWSCALE_VERSION_MINOR 11 | |||||
| #define LIBSWSCALE_VERSION_MICRO 0 | #define LIBSWSCALE_VERSION_MICRO 0 | ||||
| #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ | #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ | ||||
| @@ -303,4 +303,29 @@ struct SwsContext *sws_getCachedContext(struct SwsContext *context, | |||||
| int flags, SwsFilter *srcFilter, | int flags, SwsFilter *srcFilter, | ||||
| SwsFilter *dstFilter, const double *param); | SwsFilter *dstFilter, const double *param); | ||||
| /** | |||||
| * Converts an 8bit paletted frame into a frame with a color depth of 32-bits. | |||||
| * | |||||
| * The output frame will have the same packed format as the palette. | |||||
| * | |||||
| * @param src source frame buffer | |||||
| * @param dst destination frame buffer | |||||
| * @param num_pixels number of pixels to convert | |||||
| * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src | |||||
| */ | |||||
| void sws_convertPalette8ToPacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| /** | |||||
| * Converts an 8bit paletted frame into a frame with a color depth of 24 bits. | |||||
| * | |||||
| * With the palette format "ABCD", the destination frame ends up with the format "ABC". | |||||
| * | |||||
| * @param src source frame buffer | |||||
| * @param dst destination frame buffer | |||||
| * @param num_pixels number of pixels to convert | |||||
| * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src | |||||
| */ | |||||
| void sws_convertPalette8ToPacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); | |||||
| #endif /* SWSCALE_SWSCALE_H */ | #endif /* SWSCALE_SWSCALE_H */ | ||||