]> git.sesse.net Git - ffmpeg/commitdiff
rgb2rgb: rgb12to15()
authorPaul B Mahol <onemda@gmail.com>
Thu, 12 Jan 2012 20:28:47 +0000 (20:28 +0000)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 13 Jan 2012 00:43:17 +0000 (16:43 -0800)
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
libswscale/rgb2rgb.c
libswscale/rgb2rgb.h
libswscale/swscale_unscaled.c

index 9fbb6cfd60890f7bbf9a23816d71a9af819647e9..47b06f53fcdb2c02dc6f4feaedfb091e06265f1d 100644 (file)
@@ -183,6 +183,25 @@ void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size)
     }
 }
 
+void rgb12to15(const uint8_t *src, uint8_t *dst, int src_size)
+{
+    const uint16_t *end;
+    uint16_t *d = (uint16_t *)dst;
+    const uint16_t *s = (const uint16_t *)src;
+    uint16_t rgb, r, g, b;
+    end = s + src_size / 2;
+    while (s < end) {
+        rgb = *s++;
+        r = rgb & 0xF00;
+        g = rgb & 0x0F0;
+        b = rgb & 0x00F;
+        r = (r << 3) | ((r & 0x800) >> 1);
+        g = (g << 2) | ((g & 0x080) >> 2);
+        b = (b << 1) | ( b          >> 3);
+        *d++ = r | g | b;
+    }
+}
+
 void rgb16to24(const uint8_t *src, uint8_t *dst, int src_size)
 {
     const uint16_t *end;
index bfb85d722f7440849cb079eb688967bb00c24281..42f468fe2137b5c909492da8723eff2f3f11d9be 100644 (file)
@@ -63,6 +63,7 @@ void    rgb15to24(const uint8_t *src, uint8_t *dst, int src_size);
 void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
 void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
 void rgb12tobgr12(const uint8_t *src, uint8_t *dst, int src_size);
+void    rgb12to15(const uint8_t *src, uint8_t *dst, int src_size);
 void   bgr8torgb8(const uint8_t *src, uint8_t *dst, int src_size);
 
 void shuffle_bytes_0321(const uint8_t *src, uint8_t *dst, int src_size);
index e497fef84f2de3faa2a00017d3e055636cd5d01c..5fe2b1425696f3e5b0747a1ddbe0a7a32fa07271 100644 (file)
@@ -389,6 +389,7 @@ static rgbConvFn findRgbConvFn(SwsContext *c)
     if ((isBGRinInt(srcFormat) && isBGRinInt(dstFormat)) ||
         (isRGBinInt(srcFormat) && isRGBinInt(dstFormat))) {
         switch (srcId | (dstId << 16)) {
+        case 0x000F000C: conv = rgb12to15; break;
         case 0x000F0010: conv = rgb16to15; break;
         case 0x000F0018: conv = rgb24to15; break;
         case 0x000F0020: conv = rgb32to15; break;