summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_palette.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2010-06-02 19:12:01 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-06-02 19:12:01 +0300
commit80be936a56199f7affddef546514604dcefcb763 (patch)
treeead37c819dad115446817aea7b78c53cee584735 /libmpcodecs/vf_palette.c
parented1a1e28d89e9ab63e886adda18f0b8ccfec9356 (diff)
parent1cbf1ec46835300d1226068487b90476aff73ce8 (diff)
downloadmpv-80be936a56199f7affddef546514604dcefcb763.tar.bz2
mpv-80be936a56199f7affddef546514604dcefcb763.tar.xz
Merge svn changes up to r31303
Diffstat (limited to 'libmpcodecs/vf_palette.c')
-rw-r--r--libmpcodecs/vf_palette.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/libmpcodecs/vf_palette.c b/libmpcodecs/vf_palette.c
index b62773d81a..17670f3eb0 100644
--- a/libmpcodecs/vf_palette.c
+++ b/libmpcodecs/vf_palette.c
@@ -27,8 +27,9 @@
#include "img_format.h"
#include "mp_image.h"
#include "vf.h"
+#include "mpbswap.h"
-#include "libswscale/rgb2rgb.h"
+#include "libswscale/swscale.h"
//===========================================================================//
@@ -51,6 +52,23 @@ static const unsigned int rgb_list[]={
0
};
+/**
+ * Palette is assumed to contain BGR16, see rgb32to16 to convert the palette.
+ */
+static 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]];
+}
+
+static 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]]);
+}
+
static unsigned int gray_pal[256];
static unsigned int find_best(struct vf_instance *vf, unsigned int fmt){
@@ -113,11 +131,6 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
// no stride conversion needed
switch(IMGFMT_RGB_DEPTH(dmpi->imgfmt)){
case 15:
- if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8tobgr15(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
- else
- palette8torgb15(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
- break;
case 16:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
palette8tobgr16(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
@@ -126,15 +139,15 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
break;
case 24:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8topacked24(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked24(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
else
- palette8topacked24(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked24(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
break;
case 32:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8topacked32(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked32(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
else
- palette8topacked32(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked32(mpi->planes[0],dmpi->planes[0],mpi->h*mpi->w,mpi->planes[1]);
break;
}
} else {
@@ -144,11 +157,6 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
unsigned char* dst=dmpi->planes[0]+y*dmpi->stride[0];
switch(IMGFMT_RGB_DEPTH(dmpi->imgfmt)){
case 15:
- if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8tobgr15(src,dst,mpi->w,mpi->planes[1]);
- else
- palette8torgb15(src,dst,mpi->w,mpi->planes[1]);
- break;
case 16:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
palette8tobgr16(src,dst,mpi->w,mpi->planes[1]);
@@ -157,15 +165,15 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
break;
case 24:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8topacked24(src,dst,mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked24(src,dst,mpi->w,mpi->planes[1]);
else
- palette8topacked24(src,dst,mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked24(src,dst,mpi->w,mpi->planes[1]);
break;
case 32:
if (IMGFMT_IS_BGR(dmpi->imgfmt))
- palette8topacked32(src,dst,mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked32(src,dst,mpi->w,mpi->planes[1]);
else
- palette8topacked32(src,dst,mpi->w,mpi->planes[1]);
+ sws_convertPalette8ToPacked32(src,dst,mpi->w,mpi->planes[1]);
break;
}
}