annotate libswscale/yuv2rgb.c @ 29904:f529a2bb299d

Add support for Windows OpenGL rendering onto a device instead of into a window. Has little use except for experimenting - on Windows 9x it could be used to render on monitors that were not managed by Windows, but that feature was removed in newer Windows versions.
author reimar
date Sat, 21 Nov 2009 22:27:40 +0000
parents c080f1f5c07e
children 1032ff2e83f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
1 /*
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
2 * software YUV to RGB converter
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
3 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
4 * Copyright (C) 2009 Konstantin Shishkov
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
5 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
6 * 1,4,8bpp support and context / deglobalize stuff
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
7 * by Michael Niedermayer (michaelni@gmx.at)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
8 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
9 * This file is part of FFmpeg.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
10 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
11 * FFmpeg is free software; you can redistribute it and/or
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
12 * modify it under the terms of the GNU Lesser General Public
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
13 * License as published by the Free Software Foundation; either
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
14 * version 2.1 of the License, or (at your option) any later version.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
15 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
16 * FFmpeg is distributed in the hope that it will be useful,
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
19 * Lesser General Public License for more details.
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
20 *
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
21 * You should have received a copy of the GNU Lesser General Public
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
22 * License along with FFmpeg; if not, write to the Free Software
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
24 */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
25
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
26 #include <stdio.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
27 #include <stdlib.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
28 #include <inttypes.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
29 #include <assert.h>
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
30
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
31 #include "config.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
32 #include "rgb2rgb.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
33 #include "swscale.h"
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
34 #include "swscale_internal.h"
28957
e538af2c69c1 Do not assume long is same width as x86 register.
ramiro
parents: 28953
diff changeset
35 #include "libavutil/x86_cpu.h"
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
36
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
37 extern const uint8_t dither_8x8_32[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
38 extern const uint8_t dither_8x8_73[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
39 extern const uint8_t dither_8x8_220[8][8];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
40
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
41 const int32_t ff_yuv2rgb_coeffs[8][4] = {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
42 {117504, 138453, 13954, 34903}, /* no sequence_display_extension */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
43 {117504, 138453, 13954, 34903}, /* ITU-R Rec. 709 (1990) */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
44 {104597, 132201, 25675, 53279}, /* unspecified */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
45 {104597, 132201, 25675, 53279}, /* reserved */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
46 {104448, 132798, 24759, 53109}, /* FCC */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
47 {104597, 132201, 25675, 53279}, /* ITU-R Rec. 624-4 System B, G */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
48 {104597, 132201, 25675, 53279}, /* SMPTE 170M */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
49 {117579, 136230, 16907, 35559} /* SMPTE 240M (1987) */
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
50 };
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
51
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
52 #define LOADCHROMA(i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
53 U = pu[i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
54 V = pv[i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
55 r = (void *)c->table_rV[V]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
56 g = (void *)(c->table_gU[U] + c->table_gV[V]); \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
57 b = (void *)c->table_bU[U];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
58
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
59 #define PUTRGB(dst,src,i) \
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
60 Y = src[2*i]; \
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
61 dst[2*i ] = r[Y] + g[Y] + b[Y]; \
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
62 Y = src[2*i+1]; \
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
63 dst[2*i+1] = r[Y] + g[Y] + b[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
64
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
65 #define PUTRGB24(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
66 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
67 dst[6*i+0] = r[Y]; dst[6*i+1] = g[Y]; dst[6*i+2] = b[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
68 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
69 dst[6*i+3] = r[Y]; dst[6*i+4] = g[Y]; dst[6*i+5] = b[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
70
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
71 #define PUTBGR24(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
72 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
73 dst[6*i+0] = b[Y]; dst[6*i+1] = g[Y]; dst[6*i+2] = r[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
74 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
75 dst[6*i+3] = b[Y]; dst[6*i+4] = g[Y]; dst[6*i+5] = r[Y];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
76
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
77 #define PUTRGBA(dst,ysrc,asrc,i,s) \
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
78 Y = ysrc[2*i]; \
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
79 dst[2*i ] = r[Y] + g[Y] + b[Y] + (asrc[2*i ]<<s); \
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
80 Y = ysrc[2*i+1]; \
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
81 dst[2*i+1] = r[Y] + g[Y] + b[Y] + (asrc[2*i+1]<<s);
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
82
29300
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
83 #define PUTRGB48(dst,src,i) \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
84 Y = src[2*i]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
85 dst[12*i+ 0] = dst[12*i+ 1] = r[Y]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
86 dst[12*i+ 2] = dst[12*i+ 3] = g[Y]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
87 dst[12*i+ 4] = dst[12*i+ 5] = b[Y]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
88 Y = src[2*i+1]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
89 dst[12*i+ 6] = dst[12*i+ 7] = r[Y]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
90 dst[12*i+ 8] = dst[12*i+ 9] = g[Y]; \
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
91 dst[12*i+10] = dst[12*i+11] = b[Y];
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
92
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
93 #define YUV2RGBFUNC(func_name, dst_type, alpha) \
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
94 static int func_name(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, \
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29441
diff changeset
95 int srcSliceH, uint8_t* dst[], int dstStride[]) \
c080f1f5c07e Cosmetics:
ramiro
parents: 29441
diff changeset
96 {\
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
97 int y;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
98 \
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
99 if (!alpha && c->srcFormat == PIX_FMT_YUV422P) {\
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
100 srcStride[1] *= 2;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
101 srcStride[2] *= 2;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
102 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
103 for (y=0; y<srcSliceH; y+=2) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
104 dst_type *dst_1 = (dst_type*)(dst[0] + (y+srcSliceY )*dstStride[0]);\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
105 dst_type *dst_2 = (dst_type*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
106 dst_type av_unused *r, *b;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
107 dst_type *g;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
108 uint8_t *py_1 = src[0] + y*srcStride[0];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
109 uint8_t *py_2 = py_1 + srcStride[0];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
110 uint8_t *pu = src[1] + (y>>1)*srcStride[1];\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
111 uint8_t *pv = src[2] + (y>>1)*srcStride[2];\
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
112 uint8_t av_unused *pa_1, *pa_2;\
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
113 unsigned int h_size = c->dstW>>3;\
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29441
diff changeset
114 if (alpha) {\
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
115 pa_1 = src[3] + y*srcStride[3];\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
116 pa_2 = pa_1 + srcStride[3];\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
117 }\
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
118 while (h_size--) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
119 int av_unused U, V;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
120 int Y;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
121
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
122 #define ENDYUV2RGBLINE(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
123 pu += 4;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
124 pv += 4;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
125 py_1 += 8;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
126 py_2 += 8;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
127 dst_1 += dst_delta;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
128 dst_2 += dst_delta;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
129 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
130 if (c->dstW & 4) {\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
131 int av_unused Y, U, V;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
132
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
133 #define ENDYUV2RGBFUNC()\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
134 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
135 }\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
136 return srcSliceH;\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
137 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
138
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
139 #define CLOSEYUV2RGBFUNC(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
140 ENDYUV2RGBLINE(dst_delta)\
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
141 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
142
29300
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
143 YUV2RGBFUNC(yuv2rgb_c_48, uint8_t, 0)
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
144 LOADCHROMA(0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
145 PUTRGB48(dst_1,py_1,0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
146 PUTRGB48(dst_2,py_2,0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
147
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
148 LOADCHROMA(1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
149 PUTRGB48(dst_2,py_2,1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
150 PUTRGB48(dst_1,py_1,1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
151
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
152 LOADCHROMA(2);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
153 PUTRGB48(dst_1,py_1,2);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
154 PUTRGB48(dst_2,py_2,2);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
155
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
156 LOADCHROMA(3);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
157 PUTRGB48(dst_2,py_2,3);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
158 PUTRGB48(dst_1,py_1,3);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
159 ENDYUV2RGBLINE(48)
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
160 LOADCHROMA(0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
161 PUTRGB48(dst_1,py_1,0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
162 PUTRGB48(dst_2,py_2,0);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
163
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
164 LOADCHROMA(1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
165 PUTRGB48(dst_2,py_2,1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
166 PUTRGB48(dst_1,py_1,1);
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
167 ENDYUV2RGBFUNC()
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
168
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
169 YUV2RGBFUNC(yuv2rgb_c_32, uint32_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
170 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
171 PUTRGB(dst_1,py_1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
172 PUTRGB(dst_2,py_2,0);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
173
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
174 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
175 PUTRGB(dst_2,py_2,1);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
176 PUTRGB(dst_1,py_1,1);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
177
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
178 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
179 PUTRGB(dst_1,py_1,2);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
180 PUTRGB(dst_2,py_2,2);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
181
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
182 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
183 PUTRGB(dst_2,py_2,3);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
184 PUTRGB(dst_1,py_1,3);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
185 ENDYUV2RGBLINE(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
186 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
187 PUTRGB(dst_1,py_1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
188 PUTRGB(dst_2,py_2,0);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
189
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
190 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
191 PUTRGB(dst_2,py_2,1);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
192 PUTRGB(dst_1,py_1,1);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
193 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
194
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
195 YUV2RGBFUNC(yuva2rgba_c, uint32_t, 1)
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
196 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
197 PUTRGBA(dst_1,py_1,pa_1,0,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
198 PUTRGBA(dst_2,py_2,pa_2,0,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
199
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
200 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
201 PUTRGBA(dst_2,py_2,pa_1,1,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
202 PUTRGBA(dst_1,py_1,pa_2,1,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
203
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
204 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
205 PUTRGBA(dst_1,py_1,pa_1,2,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
206 PUTRGBA(dst_2,py_2,pa_2,2,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
207
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
208 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
209 PUTRGBA(dst_2,py_2,pa_1,3,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
210 PUTRGBA(dst_1,py_1,pa_2,3,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
211 pa_1 += 8;\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
212 pa_2 += 8;\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
213 ENDYUV2RGBLINE(8)
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
214 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
215 PUTRGBA(dst_1,py_1,pa_1,0,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
216 PUTRGBA(dst_2,py_2,pa_2,0,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
217
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
218 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
219 PUTRGBA(dst_2,py_2,pa_1,1,24);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
220 PUTRGBA(dst_1,py_1,pa_2,1,24);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
221 ENDYUV2RGBFUNC()
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
222
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
223 YUV2RGBFUNC(yuva2argb_c, uint32_t, 1)
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
224 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
225 PUTRGBA(dst_1,py_1,pa_1,0,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
226 PUTRGBA(dst_2,py_2,pa_2,0,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
227
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
228 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
229 PUTRGBA(dst_2,py_2,pa_2,1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
230 PUTRGBA(dst_1,py_1,pa_1,1,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
231
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
232 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
233 PUTRGBA(dst_1,py_1,pa_1,2,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
234 PUTRGBA(dst_2,py_2,pa_2,2,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
235
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
236 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
237 PUTRGBA(dst_2,py_2,pa_2,3,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
238 PUTRGBA(dst_1,py_1,pa_1,3,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
239 pa_1 += 8;\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
240 pa_2 += 8;\
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
241 ENDYUV2RGBLINE(8)
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
242 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
243 PUTRGBA(dst_1,py_1,pa_1,0,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
244 PUTRGBA(dst_2,py_2,pa_2,0,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
245
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
246 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
247 PUTRGBA(dst_2,py_2,pa_2,1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
248 PUTRGBA(dst_1,py_1,pa_1,1,0);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
249 ENDYUV2RGBFUNC()
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
250
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
251 YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
252 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
253 PUTRGB24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
254 PUTRGB24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
255
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
256 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
257 PUTRGB24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
258 PUTRGB24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
259
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
260 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
261 PUTRGB24(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
262 PUTRGB24(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
263
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
264 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
265 PUTRGB24(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
266 PUTRGB24(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
267 ENDYUV2RGBLINE(24)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
268 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
269 PUTRGB24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
270 PUTRGB24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
271
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
272 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
273 PUTRGB24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
274 PUTRGB24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
275 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
276
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
277 // only trivial mods from yuv2rgb_c_24_rgb
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
278 YUV2RGBFUNC(yuv2rgb_c_24_bgr, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
279 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
280 PUTBGR24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
281 PUTBGR24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
282
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
283 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
284 PUTBGR24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
285 PUTBGR24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
286
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
287 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
288 PUTBGR24(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
289 PUTBGR24(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
290
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
291 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
292 PUTBGR24(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
293 PUTBGR24(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
294 ENDYUV2RGBLINE(24)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
295 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
296 PUTBGR24(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
297 PUTBGR24(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
298
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
299 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
300 PUTBGR24(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
301 PUTBGR24(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
302 ENDYUV2RGBFUNC()
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
303
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
304 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
305 // r, g, b, dst_1, dst_2
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
306 YUV2RGBFUNC(yuv2rgb_c_16, uint16_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
307 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
308 PUTRGB(dst_1,py_1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
309 PUTRGB(dst_2,py_2,0);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
310
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
311 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
312 PUTRGB(dst_2,py_2,1);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
313 PUTRGB(dst_1,py_1,1);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
314
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
315 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
316 PUTRGB(dst_1,py_1,2);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
317 PUTRGB(dst_2,py_2,2);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
318
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
319 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
320 PUTRGB(dst_2,py_2,3);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
321 PUTRGB(dst_1,py_1,3);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
322 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
323
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
324 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
325 // r, g, b, dst_1, dst_2
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
326 YUV2RGBFUNC(yuv2rgb_c_8, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
327 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
328 PUTRGB(dst_1,py_1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
329 PUTRGB(dst_2,py_2,0);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
330
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
331 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
332 PUTRGB(dst_2,py_2,1);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
333 PUTRGB(dst_1,py_1,1);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
334
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
335 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
336 PUTRGB(dst_1,py_1,2);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
337 PUTRGB(dst_2,py_2,2);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
338
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
339 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
340 PUTRGB(dst_2,py_2,3);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
341 PUTRGB(dst_1,py_1,3);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
342 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
343
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
344 // r, g, b, dst_1, dst_2
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
345 YUV2RGBFUNC(yuv2rgb_c_8_ordered_dither, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
346 const uint8_t *d32 = dither_8x8_32[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
347 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
348 #define PUTRGB8(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
349 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
350 dst[2*i] = r[Y+d32[0+o]] + g[Y+d32[0+o]] + b[Y+d64[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
351 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
352 dst[2*i+1] = r[Y+d32[1+o]] + g[Y+d32[1+o]] + b[Y+d64[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
353
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
354 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
355 PUTRGB8(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
356 PUTRGB8(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
357
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
358 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
359 PUTRGB8(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
360 PUTRGB8(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
361
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
362 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
363 PUTRGB8(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
364 PUTRGB8(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
365
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
366 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
367 PUTRGB8(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
368 PUTRGB8(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
369 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
370
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
371
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
372 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
373 // r, g, b, dst_1, dst_2
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
374 YUV2RGBFUNC(yuv2rgb_c_4, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
375 int acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
376 #define PUTRGB4(dst,src,i) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
377 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
378 acc = r[Y] + g[Y] + b[Y]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
379 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
380 acc |= (r[Y] + g[Y] + b[Y])<<4; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
381 dst[i] = acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
382
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
383 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
384 PUTRGB4(dst_1,py_1,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
385 PUTRGB4(dst_2,py_2,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
386
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
387 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
388 PUTRGB4(dst_2,py_2,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
389 PUTRGB4(dst_1,py_1,1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
390
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
391 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
392 PUTRGB4(dst_1,py_1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
393 PUTRGB4(dst_2,py_2,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
394
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
395 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
396 PUTRGB4(dst_2,py_2,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
397 PUTRGB4(dst_1,py_1,3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
398 CLOSEYUV2RGBFUNC(4)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
399
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
400 YUV2RGBFUNC(yuv2rgb_c_4_ordered_dither, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
401 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
402 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
403 int acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
404
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
405 #define PUTRGB4D(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
406 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
407 acc = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
408 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
409 acc |= (r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]])<<4; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
410 dst[i]= acc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
411
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
412 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
413 PUTRGB4D(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
414 PUTRGB4D(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
415
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
416 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
417 PUTRGB4D(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
418 PUTRGB4D(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
419
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
420 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
421 PUTRGB4D(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
422 PUTRGB4D(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
423
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
424 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
425 PUTRGB4D(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
426 PUTRGB4D(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
427 CLOSEYUV2RGBFUNC(4)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
428
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
429 // This is exactly the same code as yuv2rgb_c_32 except for the types of
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
430 // r, g, b, dst_1, dst_2
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
431 YUV2RGBFUNC(yuv2rgb_c_4b, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
432 LOADCHROMA(0);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
433 PUTRGB(dst_1,py_1,0);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
434 PUTRGB(dst_2,py_2,0);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
435
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
436 LOADCHROMA(1);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
437 PUTRGB(dst_2,py_2,1);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
438 PUTRGB(dst_1,py_1,1);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
439
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
440 LOADCHROMA(2);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
441 PUTRGB(dst_1,py_1,2);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
442 PUTRGB(dst_2,py_2,2);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
443
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
444 LOADCHROMA(3);
29441
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
445 PUTRGB(dst_2,py_2,3);
3b88f0acdc0b Remove 'offset' argument from PUTRGB* macros since it's unneeded and caused
kostya
parents: 29370
diff changeset
446 PUTRGB(dst_1,py_1,3);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
447 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
448
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
449 YUV2RGBFUNC(yuv2rgb_c_4b_ordered_dither, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
450 const uint8_t *d64 = dither_8x8_73[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
451 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
452
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
453 #define PUTRGB4DB(dst,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
454 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
455 dst[2*i] = r[Y+d128[0+o]] + g[Y+d64[0+o]] + b[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
456 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
457 dst[2*i+1] = r[Y+d128[1+o]] + g[Y+d64[1+o]] + b[Y+d128[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
458
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
459 LOADCHROMA(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
460 PUTRGB4DB(dst_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
461 PUTRGB4DB(dst_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
462
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
463 LOADCHROMA(1);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
464 PUTRGB4DB(dst_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
465 PUTRGB4DB(dst_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
466
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
467 LOADCHROMA(2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
468 PUTRGB4DB(dst_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
469 PUTRGB4DB(dst_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
470
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
471 LOADCHROMA(3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
472 PUTRGB4DB(dst_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
473 PUTRGB4DB(dst_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
474 CLOSEYUV2RGBFUNC(8)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
475
28943
cf087cb82252 Add an alpha parameter to the YUV2RGBFUNC macro to ease the upcoming yuva2rgb patch
sdrik
parents: 28738
diff changeset
476 YUV2RGBFUNC(yuv2rgb_c_1_ordered_dither, uint8_t, 0)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
477 const uint8_t *d128 = dither_8x8_220[y&7];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
478 char out_1 = 0, out_2 = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
479 g= c->table_gU[128] + c->table_gV[128];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
480
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
481 #define PUTRGB1(out,src,i,o) \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
482 Y = src[2*i]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
483 out+= out + g[Y+d128[0+o]]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
484 Y = src[2*i+1]; \
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
485 out+= out + g[Y+d128[1+o]];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
486
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
487 PUTRGB1(out_1,py_1,0,0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
488 PUTRGB1(out_2,py_2,0,0+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
489
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
490 PUTRGB1(out_2,py_2,1,2+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
491 PUTRGB1(out_1,py_1,1,2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
492
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
493 PUTRGB1(out_1,py_1,2,4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
494 PUTRGB1(out_2,py_2,2,4+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
495
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
496 PUTRGB1(out_2,py_2,3,6+8);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
497 PUTRGB1(out_1,py_1,3,6);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
498
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
499 dst_1[0]= out_1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
500 dst_2[0]= out_2;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
501 CLOSEYUV2RGBFUNC(1)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
502
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
503 SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
504 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
505 SwsFunc t = NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
506 #if (HAVE_MMX2 || HAVE_MMX) && CONFIG_GPL
29028
f8db50af4035 Move yuv2rgb code to subdirs.
ramiro
parents: 29011
diff changeset
507 t = ff_yuv2rgb_init_mmx(c);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
508 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
509 #if HAVE_VIS
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
510 t = ff_yuv2rgb_init_vis(c);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
511 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
512 #if CONFIG_MLIB
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
513 t = ff_yuv2rgb_init_mlib(c);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
514 #endif
29370
059ff1f4e280 The AltiVec code in libswscale no longer is under GPL.
diego
parents: 29300
diff changeset
515 #if HAVE_ALTIVEC
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
516 if (c->flags & SWS_CPU_CAPS_ALTIVEC)
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
517 t = ff_yuv2rgb_init_altivec(c);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
518 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
519
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
520 #if ARCH_BFIN
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
521 if (c->flags & SWS_CPU_CAPS_BFIN)
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
522 t = ff_yuv2rgb_get_func_ptr_bfin(c);
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
523 #endif
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
524
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
525 if (t)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
526 return t;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
527
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
528 av_log(c, AV_LOG_WARNING, "No accelerated colorspace conversion found.\n");
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
529
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
530 switch (c->dstFormat) {
29300
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
531 case PIX_FMT_RGB48BE:
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
532 case PIX_FMT_RGB48LE: return yuv2rgb_c_48;
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
533 case PIX_FMT_ARGB:
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
534 case PIX_FMT_ABGR: if (CONFIG_SWSCALE_ALPHA && c->srcFormat == PIX_FMT_YUVA420P) return yuva2argb_c;
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
535 case PIX_FMT_RGBA:
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
536 case PIX_FMT_BGRA: return (CONFIG_SWSCALE_ALPHA && c->srcFormat == PIX_FMT_YUVA420P) ? yuva2rgba_c : yuv2rgb_c_32;
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
537 case PIX_FMT_RGB24: return yuv2rgb_c_24_rgb;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
538 case PIX_FMT_BGR24: return yuv2rgb_c_24_bgr;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
539 case PIX_FMT_RGB565:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
540 case PIX_FMT_BGR565:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
541 case PIX_FMT_RGB555:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
542 case PIX_FMT_BGR555: return yuv2rgb_c_16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
543 case PIX_FMT_RGB8:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
544 case PIX_FMT_BGR8: return yuv2rgb_c_8_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
545 case PIX_FMT_RGB4:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
546 case PIX_FMT_BGR4: return yuv2rgb_c_4_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
547 case PIX_FMT_RGB4_BYTE:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
548 case PIX_FMT_BGR4_BYTE: return yuv2rgb_c_4b_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
549 case PIX_FMT_MONOBLACK: return yuv2rgb_c_1_ordered_dither;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
550 default:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
551 assert(0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
552 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
553 return NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
554 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
555
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
556 static void fill_table(uint8_t* table[256], const int elemsize, const int inc, uint8_t *y_table)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
557 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
558 int i;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
559 int64_t cb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
560
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
561 y_table -= elemsize * (inc >> 9);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
562
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
563 for (i = 0; i < 256; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
564 table[i] = y_table + elemsize * (cb >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
565 cb += inc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
566 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
567 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
568
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
569 static void fill_gv_table(int table[256], const int elemsize, const int inc)
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
570 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
571 int i;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
572 int64_t cb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
573 int off = -(inc >> 9);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
574
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
575 for (i = 0; i < 256; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
576 table[i] = elemsize * (off + (cb >> 16));
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
577 cb += inc;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
578 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
579 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
580
28953
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
581 av_cold int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], int fullRange,
1e56ea9937ce Consistently use ff_ prefixes for internal symbols.
diego
parents: 28947
diff changeset
582 int brightness, int contrast, int saturation)
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
583 {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
584 const int isRgb = c->dstFormat==PIX_FMT_RGB32
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
585 || c->dstFormat==PIX_FMT_RGB32_1
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
586 || c->dstFormat==PIX_FMT_BGR24
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
587 || c->dstFormat==PIX_FMT_RGB565
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
588 || c->dstFormat==PIX_FMT_RGB555
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
589 || c->dstFormat==PIX_FMT_RGB8
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
590 || c->dstFormat==PIX_FMT_RGB4
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
591 || c->dstFormat==PIX_FMT_RGB4_BYTE
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
592 || c->dstFormat==PIX_FMT_MONOBLACK;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
593 const int bpp = fmt_depth(c->dstFormat);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
594 uint8_t *y_table;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
595 uint16_t *y_table16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
596 uint32_t *y_table32;
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
597 int i, base, rbase, gbase, bbase, abase, needAlpha;
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
598 const int yoffs = fullRange ? 384 : 326;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
599
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
600 int64_t crv = inv_table[0];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
601 int64_t cbu = inv_table[1];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
602 int64_t cgu = -inv_table[2];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
603 int64_t cgv = -inv_table[3];
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
604 int64_t cy = 1<<16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
605 int64_t oy = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
606
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
607 int64_t yb = 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
608
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
609 if (!fullRange) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
610 cy = (cy*255) / 219;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
611 oy = 16<<16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
612 } else {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
613 crv = (crv*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
614 cbu = (cbu*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
615 cgu = (cgu*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
616 cgv = (cgv*224) / 255;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
617 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
618
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
619 cy = (cy *contrast ) >> 16;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
620 crv = (crv*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
621 cbu = (cbu*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
622 cgu = (cgu*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
623 cgv = (cgv*contrast * saturation) >> 32;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
624 oy -= 256*brightness;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
625
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
626 //scale coefficients by cy
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
627 crv = ((crv << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
628 cbu = ((cbu << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
629 cgu = ((cgu << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
630 cgv = ((cgv << 16) + 0x8000) / cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
631
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
632 av_free(c->yuvTable);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
633
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
634 switch (bpp) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
635 case 1:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
636 c->yuvTable = av_malloc(1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
637 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
638 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
639 for (i = 0; i < 1024-110; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
640 y_table[i+110] = av_clip_uint8((yb + 0x8000) >> 16) >> 7;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
641 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
642 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
643 fill_table(c->table_gU, 1, cgu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
644 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
645 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
646 case 4:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
647 case 4|128:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
648 rbase = isRgb ? 3 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
649 gbase = 1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
650 bbase = isRgb ? 0 : 3;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
651 c->yuvTable = av_malloc(1024*3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
652 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
653 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
654 for (i = 0; i < 1024-110; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
655 int yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
656 y_table[i+110 ] = (yval >> 7) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
657 y_table[i+ 37+1024] = ((yval + 43) / 85) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
658 y_table[i+110+2048] = (yval >> 7) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
659 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
660 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
661 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
662 fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
663 fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
664 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
665 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
666 case 8:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
667 rbase = isRgb ? 5 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
668 gbase = isRgb ? 2 : 3;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
669 bbase = isRgb ? 0 : 6;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
670 c->yuvTable = av_malloc(1024*3);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
671 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
672 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
673 for (i = 0; i < 1024-38; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
674 int yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
675 y_table[i+16 ] = ((yval + 18) / 36) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
676 y_table[i+16+1024] = ((yval + 18) / 36) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
677 y_table[i+37+2048] = ((yval + 43) / 85) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
678 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
679 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
680 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
681 fill_table(c->table_gU, 1, cgu, y_table + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
682 fill_table(c->table_bU, 1, cbu, y_table + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
683 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
684 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
685 case 15:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
686 case 16:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
687 rbase = isRgb ? bpp - 5 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
688 gbase = 5;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
689 bbase = isRgb ? 0 : (bpp - 5);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
690 c->yuvTable = av_malloc(1024*3*2);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
691 y_table16 = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
692 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
693 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
694 uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
695 y_table16[i ] = (yval >> 3) << rbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
696 y_table16[i+1024] = (yval >> (18 - bpp)) << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
697 y_table16[i+2048] = (yval >> 3) << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
698 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
699 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
700 fill_table(c->table_rV, 2, crv, y_table16 + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
701 fill_table(c->table_gU, 2, cgu, y_table16 + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
702 fill_table(c->table_bU, 2, cbu, y_table16 + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
703 fill_gv_table(c->table_gV, 2, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
704 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
705 case 24:
29300
321437b5bde2 YUV into RGB48 BE/LE conversion support
kostya
parents: 29198
diff changeset
706 case 48:
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
707 c->yuvTable = av_malloc(1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
708 y_table = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
709 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
710 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
711 y_table[i] = av_clip_uint8((yb + 0x8000) >> 16);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
712 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
713 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
714 fill_table(c->table_rV, 1, crv, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
715 fill_table(c->table_gU, 1, cgu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
716 fill_table(c->table_bU, 1, cbu, y_table + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
717 fill_gv_table(c->table_gV, 1, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
718 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
719 case 32:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
720 base = (c->dstFormat == PIX_FMT_RGB32_1 || c->dstFormat == PIX_FMT_BGR32_1) ? 8 : 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
721 rbase = base + (isRgb ? 16 : 0);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
722 gbase = base + 8;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
723 bbase = base + (isRgb ? 0 : 16);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
724 needAlpha = CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat);
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
725 if (!needAlpha)
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
726 abase = (base + 24) & 31;
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
727 c->yuvTable = av_malloc(1024*3*4);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
728 y_table32 = c->yuvTable;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
729 yb = -(384<<16) - oy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
730 for (i = 0; i < 1024; i++) {
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
731 uint8_t yval = av_clip_uint8((yb + 0x8000) >> 16);
28975
bab0430f2e59 Add YUVA420P -> RGBA/BGRA/ARGB/ABGR unscaled converters
sdrik
parents: 28957
diff changeset
732 y_table32[i ] = (yval << rbase) + (needAlpha ? 0 : (255 << abase));
28688
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
733 y_table32[i+1024] = yval << gbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
734 y_table32[i+2048] = yval << bbase;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
735 yb += cy;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
736 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
737 fill_table(c->table_rV, 4, crv, y_table32 + yoffs);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
738 fill_table(c->table_gU, 4, cgu, y_table32 + yoffs + 1024);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
739 fill_table(c->table_bU, 4, cbu, y_table32 + yoffs + 2048);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
740 fill_gv_table(c->table_gV, 4, cgv);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
741 break;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
742 default:
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
743 c->yuvTable = NULL;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
744 av_log(c, AV_LOG_ERROR, "%ibpp not supported by yuv2rgb\n", bpp);
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
745 return -1;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
746 }
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
747 return 0;
0386e8c28782 Rename yuv2rgb2.c --> yuv2rgb.c.
diego
parents:
diff changeset
748 }