annotate imgconvert.c @ 1352:e8ff4783f188 libavcodec

1) remove TBL support in PPC performance. It's much more useful to use the PMCs, and with Apple's CHUD it's fairly easy too. No reason to keep useless code around 2) make the PPC perf stuff a configure option 3) make put_pixels16_altivec a bit faster by unrolling the loop by 4 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
author michaelni
date Wed, 09 Jul 2003 20:18:13 +0000
parents 8988af3ae1e8
children cfc80b3a4ada
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
1 /*
986e461dc072 Initial revision
glantau
parents:
diff changeset
2 * Misc image convertion routines
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
3 * Copyright (c) 2001, 2002, 2003 Fabrice Bellard.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
4 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
5 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
7 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
8 * version 2 of the License, or (at your option) any later version.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
10 * This library is distributed in the hope that it will be useful,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
13 * Lesser General Public License for more details.
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
14 *
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
16 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
18 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
19
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
20 /**
1108
bfc18110d4b6 typos & cosmetics
michaelni
parents: 1106
diff changeset
21 * @file imgconvert.c
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
22 * Misc image convertion routines.
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
23 */
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
24
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
25 /* TODO:
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
26 * - write 'ffimg' program to test all the image related stuff
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
27 * - move all api to slice based system
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
28 * - integrate deinterlacing, postprocessing and scaling in the conversion process
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
29 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1073
diff changeset
30
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 #include "avcodec.h"
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
32 #include "dsputil.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
33
17
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 0
diff changeset
34 #ifdef USE_FASTMEMCPY
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 0
diff changeset
35 #include "fastmemcpy.h"
b69fe46fd708 Adding fastmemcpy stuff to speedup mplayer project
nickols_k
parents: 0
diff changeset
36 #endif
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
37
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
38 #ifdef HAVE_MMX
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
39 #include "i386/mmx.h"
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
40 #endif
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
41
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
42 #define xglue(x, y) x ## y
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
43 #define glue(x, y) xglue(x, y)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
44
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
45 #define FF_COLOR_RGB 0 /* RGB color space */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
46 #define FF_COLOR_GRAY 1 /* gray color space */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
47 #define FF_COLOR_YUV 2 /* YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
48 #define FF_COLOR_YUV_JPEG 3 /* YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
49
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
50 #define FF_PIXEL_PLANAR 0 /* each channel has one component in AVPicture */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
51 #define FF_PIXEL_PACKED 1 /* only one components containing all the channels */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
52 #define FF_PIXEL_PALETTE 2 /* one components containing indexes for a palette */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
53
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
54 typedef struct PixFmtInfo {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
55 const char *name;
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
56 uint8_t nb_channels; /* number of channels (including alpha) */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
57 uint8_t color_type; /* color type (see FF_COLOR_xxx constants) */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
58 uint8_t pixel_type; /* pixel storage type (see FF_PIXEL_xxx constants) */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
59 uint8_t is_alpha : 1; /* true if alpha can be specified */
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
60 uint8_t x_chroma_shift; /* X chroma subsampling factor is 2 ^ shift */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
61 uint8_t y_chroma_shift; /* Y chroma subsampling factor is 2 ^ shift */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
62 uint8_t depth; /* bit depth of the color components */
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
63 } PixFmtInfo;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
64
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
65 /* this table gives more information about formats */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
66 static PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
67 /* YUV formats */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
68 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
69 .name = "yuv420p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
70 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
71 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
72 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
73 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
74 .x_chroma_shift = 1, .y_chroma_shift = 1,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
75 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
76 [PIX_FMT_YUV422P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
77 .name = "yuv422p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
78 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
79 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
80 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
81 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
82 .x_chroma_shift = 1, .y_chroma_shift = 0,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
83 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
84 [PIX_FMT_YUV444P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
85 .name = "yuv444p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
86 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
87 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
88 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
89 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
90 .x_chroma_shift = 0, .y_chroma_shift = 0,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
91 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
92 [PIX_FMT_YUV422] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
93 .name = "yuv422",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
94 .nb_channels = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
95 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
96 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
97 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
98 .x_chroma_shift = 1, .y_chroma_shift = 0,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
99 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
100 [PIX_FMT_YUV410P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
101 .name = "yuv410p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
102 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
103 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
104 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
105 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
106 .x_chroma_shift = 2, .y_chroma_shift = 2,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
107 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
108 [PIX_FMT_YUV411P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
109 .name = "yuv411p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
110 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
111 .color_type = FF_COLOR_YUV,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
112 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
113 .depth = 8,
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
114 .x_chroma_shift = 2, .y_chroma_shift = 0,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
115 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
116
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
117 /* JPEG YUV */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
118 [PIX_FMT_YUVJ420P] = {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
119 .name = "yuvj420p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
120 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
121 .color_type = FF_COLOR_YUV_JPEG,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
122 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
123 .depth = 8,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
124 .x_chroma_shift = 1, .y_chroma_shift = 1,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
125 },
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
126 [PIX_FMT_YUVJ422P] = {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
127 .name = "yuvj422p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
128 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
129 .color_type = FF_COLOR_YUV_JPEG,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
130 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
131 .depth = 8,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
132 .x_chroma_shift = 1, .y_chroma_shift = 0,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
133 },
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
134 [PIX_FMT_YUVJ444P] = {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
135 .name = "yuvj444p",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
136 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
137 .color_type = FF_COLOR_YUV_JPEG,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
138 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
139 .depth = 8,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
140 .x_chroma_shift = 0, .y_chroma_shift = 0,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
141 },
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
142
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
143 /* RGB formats */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
144 [PIX_FMT_RGB24] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
145 .name = "rgb24",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
146 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
147 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
148 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
149 .depth = 8,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
150 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
151 [PIX_FMT_BGR24] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
152 .name = "bgr24",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
153 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
154 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
155 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
156 .depth = 8,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
157 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
158 [PIX_FMT_RGBA32] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
159 .name = "rgba32",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
160 .nb_channels = 4, .is_alpha = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
161 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
162 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
163 .depth = 8,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
164 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
165 [PIX_FMT_RGB565] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
166 .name = "rgb565",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
167 .nb_channels = 3,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
168 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
169 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
170 .depth = 5,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
171 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
172 [PIX_FMT_RGB555] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
173 .name = "rgb555",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
174 .nb_channels = 4, .is_alpha = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
175 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
176 .pixel_type = FF_PIXEL_PACKED,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
177 .depth = 5,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
178 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
179
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
180 /* gray / mono formats */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
181 [PIX_FMT_GRAY8] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
182 .name = "gray",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
183 .nb_channels = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
184 .color_type = FF_COLOR_GRAY,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
185 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
186 .depth = 8,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
187 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
188 [PIX_FMT_MONOWHITE] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
189 .name = "monow",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
190 .nb_channels = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
191 .color_type = FF_COLOR_GRAY,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
192 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
193 .depth = 1,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
194 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
195 [PIX_FMT_MONOBLACK] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
196 .name = "monob",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
197 .nb_channels = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
198 .color_type = FF_COLOR_GRAY,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
199 .pixel_type = FF_PIXEL_PLANAR,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
200 .depth = 1,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
201 },
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
202
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
203 /* paletted formats */
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
204 [PIX_FMT_PAL8] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
205 .name = "pal8",
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
206 .nb_channels = 4, .is_alpha = 1,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
207 .color_type = FF_COLOR_RGB,
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
208 .pixel_type = FF_PIXEL_PALETTE,
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
209 .depth = 8,
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
210 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
211 };
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
212
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
213 void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
214 {
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
215 *h_shift = pix_fmt_info[pix_fmt].x_chroma_shift;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
216 *v_shift = pix_fmt_info[pix_fmt].y_chroma_shift;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
217 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
218
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
219 const char *avcodec_get_pix_fmt_name(int pix_fmt)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
220 {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
221 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
222 return "???";
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
223 else
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
224 return pix_fmt_info[pix_fmt].name;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
225 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
226
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
227 enum PixelFormat avcodec_get_pix_fmt(const char* name)
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
228 {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
229 int i;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
230
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
231 for (i=0; i < PIX_FMT_NB; i++)
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
232 if (!strcmp(pix_fmt_info[i].name, name))
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
233 break;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
234 return i;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
235 }
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
236
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
237 /* Picture field are filled with 'ptr' addresses. Also return size */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
238 int avpicture_fill(AVPicture *picture, uint8_t *ptr,
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
239 int pix_fmt, int width, int height)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
240 {
1047
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
241 int size, w2, h2, size2;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
242 PixFmtInfo *pinfo;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
243
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
244 pinfo = &pix_fmt_info[pix_fmt];
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
245 size = width * height;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
246 switch(pix_fmt) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
247 case PIX_FMT_YUV420P:
1047
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
248 case PIX_FMT_YUV422P:
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
249 case PIX_FMT_YUV444P:
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
250 case PIX_FMT_YUV410P:
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
251 case PIX_FMT_YUV411P:
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
252 case PIX_FMT_YUVJ420P:
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
253 case PIX_FMT_YUVJ422P:
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
254 case PIX_FMT_YUVJ444P:
1047
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
255 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
256 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
257 size2 = w2 * h2;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
258 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
259 picture->data[1] = picture->data[0] + size;
1047
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
260 picture->data[2] = picture->data[1] + size2;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
261 picture->linesize[0] = width;
1047
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
262 picture->linesize[1] = w2;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
263 picture->linesize[2] = w2;
3f316a471019 handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents: 1044
diff changeset
264 return size + 2 * size2;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
265 case PIX_FMT_RGB24:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
266 case PIX_FMT_BGR24:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
267 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
268 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
269 picture->data[2] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
270 picture->linesize[0] = width * 3;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
271 return size * 3;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
272 case PIX_FMT_RGBA32:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
273 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
274 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
275 picture->data[2] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
276 picture->linesize[0] = width * 4;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
277 return size * 4;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
278 case PIX_FMT_RGB555:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
279 case PIX_FMT_RGB565:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
280 case PIX_FMT_YUV422:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
281 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
282 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
283 picture->data[2] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
284 picture->linesize[0] = width * 2;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
285 return size * 2;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
286 case PIX_FMT_GRAY8:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
287 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
288 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
289 picture->data[2] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
290 picture->linesize[0] = width;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
291 return size;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
292 case PIX_FMT_MONOWHITE:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
293 case PIX_FMT_MONOBLACK:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
294 picture->data[0] = ptr;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
295 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
296 picture->data[2] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
297 picture->linesize[0] = (width + 7) >> 3;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
298 return picture->linesize[0] * height;
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
299 case PIX_FMT_PAL8:
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
300 size2 = (size + 3) & ~3;
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
301 picture->data[0] = ptr;
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
302 picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
303 picture->data[2] = NULL;
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
304 picture->linesize[0] = width;
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
305 picture->linesize[1] = 4;
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
306 return size2 + 256 * 4;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
307 default:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
308 picture->data[0] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
309 picture->data[1] = NULL;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
310 picture->data[2] = NULL;
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
311 picture->data[3] = NULL;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
312 return -1;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
313 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
314 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
315
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
316 int avpicture_layout(AVPicture* src, int pix_fmt, int width, int height,
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
317 unsigned char *dest, int dest_size)
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
318 {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
319 PixFmtInfo* pf = &pix_fmt_info[pix_fmt];
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
320 int i, j, w, h, data_planes;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
321 unsigned char* s;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
322 int size = avpicture_get_size(pix_fmt, width, height);
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
323
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
324 if (size > dest_size)
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
325 return -1;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
326
1243
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
327 if (pf->pixel_type == FF_PIXEL_PACKED || pf->pixel_type == FF_PIXEL_PALETTE) {
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
328 if (pix_fmt == PIX_FMT_YUV422 || pix_fmt == PIX_FMT_RGB565 ||
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
329 pix_fmt == PIX_FMT_RGB555)
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
330 w = width * 2;
1243
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
331 else if (pix_fmt == PIX_FMT_PAL8)
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
332 w = width;
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
333 else
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
334 w = width * (pf->depth * pf->nb_channels / 8);
1243
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
335
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
336 data_planes = 1;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
337 h = height;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
338 } else {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
339 data_planes = pf->nb_channels;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
340 w = width;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
341 h = height;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
342 }
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
343
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
344 for (i=0; i<data_planes; i++) {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
345 if (i == 1) {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
346 w = width >> pf->x_chroma_shift;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
347 h = height >> pf->y_chroma_shift;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
348 }
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
349 s = src->data[i];
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
350 for(j=0; j<h; j++) {
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
351 memcpy(dest, s, w);
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
352 dest += w;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
353 s += src->linesize[i];
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
354 }
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
355 }
1243
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
356
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
357 if (pf->pixel_type == FF_PIXEL_PALETTE)
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
358 memcpy((unsigned char *)(((size_t)dest + 3) & ~3), src->data[1], 256 * 4);
5d2376294fbf * fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents: 1231
diff changeset
359
1231
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
360 return size;
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
361 }
b88dfc4bbf8c * introducing new public interface in imgconvert.c
romansh
parents: 1209
diff changeset
362
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
363 int avpicture_get_size(int pix_fmt, int width, int height)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
364 {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
365 AVPicture dummy_pict;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
366 return avpicture_fill(&dummy_pict, NULL, pix_fmt, width, height);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
367 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
368
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
369 /**
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
370 * compute the loss when converting from a pixel format to another
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
371 */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
372 int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
373 int has_alpha)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
374 {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
375 const PixFmtInfo *pf, *ps;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
376 int loss;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
377
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
378 ps = &pix_fmt_info[src_pix_fmt];
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
379 pf = &pix_fmt_info[dst_pix_fmt];
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
380
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
381 /* compute loss */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
382 loss = 0;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
383 pf = &pix_fmt_info[dst_pix_fmt];
1206
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
384 if (pf->depth < ps->depth ||
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
385 (dst_pix_fmt == PIX_FMT_RGB555 && src_pix_fmt == PIX_FMT_RGB565))
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
386 loss |= FF_LOSS_DEPTH;
1206
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
387 if (pf->x_chroma_shift > ps->x_chroma_shift ||
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
388 pf->y_chroma_shift > ps->y_chroma_shift)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
389 loss |= FF_LOSS_RESOLUTION;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
390 switch(pf->color_type) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
391 case FF_COLOR_RGB:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
392 if (ps->color_type != FF_COLOR_RGB &&
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
393 ps->color_type != FF_COLOR_GRAY)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
394 loss |= FF_LOSS_COLORSPACE;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
395 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
396 case FF_COLOR_GRAY:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
397 if (ps->color_type != FF_COLOR_GRAY)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
398 loss |= FF_LOSS_COLORSPACE;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
399 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
400 case FF_COLOR_YUV:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
401 if (ps->color_type != FF_COLOR_YUV)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
402 loss |= FF_LOSS_COLORSPACE;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
403 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
404 case FF_COLOR_YUV_JPEG:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
405 if (ps->color_type != FF_COLOR_YUV_JPEG &&
1206
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
406 ps->color_type != FF_COLOR_YUV &&
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
407 ps->color_type != FF_COLOR_GRAY)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
408 loss |= FF_LOSS_COLORSPACE;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
409 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
410 default:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
411 /* fail safe test */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
412 if (ps->color_type != pf->color_type)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
413 loss |= FF_LOSS_COLORSPACE;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
414 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
415 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
416 if (pf->color_type == FF_COLOR_GRAY &&
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
417 ps->color_type != FF_COLOR_GRAY)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
418 loss |= FF_LOSS_CHROMA;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
419 if (!pf->is_alpha && (ps->is_alpha && has_alpha))
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
420 loss |= FF_LOSS_ALPHA;
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
421 if (pf->pixel_type == FF_PIXEL_PALETTE &&
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
422 (ps->pixel_type != FF_PIXEL_PALETTE && ps->color_type != FF_COLOR_GRAY))
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
423 loss |= FF_LOSS_COLORQUANT;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
424 return loss;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
425 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
426
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
427 static int avg_bits_per_pixel(int pix_fmt)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
428 {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
429 int bits;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
430 const PixFmtInfo *pf;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
431
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
432 pf = &pix_fmt_info[pix_fmt];
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
433 switch(pf->pixel_type) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
434 case FF_PIXEL_PACKED:
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
435 switch(pix_fmt) {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
436 case PIX_FMT_YUV422:
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
437 case PIX_FMT_RGB565:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
438 case PIX_FMT_RGB555:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
439 bits = 16;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
440 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
441 default:
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
442 bits = pf->depth * pf->nb_channels;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
443 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
444 }
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
445 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
446 case FF_PIXEL_PLANAR:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
447 if (pf->x_chroma_shift == 0 && pf->y_chroma_shift == 0) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
448 bits = pf->depth * pf->nb_channels;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
449 } else {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
450 bits = pf->depth + ((2 * pf->depth) >>
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
451 (pf->x_chroma_shift + pf->y_chroma_shift));
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
452 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
453 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
454 case FF_PIXEL_PALETTE:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
455 bits = 8;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
456 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
457 default:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
458 bits = -1;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
459 break;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
460 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
461 return bits;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
462 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
463
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
464 static int avcodec_find_best_pix_fmt1(int pix_fmt_mask,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
465 int src_pix_fmt,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
466 int has_alpha,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
467 int loss_mask)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
468 {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
469 int dist, i, loss, min_dist, dst_pix_fmt;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
470
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
471 /* find exact color match with smallest size */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
472 dst_pix_fmt = -1;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
473 min_dist = 0x7fffffff;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
474 for(i = 0;i < PIX_FMT_NB; i++) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
475 if (pix_fmt_mask & (1 << i)) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
476 loss = avcodec_get_pix_fmt_loss(i, src_pix_fmt, has_alpha) & loss_mask;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
477 if (loss == 0) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
478 dist = avg_bits_per_pixel(i);
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
479 if (dist < min_dist) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
480 min_dist = dist;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
481 dst_pix_fmt = i;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
482 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
483 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
484 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
485 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
486 return dst_pix_fmt;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
487 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
488
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
489 /**
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
490 * find best pixel format to convert to. Return -1 if none found
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
491 */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
492 int avcodec_find_best_pix_fmt(int pix_fmt_mask, int src_pix_fmt,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
493 int has_alpha, int *loss_ptr)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
494 {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
495 int dst_pix_fmt, loss_mask, i;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
496 static const int loss_mask_order[] = {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
497 ~0, /* no loss first */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
498 ~FF_LOSS_ALPHA,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
499 ~FF_LOSS_RESOLUTION,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
500 ~(FF_LOSS_COLORSPACE | FF_LOSS_RESOLUTION),
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
501 ~FF_LOSS_COLORQUANT,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
502 ~FF_LOSS_DEPTH,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
503 0,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
504 };
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
505
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
506 /* try with successive loss */
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
507 i = 0;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
508 for(;;) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
509 loss_mask = loss_mask_order[i++];
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
510 dst_pix_fmt = avcodec_find_best_pix_fmt1(pix_fmt_mask, src_pix_fmt,
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
511 has_alpha, loss_mask);
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
512 if (dst_pix_fmt >= 0)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
513 goto found;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
514 if (loss_mask == 0)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
515 break;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
516 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
517 return -1;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
518 found:
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
519 if (loss_ptr)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
520 *loss_ptr = avcodec_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
521 return dst_pix_fmt;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
522 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
523
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
524 static void img_copy_plane(uint8_t *dst, int dst_wrap,
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
525 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
526 int width, int height)
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
527 {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
528 for(;height > 0; height--) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
529 memcpy(dst, src, width);
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
530 dst += dst_wrap;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
531 src += src_wrap;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
532 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
533 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
534
1208
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
535 /**
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
536 * Copy image 'src' to 'dst'.
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
537 */
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
538 void img_copy(AVPicture *dst, AVPicture *src,
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
539 int pix_fmt, int width, int height)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
540 {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
541 int bwidth, bits, i;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
542 PixFmtInfo *pf = &pix_fmt_info[pix_fmt];
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
543
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
544 pf = &pix_fmt_info[pix_fmt];
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
545 switch(pf->pixel_type) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
546 case FF_PIXEL_PACKED:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
547 switch(pix_fmt) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
548 case PIX_FMT_YUV422:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
549 case PIX_FMT_RGB565:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
550 case PIX_FMT_RGB555:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
551 bits = 16;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
552 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
553 default:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
554 bits = pf->depth * pf->nb_channels;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
555 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
556 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
557 bwidth = (width * bits + 7) >> 3;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
558 img_copy_plane(dst->data[0], dst->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
559 src->data[0], src->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
560 bwidth, height);
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
561 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
562 case FF_PIXEL_PLANAR:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
563 for(i = 0; i < pf->nb_channels; i++) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
564 int w, h;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
565 w = width;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
566 h = height;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
567 if (i == 1 || i == 2) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
568 w >>= pf->x_chroma_shift;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
569 h >>= pf->y_chroma_shift;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
570 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
571 bwidth = (w * pf->depth + 7) >> 3;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
572 img_copy_plane(dst->data[i], dst->linesize[i],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
573 src->data[i], src->linesize[i],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
574 bwidth, h);
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
575 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
576 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
577 case FF_PIXEL_PALETTE:
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
578 img_copy_plane(dst->data[0], dst->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
579 src->data[0], src->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
580 width, height);
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
581 /* copy the palette */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
582 img_copy_plane(dst->data[1], dst->linesize[1],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
583 src->data[1], src->linesize[1],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
584 4, 256);
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
585 break;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
586 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
587 }
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
588
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
589 /* XXX: totally non optimized */
986e461dc072 Initial revision
glantau
parents:
diff changeset
590
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
591 static void yuv422_to_yuv420p(AVPicture *dst, AVPicture *src,
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
592 int width, int height)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
593 {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
594 const uint8_t *p, *p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
595 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
596 int x;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
597
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
598 p1 = src->data[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
599 lum1 = dst->data[0];
1207
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
600 cb1 = dst->data[1];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
601 cr1 = dst->data[2];
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
602
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
603 for(;height >= 2; height -= 2) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
604 p = p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
605 lum = lum1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
606 cb = cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
607 cr = cr1;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
608 for(x=0;x<width;x+=2) {
1028
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
609 lum[0] = p[0];
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
610 cb[0] = p[1];
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
611 lum[1] = p[2];
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
612 cr[0] = p[3];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
613 p += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
614 lum += 2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
615 cb++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
616 cr++;
986e461dc072 Initial revision
glantau
parents:
diff changeset
617 }
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
618 p1 += src->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
619 lum1 += dst->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
620 p = p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
621 lum = lum1;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
622 for(x=0;x<width;x+=2) {
1028
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
623 lum[0] = p[0];
e76fb91de4cc reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents: 1023
diff changeset
624 lum[1] = p[2];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
625 p += 4;
986e461dc072 Initial revision
glantau
parents:
diff changeset
626 lum += 2;
986e461dc072 Initial revision
glantau
parents:
diff changeset
627 }
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
628 p1 += src->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
629 lum1 += dst->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
630 cb1 += dst->linesize[1];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
631 cr1 += dst->linesize[2];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
632 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
633 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
634
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
635 static void yuv422_to_yuv422p(AVPicture *dst, AVPicture *src,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
636 int width, int height)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
637 {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
638 const uint8_t *p, *p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
639 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
640 int w;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
641
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
642 p1 = src->data[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
643 lum1 = dst->data[0];
1207
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
644 cb1 = dst->data[1];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
645 cr1 = dst->data[2];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
646 for(;height > 0; height--) {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
647 p = p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
648 lum = lum1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
649 cb = cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
650 cr = cr1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
651 for(w = width; w >= 2; w -= 2) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
652 lum[0] = p[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
653 cb[0] = p[1];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
654 lum[1] = p[2];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
655 cr[0] = p[3];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
656 p += 4;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
657 lum += 2;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
658 cb++;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
659 cr++;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
660 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
661 p1 += src->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
662 lum1 += dst->linesize[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
663 cb1 += dst->linesize[1];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
664 cr1 += dst->linesize[2];
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
665 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
666 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
667
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
668 static void yuv422p_to_yuv422(AVPicture *dst, AVPicture *src,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
669 int width, int height)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
670 {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
671 uint8_t *p, *p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
672 const uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
673 int w;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
674
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
675 p1 = dst->data[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
676 lum1 = src->data[0];
1207
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
677 cb1 = src->data[1];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
678 cr1 = src->data[2];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
679 for(;height > 0; height--) {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
680 p = p1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
681 lum = lum1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
682 cb = cb1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
683 cr = cr1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
684 for(w = width; w >= 2; w -= 2) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
685 p[0] = lum[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
686 p[1] = cb[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
687 p[2] = lum[1];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
688 p[3] = cr[0];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
689 p += 4;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
690 lum += 2;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
691 cb++;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
692 cr++;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
693 }
1207
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
694 p1 += dst->linesize[0];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
695 lum1 += src->linesize[0];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
696 cb1 += src->linesize[1];
162be12df86a fixed PIX_FMT_YUV422 conversions
bellard
parents: 1206
diff changeset
697 cr1 += src->linesize[2];
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
698 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
699 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
700
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
701 #define SCALEBITS 10
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
702 #define ONE_HALF (1 << (SCALEBITS - 1))
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
703 #define FIX(x) ((int) ((x) * (1<<SCALEBITS) + 0.5))
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
704
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
705 #define YUV_TO_RGB1_CCIR(cb1, cr1)\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
706 {\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
707 cb = (cb1) - 128;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
708 cr = (cr1) - 128;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
709 r_add = FIX(1.40200*255.0/224.0) * cr + ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
710 g_add = - FIX(0.34414*255.0/224.0) * cb - FIX(0.71414*255.0/224.0) * cr + \
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
711 ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
712 b_add = FIX(1.77200*255.0/224.0) * cb + ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
713 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
714
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
715 #define YUV_TO_RGB2_CCIR(r, g, b, y1)\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
716 {\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
717 y = ((y1) - 16) * FIX(255.0/219.0);\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
718 r = cm[(y + r_add) >> SCALEBITS];\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
719 g = cm[(y + g_add) >> SCALEBITS];\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
720 b = cm[(y + b_add) >> SCALEBITS];\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
721 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
722
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
723 #define YUV_TO_RGB1(cb1, cr1)\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
724 {\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
725 cb = (cb1) - 128;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
726 cr = (cr1) - 128;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
727 r_add = FIX(1.40200) * cr + ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
728 g_add = - FIX(0.34414) * cb - FIX(0.71414) * cr + ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
729 b_add = FIX(1.77200) * cb + ONE_HALF;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
730 }
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
731
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
732 #define YUV_TO_RGB2(r, g, b, y1)\
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
733 {\
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
734 y = (y1) << SCALEBITS;\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
735 r = cm[(y + r_add) >> SCALEBITS];\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
736 g = cm[(y + g_add) >> SCALEBITS];\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
737 b = cm[(y + b_add) >> SCALEBITS];\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
738 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
739
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
740 #define Y_CCIR_TO_JPEG(y)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
741 cm[((y) * FIX(255.0/219.0) + (ONE_HALF - 16 * FIX(255.0/219.0))) >> SCALEBITS]
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
742
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
743 #define Y_JPEG_TO_CCIR(y)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
744 (((y) * FIX(219.0/255.0) + (ONE_HALF + (16 << SCALEBITS))) >> SCALEBITS)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
745
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
746 #define C_CCIR_TO_JPEG(y)\
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
747 cm[(((y) - 128) * FIX(127.0/112.0) + (ONE_HALF + (128 << SCALEBITS))) >> SCALEBITS]
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
748
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
749 /* NOTE: the clamp is really necessary! */
1282
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
750 static inline int C_JPEG_TO_CCIR(int y) {
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
751 y = (((y - 128) * FIX(112.0/127.0) + (ONE_HALF + (128 << SCALEBITS))) >> SCALEBITS);
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
752 if (y < 16)
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
753 y = 16;
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
754 return y;
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
755 }
8988af3ae1e8 Warning and compatibility fixes.
mellum
parents: 1243
diff changeset
756
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
757
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
758 #define RGB_TO_Y(r, g, b) \
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
759 ((FIX(0.29900) * (r) + FIX(0.58700) * (g) + \
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
760 FIX(0.11400) * (b) + ONE_HALF) >> SCALEBITS)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
761
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
762 #define RGB_TO_U(r1, g1, b1, shift)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
763 (((- FIX(0.16874) * r1 - FIX(0.33126) * g1 + \
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
764 FIX(0.50000) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
765
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
766 #define RGB_TO_V(r1, g1, b1, shift)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
767 (((FIX(0.50000) * r1 - FIX(0.41869) * g1 - \
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
768 FIX(0.08131) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
769
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
770 #define RGB_TO_Y_CCIR(r, g, b) \
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
771 ((FIX(0.29900*219.0/255.0) * (r) + FIX(0.58700*219.0/255.0) * (g) + \
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
772 FIX(0.11400*219.0/255.0) * (b) + (ONE_HALF + (16 << SCALEBITS))) >> SCALEBITS)
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
773
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
774 #define RGB_TO_U_CCIR(r1, g1, b1, shift)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
775 (((- FIX(0.16874*224.0/255.0) * r1 - FIX(0.33126*224.0/255.0) * g1 + \
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
776 FIX(0.50000*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
777
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
778 #define RGB_TO_V_CCIR(r1, g1, b1, shift)\
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
779 (((FIX(0.50000*224.0/255.0) * r1 - FIX(0.41869*224.0/255.0) * g1 - \
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
780 FIX(0.08131*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
781
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
782 static uint8_t y_ccir_to_jpeg[256];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
783 static uint8_t y_jpeg_to_ccir[256];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
784 static uint8_t c_ccir_to_jpeg[256];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
785 static uint8_t c_jpeg_to_ccir[256];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
786
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
787 /* init various conversion tables */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
788 static void img_convert_init(void)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
789 {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
790 int i;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
791 uint8_t *cm = cropTbl + MAX_NEG_CROP;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
792
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
793 for(i = 0;i < 256; i++) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
794 y_ccir_to_jpeg[i] = Y_CCIR_TO_JPEG(i);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
795 y_jpeg_to_ccir[i] = Y_JPEG_TO_CCIR(i);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
796 c_ccir_to_jpeg[i] = C_CCIR_TO_JPEG(i);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
797 c_jpeg_to_ccir[i] = C_JPEG_TO_CCIR(i);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
798 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
799 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
800
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
801 /* apply to each pixel the given table */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
802 static void img_apply_table(uint8_t *dst, int dst_wrap,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
803 const uint8_t *src, int src_wrap,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
804 int width, int height, const uint8_t *table1)
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
805 {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
806 int n;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
807 const uint8_t *s;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
808 uint8_t *d;
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
809 const uint8_t *table;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
810
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
811 table = table1;
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
812 for(;height > 0; height--) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
813 s = src;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
814 d = dst;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
815 n = width;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
816 while (n >= 4) {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
817 d[0] = table[s[0]];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
818 d[1] = table[s[1]];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
819 d[2] = table[s[2]];
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
820 d[3] = table[s[3]];
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
821 d += 4;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
822 s += 4;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
823 n -= 4;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
824 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
825 while (n > 0) {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
826 d[0] = table[s[0]];
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
827 d++;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
828 s++;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
829 n--;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
830 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
831 dst += dst_wrap;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
832 src += src_wrap;
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
833 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
834 }
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
835
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
836 /* XXX: use generic filter ? */
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
837 /* XXX: in most cases, the sampling position is incorrect */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
838
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
839 /* 4x1 -> 1x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
840 static void shrink41(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
841 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
842 int width, int height)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
843 {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
844 int w;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
845 const uint8_t *s;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
846 uint8_t *d;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
847
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
848 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
849 s = src;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
850 d = dst;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
851 for(w = width;w > 0; w--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
852 d[0] = (s[0] + s[1] + s[2] + s[3] + 2) >> 2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
853 s += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
854 d++;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
855 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
856 src += src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
857 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
858 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
859 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
860
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
861 /* 2x1 -> 1x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
862 static void shrink21(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
863 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
864 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
865 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
866 int w;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
867 const uint8_t *s;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
868 uint8_t *d;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
869
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
870 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
871 s = src;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
872 d = dst;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
873 for(w = width;w > 0; w--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
874 d[0] = (s[0] + s[1]) >> 1;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
875 s += 2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
876 d++;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
877 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
878 src += src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
879 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
880 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
881 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
882
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
883 /* 1x2 -> 1x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
884 static void shrink12(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
885 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
886 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
887 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
888 int w;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
889 uint8_t *d;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
890 const uint8_t *s1, *s2;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
891
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
892 for(;height > 0; height--) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
893 s1 = src;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
894 s2 = s1 + src_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
895 d = dst;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
896 for(w = width;w >= 4; w-=4) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
897 d[0] = (s1[0] + s2[0]) >> 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
898 d[1] = (s1[1] + s2[1]) >> 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
899 d[2] = (s1[2] + s2[2]) >> 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
900 d[3] = (s1[3] + s2[3]) >> 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
901 s1 += 4;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
902 s2 += 4;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
903 d += 4;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
904 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
905 for(;w > 0; w--) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
906 d[0] = (s1[0] + s2[0]) >> 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
907 s1++;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
908 s2++;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
909 d++;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
910 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
911 src += 2 * src_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
912 dst += dst_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
913 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
914 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
915
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
916 /* 2x2 -> 1x1 */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
917 static void shrink22(uint8_t *dst, int dst_wrap,
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
918 const uint8_t *src, int src_wrap,
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
919 int width, int height)
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
920 {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
921 int w;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
922 const uint8_t *s1, *s2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
923 uint8_t *d;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
924
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
925 for(;height > 0; height--) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
926 s1 = src;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
927 s2 = s1 + src_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
928 d = dst;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
929 for(w = width;w >= 4; w-=4) {
1206
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
930 d[0] = (s1[0] + s1[1] + s2[0] + s2[1] + 2) >> 2;
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
931 d[1] = (s1[2] + s1[3] + s2[2] + s2[3] + 2) >> 2;
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
932 d[2] = (s1[4] + s1[5] + s2[4] + s2[5] + 2) >> 2;
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
933 d[3] = (s1[6] + s1[7] + s2[6] + s2[7] + 2) >> 2;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
934 s1 += 8;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
935 s2 += 8;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
936 d += 4;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
937 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
938 for(;w > 0; w--) {
1206
fd676abc754c loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents: 1205
diff changeset
939 d[0] = (s1[0] + s1[1] + s2[0] + s2[1] + 2) >> 2;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
940 s1 += 2;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
941 s2 += 2;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
942 d++;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
943 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
944 src += 2 * src_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
945 dst += dst_wrap;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
946 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
947 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
948
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
949 /* 4x4 -> 1x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
950 static void shrink44(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
951 const uint8_t *src, int src_wrap,
576
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
952 int width, int height)
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
953 {
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
954 int w;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
955 const uint8_t *s1, *s2, *s3, *s4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
956 uint8_t *d;
576
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
957
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
958 for(;height > 0; height--) {
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
959 s1 = src;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
960 s2 = s1 + src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
961 s3 = s2 + src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
962 s4 = s3 + src_wrap;
576
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
963 d = dst;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
964 for(w = width;w > 0; w--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
965 d[0] = (s1[0] + s1[1] + s1[2] + s1[3] +
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
966 s2[0] + s2[1] + s2[2] + s2[3] +
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
967 s3[0] + s3[1] + s3[2] + s3[3] +
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
968 s4[0] + s4[1] + s4[2] + s4[3] + 8) >> 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
969 s1 += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
970 s2 += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
971 s3 += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
972 s4 += 4;
576
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
973 d++;
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
974 }
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
975 src += 4 * src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
976 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
977 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
978 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
979
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
980 static void grow21_line(uint8_t *dst, const uint8_t *src,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
981 int width)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
982 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
983 int w;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
984 const uint8_t *s1;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
985 uint8_t *d;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
986
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
987 s1 = src;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
988 d = dst;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
989 for(w = width;w >= 4; w-=4) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
990 d[1] = d[0] = s1[0];
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
991 d[3] = d[2] = s1[1];
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
992 s1 += 2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
993 d += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
994 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
995 for(;w >= 2; w -= 2) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
996 d[1] = d[0] = s1[0];
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
997 s1 ++;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
998 d += 2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
999 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1000 /* only needed if width is not a multiple of two */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1001 /* XXX: veryfy that */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1002 if (w) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1003 d[0] = s1[0];
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1004 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1005 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1006
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1007 static void grow41_line(uint8_t *dst, const uint8_t *src,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1008 int width)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1009 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1010 int w, v;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1011 const uint8_t *s1;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1012 uint8_t *d;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1013
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1014 s1 = src;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1015 d = dst;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1016 for(w = width;w >= 4; w-=4) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1017 v = s1[0];
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1018 d[0] = v;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1019 d[1] = v;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1020 d[2] = v;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1021 d[3] = v;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1022 s1 ++;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1023 d += 4;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1024 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1025 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1026
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1027 /* 1x1 -> 2x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1028 static void grow21(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1029 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1030 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1031 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1032 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1033 grow21_line(dst, src, width);
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1034 src += src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1035 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1036 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1037 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1038
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1039 /* 1x1 -> 2x2 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1040 static void grow22(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1041 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1042 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1043 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1044 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1045 grow21_line(dst, src, width);
576
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1046 if (height%2)
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1047 src += src_wrap;
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1048 dst += dst_wrap;
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1049 }
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1050 }
9aa5f0d0124e YUV410P to YUV420P patch by Franois Revol <revol at free dot fr>
michaelni
parents: 440
diff changeset
1051
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1052 /* 1x1 -> 4x1 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1053 static void grow41(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1054 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1055 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1056 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1057 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1058 grow41_line(dst, src, width);
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1059 src += src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1060 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1061 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1062 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1063
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1064 /* 1x1 -> 4x4 */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1065 static void grow44(uint8_t *dst, int dst_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1066 const uint8_t *src, int src_wrap,
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1067 int width, int height)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1068 {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1069 for(;height > 0; height--) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1070 grow41_line(dst, src, width);
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1071 if ((height & 3) == 1)
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1072 src += src_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1073 dst += dst_wrap;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1074 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1075 }
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1076
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1077 /* 1x2 -> 2x1 */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1078 static void conv411(uint8_t *dst, int dst_wrap,
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1079 const uint8_t *src, int src_wrap,
736
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1080 int width, int height)
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1081 {
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1082 int w, c;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1083 const uint8_t *s1, *s2;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1084 uint8_t *d;
736
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1085
1166
54384dc71fe7 fixing mem corruption
michaelni
parents: 1108
diff changeset
1086 width>>=1;
54384dc71fe7 fixing mem corruption
michaelni
parents: 1108
diff changeset
1087
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1088 for(;height > 0; height--) {
736
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1089 s1 = src;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1090 s2 = src + src_wrap;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1091 d = dst;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1092 for(w = width;w > 0; w--) {
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1093 c = (s1[0] + s2[0]) >> 1;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1094 d[0] = c;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1095 d[1] = c;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1096 s1++;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1097 s2++;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1098 d += 2;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1099 }
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1100 src += src_wrap * 2;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1101 dst += dst_wrap;
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1102 }
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1103 }
918756bffda2 minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents: 583
diff changeset
1104
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1105 /* XXX: add jpeg quantize code */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1106
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1107 #define TRANSP_INDEX (6*6*6)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1108
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1109 /* this is maybe slow, but allows for extensions */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1110 static inline unsigned char gif_clut_index(uint8_t r, uint8_t g, uint8_t b)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1111 {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1112 return ((((r)/47)%6)*6*6+(((g)/47)%6)*6+(((b)/47)%6));
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1113 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1114
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1115 static void build_rgb_palette(uint8_t *palette, int has_alpha)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1116 {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1117 uint32_t *pal;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1118 static const uint8_t pal_value[6] = { 0x00, 0x33, 0x66, 0x99, 0xcc, 0xff };
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1119 int i, r, g, b;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1120
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1121 pal = (uint32_t *)palette;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1122 i = 0;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1123 for(r = 0; r < 6; r++) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1124 for(g = 0; g < 6; g++) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1125 for(b = 0; b < 6; b++) {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1126 pal[i++] = (0xff << 24) | (pal_value[r] << 16) |
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1127 (pal_value[g] << 8) | pal_value[b];
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1128 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1129 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1130 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1131 if (has_alpha)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1132 pal[i++] = 0;
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1133 while (i < 256)
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1134 pal[i++] = 0xff000000;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1135 }
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1136
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1137 /* copy bit n to bits 0 ... n - 1 */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1138 static inline unsigned int bitcopy_n(unsigned int a, int n)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1139 {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1140 int mask;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1141 mask = (1 << n) - 1;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1142 return (a & (0xff & ~mask)) | ((-((a >> n) & 1)) & mask);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1143 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1144
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1145 /* rgb555 handling */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1146
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1147 #define RGB_NAME rgb555
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1148
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1149 #define RGB_IN(r, g, b, s)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1150 {\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1151 unsigned int v = ((const uint16_t *)(s))[0];\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1152 r = bitcopy_n(v >> (10 - 3), 3);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1153 g = bitcopy_n(v >> (5 - 3), 3);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1154 b = bitcopy_n(v << 3, 3);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1155 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1156
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1157 #define RGBA_IN(r, g, b, a, s)\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1158 {\
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1159 unsigned int v = ((const uint16_t *)(s))[0];\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1160 r = bitcopy_n(v >> (10 - 3), 3);\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1161 g = bitcopy_n(v >> (5 - 3), 3);\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1162 b = bitcopy_n(v << 3, 3);\
1209
0aa744ab1c07 rgb555 alpha extraction fix
bellard
parents: 1208
diff changeset
1163 a = (-(v >> 15)) & 0xff;\
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1164 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1165
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1166 #define RGBA_OUT(d, r, g, b, a)\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1167 {\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1168 ((uint16_t *)(d))[0] = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3) | \
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1169 ((a << 8) & 0x8000);\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1170 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1171
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1172 #define BPP 2
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1173
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1174 #include "imgconvert_template.h"
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1175
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1176 /* rgb565 handling */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1177
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1178 #define RGB_NAME rgb565
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1179
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1180 #define RGB_IN(r, g, b, s)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1181 {\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1182 unsigned int v = ((const uint16_t *)(s))[0];\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1183 r = bitcopy_n(v >> (11 - 3), 3);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1184 g = bitcopy_n(v >> (5 - 2), 2);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1185 b = bitcopy_n(v << 3, 3);\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1186 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1187
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1188 #define RGB_OUT(d, r, g, b)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1189 {\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1190 ((uint16_t *)(d))[0] = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1191 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1192
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1193 #define BPP 2
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1194
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1195 #include "imgconvert_template.h"
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1196
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1197 /* bgr24 handling */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1198
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1199 #define RGB_NAME bgr24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1200
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1201 #define RGB_IN(r, g, b, s)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1202 {\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1203 b = (s)[0];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1204 g = (s)[1];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1205 r = (s)[2];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1206 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1207
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1208 #define RGB_OUT(d, r, g, b)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1209 {\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1210 (d)[0] = b;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1211 (d)[1] = g;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1212 (d)[2] = r;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1213 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1214
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1215 #define BPP 3
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1216
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1217 #include "imgconvert_template.h"
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1218
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1219 #undef RGB_IN
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1220 #undef RGB_OUT
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1221 #undef BPP
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1222
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1223 /* rgb24 handling */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1224
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1225 #define RGB_NAME rgb24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1226 #define FMT_RGB24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1227
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1228 #define RGB_IN(r, g, b, s)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1229 {\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1230 r = (s)[0];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1231 g = (s)[1];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1232 b = (s)[2];\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1233 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1234
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1235 #define RGB_OUT(d, r, g, b)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1236 {\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1237 (d)[0] = r;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1238 (d)[1] = g;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1239 (d)[2] = b;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1240 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1241
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1242 #define BPP 3
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1243
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1244 #include "imgconvert_template.h"
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1245
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1246 /* rgba32 handling */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1247
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1248 #define RGB_NAME rgba32
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1249 #define FMT_RGBA32
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1250
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1251 #define RGB_IN(r, g, b, s)\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1252 {\
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1253 unsigned int v = ((const uint32_t *)(s))[0];\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1254 r = (v >> 16) & 0xff;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1255 g = (v >> 8) & 0xff;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1256 b = v & 0xff;\
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1257 }
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1258
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1259 #define RGBA_IN(r, g, b, a, s)\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1260 {\
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1261 unsigned int v = ((const uint32_t *)(s))[0];\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1262 a = (v >> 24) & 0xff;\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1263 r = (v >> 16) & 0xff;\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1264 g = (v >> 8) & 0xff;\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1265 b = v & 0xff;\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1266 }
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1267
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1268 #define RGBA_OUT(d, r, g, b, a)\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1269 {\
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1270 ((uint32_t *)(d))[0] = (a << 24) | (r << 16) | (g << 8) | b;\
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1271 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1272
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1273 #define BPP 4
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1274
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1275 #include "imgconvert_template.h"
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1276
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1277 static void mono_to_gray(AVPicture *dst, AVPicture *src,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1278 int width, int height, int xor_mask)
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1279 {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1280 const unsigned char *p;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1281 unsigned char *q;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1282 int v, dst_wrap, src_wrap;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1283 int y, w;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1284
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1285 p = src->data[0];
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1286 src_wrap = src->linesize[0] - ((width + 7) >> 3);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1287
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1288 q = dst->data[0];
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1289 dst_wrap = dst->linesize[0] - width;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1290 for(y=0;y<height;y++) {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1291 w = width;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1292 while (w >= 8) {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1293 v = *p++ ^ xor_mask;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1294 q[0] = -(v >> 7);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1295 q[1] = -((v >> 6) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1296 q[2] = -((v >> 5) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1297 q[3] = -((v >> 4) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1298 q[4] = -((v >> 3) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1299 q[5] = -((v >> 2) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1300 q[6] = -((v >> 1) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1301 q[7] = -((v >> 0) & 1);
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1302 w -= 8;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1303 q += 8;
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1304 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1305 if (w > 0) {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1306 v = *p++ ^ xor_mask;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1307 do {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1308 q[0] = -((v >> 7) & 1);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1309 q++;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1310 v <<= 1;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1311 } while (--w);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1312 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1313 p += src_wrap;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1314 q += dst_wrap;
583
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1315 }
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1316 }
d6955d0d7d27 Add conversions to and from RGBA32 and BGRA32.
philipjsg
parents: 576
diff changeset
1317
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1318 static void monowhite_to_gray(AVPicture *dst, AVPicture *src,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1319 int width, int height)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1320 {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1321 mono_to_gray(dst, src, width, height, 0xff);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1322 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1323
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1324 static void monoblack_to_gray(AVPicture *dst, AVPicture *src,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1325 int width, int height)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1326 {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1327 mono_to_gray(dst, src, width, height, 0x00);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1328 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1329
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1330 static void gray_to_mono(AVPicture *dst, AVPicture *src,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1331 int width, int height, int xor_mask)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1332 {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1333 int n;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1334 const uint8_t *s;
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1335 uint8_t *d;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1336 int j, b, v, n1, src_wrap, dst_wrap, y;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1337
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1338 s = src->data[0];
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1339 src_wrap = src->linesize[0] - width;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1340
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1341 d = dst->data[0];
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1342 dst_wrap = dst->linesize[0] - ((width + 7) >> 3);
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1343
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1344 for(y=0;y<height;y++) {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1345 n = width;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1346 while (n >= 8) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1347 v = 0;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1348 for(j=0;j<8;j++) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1349 b = s[0];
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1350 s++;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1351 v = (v << 1) | (b >> 7);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1352 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1353 d[0] = v ^ xor_mask;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1354 d++;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1355 n -= 8;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1356 }
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1357 if (n > 0) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1358 n1 = n;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1359 v = 0;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1360 while (n > 0) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1361 b = s[0];
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1362 s++;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1363 v = (v << 1) | (b >> 7);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1364 n--;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1365 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1366 d[0] = (v << (8 - (n1 & 7))) ^ xor_mask;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1367 d++;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1368 }
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1369 s += src_wrap;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1370 d += dst_wrap;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1371 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1372 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1373
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1374 static void gray_to_monowhite(AVPicture *dst, AVPicture *src,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1375 int width, int height)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1376 {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1377 gray_to_mono(dst, src, width, height, 0xff);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1378 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1379
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1380 static void gray_to_monoblack(AVPicture *dst, AVPicture *src,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1381 int width, int height)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1382 {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1383 gray_to_mono(dst, src, width, height, 0x00);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1384 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1385
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1386 typedef struct ConvertEntry {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1387 void (*convert)(AVPicture *dst, AVPicture *src, int width, int height);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1388 } ConvertEntry;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1389
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1390 /* Add each new convertion function in this table. In order to be able
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1391 to convert from any format to any format, the following constraints
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1392 must be satisfied:
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1393
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1394 - all FF_COLOR_RGB formats must convert to and from PIX_FMT_RGB24
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1395
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1396 - all FF_COLOR_GRAY formats must convert to and from PIX_FMT_GRAY8
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1397
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1398 - all FF_COLOR_RGB formats with alpha must convert to and from PIX_FMT_RGBA32
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1399
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1400 - PIX_FMT_YUV444P and PIX_FMT_YUVJ444P must convert to and from
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1401 PIX_FMT_RGB24.
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1402
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1403 - PIX_FMT_422 must convert to and from PIX_FMT_422P.
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1404
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1405 The other conversion functions are just optimisations for common cases.
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1406 */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1407 static ConvertEntry convert_table[PIX_FMT_NB][PIX_FMT_NB] = {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1408 [PIX_FMT_YUV420P] = {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1409 [PIX_FMT_RGB555] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1410 .convert = yuv420p_to_rgb555
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1411 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1412 [PIX_FMT_RGB565] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1413 .convert = yuv420p_to_rgb565
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1414 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1415 [PIX_FMT_BGR24] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1416 .convert = yuv420p_to_bgr24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1417 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1418 [PIX_FMT_RGB24] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1419 .convert = yuv420p_to_rgb24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1420 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1421 [PIX_FMT_RGBA32] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1422 .convert = yuv420p_to_rgba32
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1423 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1424 },
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1425 [PIX_FMT_YUV422P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1426 [PIX_FMT_YUV422] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1427 .convert = yuv422p_to_yuv422,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1428 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1429 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1430 [PIX_FMT_YUV444P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1431 [PIX_FMT_RGB24] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1432 .convert = yuv444p_to_rgb24
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1433 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1434 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1435 [PIX_FMT_YUVJ420P] = {
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1436 [PIX_FMT_RGB555] = {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1437 .convert = yuvj420p_to_rgb555
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1438 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1439 [PIX_FMT_RGB565] = {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1440 .convert = yuvj420p_to_rgb565
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1441 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1442 [PIX_FMT_BGR24] = {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1443 .convert = yuvj420p_to_bgr24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1444 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1445 [PIX_FMT_RGB24] = {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1446 .convert = yuvj420p_to_rgb24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1447 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1448 [PIX_FMT_RGBA32] = {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1449 .convert = yuvj420p_to_rgba32
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1450 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1451 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1452 [PIX_FMT_YUVJ444P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1453 [PIX_FMT_RGB24] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1454 .convert = yuvj444p_to_rgb24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1455 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1456 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1457 [PIX_FMT_YUV422] = {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1458 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1459 .convert = yuv422_to_yuv420p,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1460 },
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1461 [PIX_FMT_YUV422P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1462 .convert = yuv422_to_yuv422p,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1463 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1464 },
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1465
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1466 [PIX_FMT_RGB24] = {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1467 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1468 .convert = rgb24_to_yuv420p
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1469 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1470 [PIX_FMT_RGB565] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1471 .convert = rgb24_to_rgb565
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1472 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1473 [PIX_FMT_RGB555] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1474 .convert = rgb24_to_rgb555
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1475 },
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1476 [PIX_FMT_RGBA32] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1477 .convert = rgb24_to_rgba32
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1478 },
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1479 [PIX_FMT_BGR24] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1480 .convert = rgb24_to_bgr24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1481 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1482 [PIX_FMT_GRAY8] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1483 .convert = rgb24_to_gray
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1484 },
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1485 [PIX_FMT_PAL8] = {
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1486 .convert = rgb24_to_pal8
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1487 },
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1488 [PIX_FMT_YUV444P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1489 .convert = rgb24_to_yuv444p
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1490 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1491 [PIX_FMT_YUVJ420P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1492 .convert = rgb24_to_yuvj420p
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1493 },
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1494 [PIX_FMT_YUVJ444P] = {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1495 .convert = rgb24_to_yuvj444p
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1496 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1497 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1498 [PIX_FMT_RGBA32] = {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1499 [PIX_FMT_RGB24] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1500 .convert = rgba32_to_rgb24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1501 },
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1502 [PIX_FMT_RGB555] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1503 .convert = rgba32_to_rgb555
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1504 },
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1505 [PIX_FMT_PAL8] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1506 .convert = rgba32_to_pal8
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1507 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1508 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1509 .convert = rgba32_to_yuv420p
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1510 },
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1511 [PIX_FMT_GRAY8] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1512 .convert = rgba32_to_gray
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1513 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1514 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1515 [PIX_FMT_BGR24] = {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1516 [PIX_FMT_RGB24] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1517 .convert = bgr24_to_rgb24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1518 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1519 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1520 .convert = bgr24_to_yuv420p
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1521 },
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1522 [PIX_FMT_GRAY8] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1523 .convert = bgr24_to_gray
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1524 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1525 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1526 [PIX_FMT_RGB555] = {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1527 [PIX_FMT_RGB24] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1528 .convert = rgb555_to_rgb24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1529 },
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1530 [PIX_FMT_RGBA32] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1531 .convert = rgb555_to_rgba32
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1532 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1533 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1534 .convert = rgb555_to_yuv420p
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1535 },
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1536 [PIX_FMT_GRAY8] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1537 .convert = rgb555_to_gray
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1538 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1539 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1540 [PIX_FMT_RGB565] = {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1541 [PIX_FMT_RGB24] = {
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1542 .convert = rgb565_to_rgb24
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1543 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1544 [PIX_FMT_YUV420P] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1545 .convert = rgb565_to_yuv420p
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1546 },
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1547 [PIX_FMT_GRAY8] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1548 .convert = rgb565_to_gray
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1549 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1550 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1551 [PIX_FMT_GRAY8] = {
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1552 [PIX_FMT_RGB555] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1553 .convert = gray_to_rgb555
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1554 },
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1555 [PIX_FMT_RGB565] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1556 .convert = gray_to_rgb565
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1557 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1558 [PIX_FMT_RGB24] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1559 .convert = gray_to_rgb24
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1560 },
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1561 [PIX_FMT_BGR24] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1562 .convert = gray_to_bgr24
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1563 },
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1564 [PIX_FMT_RGBA32] = {
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1565 .convert = gray_to_rgba32
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1566 },
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1567 [PIX_FMT_MONOWHITE] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1568 .convert = gray_to_monowhite
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1569 },
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1570 [PIX_FMT_MONOBLACK] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1571 .convert = gray_to_monoblack
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1572 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1573 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1574 [PIX_FMT_MONOWHITE] = {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1575 [PIX_FMT_GRAY8] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1576 .convert = monowhite_to_gray
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1577 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1578 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1579 [PIX_FMT_MONOBLACK] = {
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1580 [PIX_FMT_GRAY8] = {
1014
48349e11c9b2 C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (Mns Rullgrd))
michaelni
parents: 993
diff changeset
1581 .convert = monoblack_to_gray
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1582 },
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1583 },
1055
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1584 [PIX_FMT_PAL8] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1585 [PIX_FMT_RGB555] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1586 .convert = pal8_to_rgb555
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1587 },
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1588 [PIX_FMT_RGB565] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1589 .convert = pal8_to_rgb565
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1590 },
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1591 [PIX_FMT_BGR24] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1592 .convert = pal8_to_bgr24
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1593 },
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1594 [PIX_FMT_RGB24] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1595 .convert = pal8_to_rgb24
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1596 },
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1597 [PIX_FMT_RGBA32] = {
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1598 .convert = pal8_to_rgba32
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1599 },
6261fdd1f69d added paletted 8 bit format support
bellard
parents: 1052
diff changeset
1600 },
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1601 };
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1602
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1603 static int avpicture_alloc(AVPicture *picture,
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1604 int pix_fmt, int width, int height)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1605 {
1057
bb5de8a59da8 * static,const,compiler warning cleanup
kabi
parents: 1055
diff changeset
1606 unsigned int size;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1607 void *ptr;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1608
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1609 size = avpicture_get_size(pix_fmt, width, height);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1610 ptr = av_malloc(size);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1611 if (!ptr)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1612 goto fail;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1613 avpicture_fill(picture, ptr, pix_fmt, width, height);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1614 return 0;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1615 fail:
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1616 memset(picture, 0, sizeof(AVPicture));
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1617 return -1;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1618 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1619
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1620 static void avpicture_free(AVPicture *picture)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1621 {
1031
19de1445beb2 use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents: 1028
diff changeset
1622 av_free(picture->data[0]);
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1623 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1624
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1625 /* return true if yuv planar */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1626 static inline int is_yuv_planar(PixFmtInfo *ps)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1627 {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1628 return (ps->color_type == FF_COLOR_YUV ||
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1629 ps->color_type == FF_COLOR_YUV_JPEG) &&
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1630 ps->pixel_type == FF_PIXEL_PLANAR;
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1631 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1632
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1633 /* XXX: always use linesize. Return -1 if not supported */
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1634 int img_convert(AVPicture *dst, int dst_pix_fmt,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1635 AVPicture *src, int src_pix_fmt,
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1636 int src_width, int src_height)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1637 {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1638 static int inited;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1639 int i, ret, dst_width, dst_height, int_pix_fmt;
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1640 PixFmtInfo *src_pix, *dst_pix;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1641 ConvertEntry *ce;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1642 AVPicture tmp1, *tmp = &tmp1;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1643
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1644 if (src_pix_fmt < 0 || src_pix_fmt >= PIX_FMT_NB ||
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1645 dst_pix_fmt < 0 || dst_pix_fmt >= PIX_FMT_NB)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1646 return -1;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1647 if (src_width <= 0 || src_height <= 0)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1648 return 0;
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1649
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1650 if (!inited) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1651 inited = 1;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1652 img_convert_init();
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1653 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1654
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1655 dst_width = src_width;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1656 dst_height = src_height;
1022
d651df667898 added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents: 1020
diff changeset
1657
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1658 dst_pix = &pix_fmt_info[dst_pix_fmt];
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1659 src_pix = &pix_fmt_info[src_pix_fmt];
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1660 if (src_pix_fmt == dst_pix_fmt) {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1661 /* no conversion needed: just copy */
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1662 img_copy(dst, src, dst_pix_fmt, dst_width, dst_height);
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1663 return 0;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1664 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1665
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1666 ce = &convert_table[src_pix_fmt][dst_pix_fmt];
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1667 if (ce->convert) {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1668 /* specific convertion routine */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1669 ce->convert(dst, src, dst_width, dst_height);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1670 return 0;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1671 }
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1672
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1673 /* gray to YUV */
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1674 if (is_yuv_planar(dst_pix) &&
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1675 src_pix_fmt == PIX_FMT_GRAY8) {
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1676 int w, h, y;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1677 uint8_t *d;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1678
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1679 if (dst_pix->color_type == FF_COLOR_YUV_JPEG) {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1680 img_copy_plane(dst->data[0], dst->linesize[0],
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1681 src->data[0], src->linesize[0],
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1682 dst_width, dst_height);
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1683 } else {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1684 img_apply_table(dst->data[0], dst->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1685 src->data[0], src->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1686 dst_width, dst_height,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1687 y_jpeg_to_ccir);
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1688 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1689 /* fill U and V with 128 */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1690 w = dst_width;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1691 h = dst_height;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1692 w >>= dst_pix->x_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1693 h >>= dst_pix->y_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1694 for(i = 1; i <= 2; i++) {
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1695 d = dst->data[i];
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1696 for(y = 0; y< h; y++) {
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1697 memset(d, 128, w);
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1698 d += dst->linesize[i];
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1699 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1700 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1701 return 0;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1702 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1703
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1704 /* YUV to gray */
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1705 if (is_yuv_planar(src_pix) &&
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1706 dst_pix_fmt == PIX_FMT_GRAY8) {
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1707 if (src_pix->color_type == FF_COLOR_YUV_JPEG) {
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1708 img_copy_plane(dst->data[0], dst->linesize[0],
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1709 src->data[0], src->linesize[0],
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1710 dst_width, dst_height);
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1711 } else {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1712 img_apply_table(dst->data[0], dst->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1713 src->data[0], src->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1714 dst_width, dst_height,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1715 y_ccir_to_jpeg);
1202
8b49a7ee4e4e YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents: 1199
diff changeset
1716 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1717 return 0;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1718 }
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1719
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1720 /* YUV to YUV planar */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1721 if (is_yuv_planar(dst_pix) && is_yuv_planar(src_pix)) {
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1722 int x_shift, y_shift, w, h, xy_shift;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1723 void (*resize_func)(uint8_t *dst, int dst_wrap,
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1724 const uint8_t *src, int src_wrap,
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1725 int width, int height);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1726
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1727 /* compute chroma size of the smallest dimensions */
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1728 w = dst_width;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1729 h = dst_height;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1730 if (dst_pix->x_chroma_shift >= src_pix->x_chroma_shift)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1731 w >>= dst_pix->x_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1732 else
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1733 w >>= src_pix->x_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1734 if (dst_pix->y_chroma_shift >= src_pix->y_chroma_shift)
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1735 h >>= dst_pix->y_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1736 else
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1737 h >>= src_pix->y_chroma_shift;
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1738
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1739 x_shift = (dst_pix->x_chroma_shift - src_pix->x_chroma_shift);
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1740 y_shift = (dst_pix->y_chroma_shift - src_pix->y_chroma_shift);
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1741 xy_shift = ((x_shift & 0xf) << 4) | (y_shift & 0xf);
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1742 /* there must be filters for conversion at least from and to
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1743 YUV444 format */
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1744 switch(xy_shift) {
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1745 case 0x00:
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1746 resize_func = img_copy_plane;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1747 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1748 case 0x10:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1749 resize_func = shrink21;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1750 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1751 case 0x20:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1752 resize_func = shrink41;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1753 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1754 case 0x01:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1755 resize_func = shrink12;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1756 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1757 case 0x11:
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1758 resize_func = shrink22;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1759 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1760 case 0x22:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1761 resize_func = shrink44;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1762 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1763 case 0xf0:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1764 resize_func = grow21;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1765 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1766 case 0xe0:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1767 resize_func = grow41;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1768 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1769 case 0xff:
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1770 resize_func = grow22;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1771 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1772 case 0xee:
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1773 resize_func = grow44;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1774 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1775 case 0xf1:
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1776 resize_func = conv411;
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1777 break;
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1778 default:
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1779 /* currently not handled */
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1780 goto no_chroma_filter;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1781 }
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1782
1204
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1783 img_copy_plane(dst->data[0], dst->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1784 src->data[0], src->linesize[0],
e55580ae9969 almost exhaustive image conversion support
bellard
parents: 1203
diff changeset
1785 dst_width, dst_height);
1023
e61be5796027 img_convert() (YUV to YUV) patch by (Max Krasnyansky <maxk at qualcomm dot com>)
michaelni
parents: 1022
diff changeset
1786
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1787 for(i = 1;i <= 2; i++)
1023
e61be5796027 img_convert() (YUV to YUV) patch by (Max Krasnyansky <maxk at qualcomm dot com>)
michaelni
parents: 1022
diff changeset
1788 resize_func(dst->data[i], dst->linesize[i],
e61be5796027 img_convert() (YUV to YUV) patch by (Max Krasnyansky <maxk at qualcomm dot com>)
michaelni
parents: 1022
diff changeset
1789 src->data[i], src->linesize[i],
1073
4bc02fcf4d8c fixing 410 -> 420
michaelni
parents: 1064
diff changeset
1790 dst_width>>dst_pix->x_chroma_shift, dst_height>>dst_pix->y_chroma_shift);
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1791 /* if yuv color space conversion is needed, we do it here on
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1792 the destination image */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1793 if (dst_pix->color_type != src_pix->color_type) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1794 const uint8_t *y_table, *c_table;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1795 if (dst_pix->color_type == FF_COLOR_YUV) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1796 y_table = y_jpeg_to_ccir;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1797 c_table = c_jpeg_to_ccir;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1798 } else {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1799 y_table = y_ccir_to_jpeg;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1800 c_table = c_ccir_to_jpeg;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1801 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1802 img_apply_table(dst->data[0], dst->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1803 dst->data[0], dst->linesize[0],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1804 dst_width, dst_height,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1805 y_table);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1806
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1807 for(i = 1;i <= 2; i++)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1808 img_apply_table(dst->data[i], dst->linesize[i],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1809 dst->data[i], dst->linesize[i],
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1810 dst_width>>dst_pix->x_chroma_shift,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1811 dst_height>>dst_pix->y_chroma_shift,
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1812 c_table);
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1813 }
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1814 return 0;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1815 }
1205
c2672cdf2d2a added all missing UV conversions
bellard
parents: 1204
diff changeset
1816 no_chroma_filter:
989
fe9083c56733 simplified code (need automatic testing) - added primitive new format support.
bellard
parents: 940
diff changeset
1817
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1818 /* try to use an intermediate format */
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1819 if (src_pix_fmt == PIX_FMT_YUV422 ||
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1820 dst_pix_fmt == PIX_FMT_YUV422) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1821 /* specific case: convert to YUV422P first */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1822 int_pix_fmt = PIX_FMT_YUV422P;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1823 } else if ((src_pix->color_type == FF_COLOR_GRAY &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1824 src_pix_fmt != PIX_FMT_GRAY8) ||
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1825 (dst_pix->color_type == FF_COLOR_GRAY &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1826 dst_pix_fmt != PIX_FMT_GRAY8)) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1827 /* gray8 is the normalized format */
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1828 int_pix_fmt = PIX_FMT_GRAY8;
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1829 } else if ((is_yuv_planar(src_pix) &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1830 src_pix_fmt != PIX_FMT_YUV444P &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1831 src_pix_fmt != PIX_FMT_YUVJ444P)) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1832 /* yuv444 is the normalized format */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1833 if (src_pix->color_type == FF_COLOR_YUV_JPEG)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1834 int_pix_fmt = PIX_FMT_YUVJ444P;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1835 else
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1836 int_pix_fmt = PIX_FMT_YUV444P;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1837 } else if ((is_yuv_planar(dst_pix) &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1838 dst_pix_fmt != PIX_FMT_YUV444P &&
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1839 dst_pix_fmt != PIX_FMT_YUVJ444P)) {
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1840 /* yuv444 is the normalized format */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1841 if (dst_pix->color_type == FF_COLOR_YUV_JPEG)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1842 int_pix_fmt = PIX_FMT_YUVJ444P;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1843 else
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1844 int_pix_fmt = PIX_FMT_YUV444P;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1845 } else {
1203
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1846 /* the two formats are rgb or gray8 or yuv[j]444p */
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1847 if (src_pix->is_alpha && dst_pix->is_alpha)
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1848 int_pix_fmt = PIX_FMT_RGBA32;
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1849 else
80c73b9b0ba2 accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents: 1202
diff changeset
1850 int_pix_fmt = PIX_FMT_RGB24;
993
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1851 }
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1852 if (avpicture_alloc(tmp, int_pix_fmt, dst_width, dst_height) < 0)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1853 return -1;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1854 ret = -1;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1855 if (img_convert(tmp, int_pix_fmt,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1856 src, src_pix_fmt, src_width, src_height) < 0)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1857 goto fail1;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1858 if (img_convert(dst, dst_pix_fmt,
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1859 tmp, int_pix_fmt, dst_width, dst_height) < 0)
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1860 goto fail1;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1861 ret = 0;
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1862 fail1:
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1863 avpicture_free(tmp);
895d3b01c6f4 added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents: 989
diff changeset
1864 return ret;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1865 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1866
1208
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1867 /* NOTE: we scan all the pixels to have an exact information */
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1868 static int get_alpha_info_pal8(AVPicture *src, int width, int height)
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1869 {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1870 const unsigned char *p;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1871 int src_wrap, ret, x, y;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1872 unsigned int a;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1873 uint32_t *palette = (uint32_t *)src->data[1];
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1874
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1875 p = src->data[0];
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1876 src_wrap = src->linesize[0] - width;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1877 ret = 0;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1878 for(y=0;y<height;y++) {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1879 for(x=0;x<width;x++) {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1880 a = palette[p[0]] >> 24;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1881 if (a == 0x00) {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1882 ret |= FF_ALPHA_TRANSP;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1883 } else if (a != 0xff) {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1884 ret |= FF_ALPHA_SEMI_TRANSP;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1885 }
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1886 p++;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1887 }
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1888 p += src_wrap;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1889 }
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1890 return ret;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1891 }
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1892
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1893 /**
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1894 * Tell if an image really has transparent alpha values.
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1895 * @return ored mask of FF_ALPHA_xxx constants
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1896 */
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1897 int img_get_alpha_info(AVPicture *src, int pix_fmt, int width, int height)
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1898 {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1899 PixFmtInfo *pf = &pix_fmt_info[pix_fmt];
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1900 int ret;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1901
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1902 pf = &pix_fmt_info[pix_fmt];
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1903 /* no alpha can be represented in format */
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1904 if (!pf->is_alpha)
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1905 return 0;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1906 switch(pix_fmt) {
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1907 case PIX_FMT_RGBA32:
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1908 ret = get_alpha_info_rgba32(src, width, height);
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1909 break;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1910 case PIX_FMT_RGB555:
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1911 ret = get_alpha_info_rgb555(src, width, height);
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1912 break;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1913 case PIX_FMT_PAL8:
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1914 ret = get_alpha_info_pal8(src, width, height);
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1915 break;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1916 default:
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1917 /* we do not know, so everything is indicated */
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1918 ret = FF_ALPHA_TRANSP | FF_ALPHA_SEMI_TRANSP;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1919 break;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1920 }
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1921 return ret;
0f37976aa436 added img_get_alpha_info()
bellard
parents: 1207
diff changeset
1922 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1923
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1924 #ifdef HAVE_MMX
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1925 #define DEINT_INPLACE_LINE_LUM \
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1926 movd_m2r(lum_m4[0],mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1927 movd_m2r(lum_m3[0],mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1928 movd_m2r(lum_m2[0],mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1929 movd_m2r(lum_m1[0],mm3);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1930 movd_m2r(lum[0],mm4);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1931 punpcklbw_r2r(mm7,mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1932 movd_r2m(mm2,lum_m4[0]);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1933 punpcklbw_r2r(mm7,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1934 punpcklbw_r2r(mm7,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1935 punpcklbw_r2r(mm7,mm3);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1936 punpcklbw_r2r(mm7,mm4);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1937 paddw_r2r(mm3,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1938 psllw_i2r(1,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1939 paddw_r2r(mm4,mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1940 psllw_i2r(2,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1941 paddw_r2r(mm6,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1942 paddw_r2r(mm2,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1943 psubusw_r2r(mm0,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1944 psrlw_i2r(3,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1945 packuswb_r2r(mm7,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1946 movd_r2m(mm1,lum_m2[0]);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1947
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1948 #define DEINT_LINE_LUM \
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1949 movd_m2r(lum_m4[0],mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1950 movd_m2r(lum_m3[0],mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1951 movd_m2r(lum_m2[0],mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1952 movd_m2r(lum_m1[0],mm3);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1953 movd_m2r(lum[0],mm4);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1954 punpcklbw_r2r(mm7,mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1955 punpcklbw_r2r(mm7,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1956 punpcklbw_r2r(mm7,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1957 punpcklbw_r2r(mm7,mm3);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1958 punpcklbw_r2r(mm7,mm4);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1959 paddw_r2r(mm3,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1960 psllw_i2r(1,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1961 paddw_r2r(mm4,mm0);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1962 psllw_i2r(2,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1963 paddw_r2r(mm6,mm2);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1964 paddw_r2r(mm2,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1965 psubusw_r2r(mm0,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1966 psrlw_i2r(3,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1967 packuswb_r2r(mm7,mm1);\
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1968 movd_r2m(mm1,dst[0]);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1969 #endif
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1970
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1971 /* filter parameters: [-1 4 2 4 -1] // 8 */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1972 static void deinterlace_line(uint8_t *dst, uint8_t *lum_m4, uint8_t *lum_m3, uint8_t *lum_m2, uint8_t *lum_m1, uint8_t *lum,
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1973 int size)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1974 {
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1975 #ifndef HAVE_MMX
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
1976 uint8_t *cm = cropTbl + MAX_NEG_CROP;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1977 int sum;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1978
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1979 for(;size > 0;size--) {
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1980 sum = -lum_m4[0];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1981 sum += lum_m3[0] << 2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1982 sum += lum_m2[0] << 1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1983 sum += lum_m1[0] << 2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1984 sum += -lum[0];
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1985 dst[0] = cm[(sum + 4) >> 3];
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1986 lum_m4++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1987 lum_m3++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1988 lum_m2++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1989 lum_m1++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1990 lum++;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
1991 dst++;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1992 }
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1993 #else
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
1994
1044
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
1995 {
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
1996 mmx_t rounder;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
1997 rounder.uw[0]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
1998 rounder.uw[1]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
1999 rounder.uw[2]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2000 rounder.uw[3]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2001 pxor_r2r(mm7,mm7);
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2002 movq_m2r(rounder,mm6);
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2003 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2004 for (;size > 3; size-=4) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2005 DEINT_LINE_LUM
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2006 lum_m4+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2007 lum_m3+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2008 lum_m2+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2009 lum_m1+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2010 lum+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2011 dst+=4;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2012 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2013 #endif
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2014 }
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2015 static void deinterlace_line_inplace(uint8_t *lum_m4, uint8_t *lum_m3, uint8_t *lum_m2, uint8_t *lum_m1, uint8_t *lum,
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2016 int size)
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2017 {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2018 #ifndef HAVE_MMX
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2019 uint8_t *cm = cropTbl + MAX_NEG_CROP;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2020 int sum;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2021
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2022 for(;size > 0;size--) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2023 sum = -lum_m4[0];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2024 sum += lum_m3[0] << 2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2025 sum += lum_m2[0] << 1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2026 lum_m4[0]=lum_m2[0];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2027 sum += lum_m1[0] << 2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2028 sum += -lum[0];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2029 lum_m2[0] = cm[(sum + 4) >> 3];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2030 lum_m4++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2031 lum_m3++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2032 lum_m2++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2033 lum_m1++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2034 lum++;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2035 }
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2036 #else
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2037
1044
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2038 {
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2039 mmx_t rounder;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2040 rounder.uw[0]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2041 rounder.uw[1]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2042 rounder.uw[2]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2043 rounder.uw[3]=4;
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2044 pxor_r2r(mm7,mm7);
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2045 movq_m2r(rounder,mm6);
c6b3af81d79e 100000l
michaelni
parents: 1031
diff changeset
2046 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2047 for (;size > 3; size-=4) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2048 DEINT_INPLACE_LINE_LUM
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2049 lum_m4+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2050 lum_m3+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2051 lum_m2+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2052 lum_m1+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2053 lum+=4;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2054 }
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2055 #endif
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2056 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2057
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2058 /* deinterlacing : 2 temporal taps, 3 spatial taps linear filter. The
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2059 top field is copied as is, but the bottom field is deinterlaced
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2060 against the top field. */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2061 static void deinterlace_bottom_field(uint8_t *dst, int dst_wrap,
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2062 uint8_t *src1, int src_wrap,
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2063 int width, int height)
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2064 {
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2065 uint8_t *src_m2, *src_m1, *src_0, *src_p1, *src_p2;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2066 int y;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2067
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2068 src_m2 = src1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2069 src_m1 = src1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2070 src_0=&src_m1[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2071 src_p1=&src_0[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2072 src_p2=&src_p1[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2073 for(y=0;y<(height-2);y+=2) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2074 memcpy(dst,src_m1,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2075 dst += dst_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2076 deinterlace_line(dst,src_m2,src_m1,src_0,src_p1,src_p2,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2077 src_m2 = src_0;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2078 src_m1 = src_p1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2079 src_0 = src_p2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2080 src_p1 += 2*src_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2081 src_p2 += 2*src_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2082 dst += dst_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2083 }
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2084 memcpy(dst,src_m1,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2085 dst += dst_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2086 /* do last line */
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2087 deinterlace_line(dst,src_m2,src_m1,src_0,src_0,src_0,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2088 }
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2089
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2090 static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap,
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2091 int width, int height)
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2092 {
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2093 uint8_t *src_m1, *src_0, *src_p1, *src_p2;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2094 int y;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2095 uint8_t *buf;
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1057
diff changeset
2096 buf = (uint8_t*)av_malloc(width);
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2097
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2098 src_m1 = src1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2099 memcpy(buf,src_m1,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2100 src_0=&src_m1[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2101 src_p1=&src_0[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2102 src_p2=&src_p1[src_wrap];
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2103 for(y=0;y<(height-2);y+=2) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2104 deinterlace_line_inplace(buf,src_m1,src_0,src_p1,src_p2,width);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2105 src_m1 = src_p1;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2106 src_0 = src_p2;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2107 src_p1 += 2*src_wrap;
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2108 src_p2 += 2*src_wrap;
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2109 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2110 /* do last line */
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2111 deinterlace_line_inplace(buf,src_m1,src_0,src_0,src_0,width);
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 315
diff changeset
2112 av_free(buf);
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2113 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2114
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2115
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2116 /* deinterlace - if not supported return -1 */
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2117 int avpicture_deinterlace(AVPicture *dst, AVPicture *src,
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2118 int pix_fmt, int width, int height)
986e461dc072 Initial revision
glantau
parents:
diff changeset
2119 {
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2120 int i;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2121
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2122 if (pix_fmt != PIX_FMT_YUV420P &&
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2123 pix_fmt != PIX_FMT_YUV422P &&
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2124 pix_fmt != PIX_FMT_YUV444P)
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2125 return -1;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2126 if ((width & 3) != 0 || (height & 3) != 0)
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2127 return -1;
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2128
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2129 for(i=0;i<3;i++) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2130 if (i == 1) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2131 switch(pix_fmt) {
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2132 case PIX_FMT_YUV420P:
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2133 width >>= 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2134 height >>= 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2135 break;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2136 case PIX_FMT_YUV422P:
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2137 width >>= 1;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2138 break;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2139 default:
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2140 break;
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2141 }
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2142 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2143 if (src == dst) {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2144 deinterlace_bottom_field_inplace(src->data[i], src->linesize[i],
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2145 width, height);
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2146 } else {
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2147 deinterlace_bottom_field(dst->data[i],dst->linesize[i],
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2148 src->data[i], src->linesize[i],
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2149 width, height);
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2150 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2151 }
801
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2152 #ifdef HAVE_MMX
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2153 emms();
f720b01c0fd5 1) Add MMX deinterlace code.
michaelni
parents: 736
diff changeset
2154 #endif
52
1d796bdb2c2a added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents: 18
diff changeset
2155 return 0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
2156 }
440
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
2157
000aeeac27a2 * started to cleanup name clashes for onetime compilation
kabi
parents: 429
diff changeset
2158 #undef FIX