Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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.  *  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. #include "libavutil/avutil.h"
  32. #include "swscale.h"
  33.  
  34. /* A full collection of RGB to RGB(BGR) converters */
  35. extern void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, int src_size);
  36. extern void (*rgb24tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
  37. extern void (*rgb24tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
  38. extern void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
  39. extern void    (*rgb32to16)(const uint8_t *src, uint8_t *dst, int src_size);
  40. extern void    (*rgb32to15)(const uint8_t *src, uint8_t *dst, int src_size);
  41. extern void    (*rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size);
  42. extern void (*rgb15tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
  43. extern void    (*rgb15to32)(const uint8_t *src, uint8_t *dst, int src_size);
  44. extern void    (*rgb16to15)(const uint8_t *src, uint8_t *dst, int src_size);
  45. extern void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
  46. extern void    (*rgb16to32)(const uint8_t *src, uint8_t *dst, int src_size);
  47. extern void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, int src_size);
  48. extern void    (*rgb24to16)(const uint8_t *src, uint8_t *dst, int src_size);
  49. extern void    (*rgb24to15)(const uint8_t *src, uint8_t *dst, int src_size);
  50. extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, int src_size);
  51. extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, int src_size);
  52.  
  53. extern void (*shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size);
  54.  
  55. void rgb64tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size);
  56. void   rgb64tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size);
  57. void rgb48tobgr48_nobswap(const uint8_t *src, uint8_t *dst, int src_size);
  58. void   rgb48tobgr48_bswap(const uint8_t *src, uint8_t *dst, int src_size);
  59. void    rgb64to48_nobswap(const uint8_t *src, uint8_t *dst, int src_size);
  60. void      rgb64to48_bswap(const uint8_t *src, uint8_t *dst, int src_size);
  61. void    rgb24to32(const uint8_t *src, uint8_t *dst, int src_size);
  62. void    rgb32to24(const uint8_t *src, uint8_t *dst, int src_size);
  63. void rgb16tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
  64. void    rgb16to24(const uint8_t *src, uint8_t *dst, int src_size);
  65. void rgb16tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
  66. void rgb16tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
  67. void rgb15tobgr32(const uint8_t *src, uint8_t *dst, int src_size);
  68. void    rgb15to24(const uint8_t *src, uint8_t *dst, int src_size);
  69. void rgb15tobgr16(const uint8_t *src, uint8_t *dst, int src_size);
  70. void rgb15tobgr15(const uint8_t *src, uint8_t *dst, int src_size);
  71. void rgb12tobgr12(const uint8_t *src, uint8_t *dst, int src_size);
  72. void    rgb12to15(const uint8_t *src, uint8_t *dst, int src_size);
  73.  
  74. void shuffle_bytes_0321(const uint8_t *src, uint8_t *dst, int src_size);
  75. void shuffle_bytes_1230(const uint8_t *src, uint8_t *dst, int src_size);
  76. void shuffle_bytes_3012(const uint8_t *src, uint8_t *dst, int src_size);
  77. void shuffle_bytes_3210(const uint8_t *src, uint8_t *dst, int src_size);
  78.  
  79. void ff_rgb24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst,
  80.                       uint8_t *vdst, int width, int height, int lumStride,
  81.                       int chromStride, int srcStride, int32_t *rgb2yuv);
  82.  
  83. /**
  84.  * Height should be a multiple of 2 and width should be a multiple of 16.
  85.  * (If this is a problem for anyone then tell me, and I will fix it.)
  86.  */
  87. extern void (*yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
  88.                           int width, int height,
  89.                           int lumStride, int chromStride, int dstStride);
  90.  
  91. /**
  92.  * Width should be a multiple of 16.
  93.  */
  94. extern void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
  95.                              int width, int height,
  96.                              int lumStride, int chromStride, int dstStride);
  97.  
  98. /**
  99.  * Height should be a multiple of 2 and width should be a multiple of 16.
  100.  * (If this is a problem for anyone then tell me, and I will fix it.)
  101.  */
  102. extern void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
  103.                           int width, int height,
  104.                           int lumStride, int chromStride, int srcStride);
  105.  
  106. /**
  107.  * Height should be a multiple of 2 and width should be a multiple of 16.
  108.  * (If this is a problem for anyone then tell me, and I will fix it.)
  109.  */
  110. extern void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
  111.                           int width, int height,
  112.                           int lumStride, int chromStride, int dstStride);
  113.  
  114. /**
  115.  * Width should be a multiple of 16.
  116.  */
  117. extern void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
  118.                              int width, int height,
  119.                              int lumStride, int chromStride, int dstStride);
  120.  
  121. /**
  122.  * Height should be a multiple of 2 and width should be a multiple of 2.
  123.  * (If this is a problem for anyone then tell me, and I will fix it.)
  124.  * Chrominance data is only taken from every second line, others are ignored.
  125.  * FIXME: Write high quality version.
  126.  */
  127. extern void (*ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
  128.                               int width, int height,
  129.                               int lumStride, int chromStride, int srcStride,
  130.                               int32_t *rgb2yuv);
  131. extern void (*planar2x)(const uint8_t *src, uint8_t *dst, int width, int height,
  132.                         int srcStride, int dstStride);
  133.  
  134. extern void (*interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst,
  135.                                int width, int height, int src1Stride,
  136.                                int src2Stride, int dstStride);
  137.  
  138. extern void (*vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2,
  139.                            uint8_t *dst1, uint8_t *dst2,
  140.                            int width, int height,
  141.                            int srcStride1, int srcStride2,
  142.                            int dstStride1, int dstStride2);
  143.  
  144. extern void (*yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3,
  145.                             uint8_t *dst,
  146.                             int width, int height,
  147.                             int srcStride1, int srcStride2,
  148.                             int srcStride3, int dstStride);
  149.  
  150. extern void (*uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
  151.                             int width, int height,
  152.                             int lumStride, int chromStride, int srcStride);
  153. extern void (*uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
  154.                             int width, int height,
  155.                             int lumStride, int chromStride, int srcStride);
  156. extern void (*yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
  157.                             int width, int height,
  158.                             int lumStride, int chromStride, int srcStride);
  159. extern void (*yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
  160.                             int width, int height,
  161.                             int lumStride, int chromStride, int srcStride);
  162.  
  163. void sws_rgb2rgb_init(void);
  164.  
  165. void rgb2rgb_init_x86(void);
  166.  
  167. #endif /* SWSCALE_RGB2RGB_H */
  168.