1/* 2 * software RGB to RGB converter 3 * pluralize by Software PAL8 to RGB converter 4 * Software YUV to YUV converter 5 * Software YUV to RGB converter 6 * Written by Nick Kurshev. 7 * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at) 8 * 9 * This file is part of FFmpeg. 10 * 11 * FFmpeg is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU Lesser General Public 13 * License as published by the Free Software Foundation; either 14 * version 2.1 of the License, or (at your option) any later version. 15 * 16 * FFmpeg is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * Lesser General Public License for more details. 20 * 21 * You should have received a copy of the GNU Lesser General Public 22 * License along with FFmpeg; if not, write to the Free Software 23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 */ 25 26#ifndef SWSCALE_RGB2RGB_H 27#define SWSCALE_RGB2RGB_H 28 29#include <inttypes.h> 30 31/* A full collection of RGB to RGB(BGR) converters */ 32extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); 33extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); 34extern void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, long src_size); 35extern void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); 36extern void (*rgb32to16) (const uint8_t *src, uint8_t *dst, long src_size); 37extern void (*rgb32to15) (const uint8_t *src, uint8_t *dst, long src_size); 38extern void (*rgb15to16) (const uint8_t *src, uint8_t *dst, long src_size); 39extern void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); 40extern void (*rgb15to32) (const uint8_t *src, uint8_t *dst, long src_size); 41extern void (*rgb16to15) (const uint8_t *src, uint8_t *dst, long src_size); 42extern void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); 43extern void (*rgb16to32) (const uint8_t *src, uint8_t *dst, long src_size); 44extern void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, long src_size); 45extern void (*rgb24to16) (const uint8_t *src, uint8_t *dst, long src_size); 46extern void (*rgb24to15) (const uint8_t *src, uint8_t *dst, long src_size); 47extern void (*rgb32tobgr32)(const uint8_t *src, uint8_t *dst, long src_size); 48extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size); 49extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size); 50 51void rgb24to32 (const uint8_t *src, uint8_t *dst, long src_size); 52void rgb32to24 (const uint8_t *src, uint8_t *dst, long src_size); 53void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size); 54void rgb16to24 (const uint8_t *src, uint8_t *dst, long src_size); 55void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size); 56void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size); 57void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size); 58void rgb15to24 (const uint8_t *src, uint8_t *dst, long src_size); 59void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size); 60void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size); 61void bgr8torgb8 (const uint8_t *src, uint8_t *dst, long src_size); 62 63 64void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 65void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 66void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 67void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 68void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 69void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette); 70 71/** 72 * Height should be a multiple of 2 and width should be a multiple of 16. 73 * (If this is a problem for anyone then tell me, and I will fix it.) 74 * Chrominance data is only taken from every second line, others are ignored. 75 * FIXME: Write high quality version. 76 */ 77//void uyvytoyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, 78 79/** 80 * Height should be a multiple of 2 and width should be a multiple of 16. 81 * (If this is a problem for anyone then tell me, and I will fix it.) 82 */ 83extern void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, 84 long width, long height, 85 long lumStride, long chromStride, long dstStride); 86 87/** 88 * Width should be a multiple of 16. 89 */ 90extern void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, 91 long width, long height, 92 long lumStride, long chromStride, long dstStride); 93 94/** 95 * Height should be a multiple of 2 and width should be a multiple of 16. 96 * (If this is a problem for anyone then tell me, and I will fix it.) 97 */ 98extern void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, 99 long width, long height, 100 long lumStride, long chromStride, long srcStride); 101 102/** 103 * Height should be a multiple of 2 and width should be a multiple of 16. 104 * (If this is a problem for anyone then tell me, and I will fix it.) 105 */ 106extern void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, 107 long width, long height, 108 long lumStride, long chromStride, long dstStride); 109 110/** 111 * Width should be a multiple of 16. 112 */ 113extern void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, 114 long width, long height, 115 long lumStride, long chromStride, long dstStride); 116 117/** 118 * Height should be a multiple of 2 and width should be a multiple of 2. 119 * (If this is a problem for anyone then tell me, and I will fix it.) 120 * Chrominance data is only taken from every second line, others are ignored. 121 * FIXME: Write high quality version. 122 */ 123extern void (*rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, 124 long width, long height, 125 long lumStride, long chromStride, long srcStride); 126extern void (*planar2x)(const uint8_t *src, uint8_t *dst, long width, long height, 127 long srcStride, long dstStride); 128 129extern void (*interleaveBytes)(uint8_t *src1, uint8_t *src2, uint8_t *dst, 130 long width, long height, long src1Stride, 131 long src2Stride, long dstStride); 132 133extern void (*vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2, 134 uint8_t *dst1, uint8_t *dst2, 135 long width, long height, 136 long srcStride1, long srcStride2, 137 long dstStride1, long dstStride2); 138 139extern void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, 140 uint8_t *dst, 141 long width, long height, 142 long srcStride1, long srcStride2, 143 long srcStride3, long dstStride); 144 145void sws_rgb2rgb_init(int flags); 146 147#endif /* SWSCALE_RGB2RGB_H */ 148