Mercurial > libavcodec.hg
annotate imgconvert.c @ 6357:3f86370d3f63 libavcodec
My commit in r11942 broke compilation.
This fixes it.
| author | vitor |
|---|---|
| date | Fri, 15 Feb 2008 19:47:14 +0000 |
| parents | afa99894d8d9 |
| children | 6aa3024c07c5 |
| rev | line source |
|---|---|
| 0 | 1 /* |
| 5355 | 2 * Misc image conversion 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 | 4 * |
|
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
5 * This file is part of FFmpeg. |
|
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
6 * |
|
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
| 429 | 8 * modify it under the terms of the GNU Lesser General Public |
| 9 * License as published by the Free Software Foundation; either | |
|
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
| 0 | 11 * |
|
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
| 0 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 429 | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 * Lesser General Public License for more details. | |
| 0 | 16 * |
| 429 | 17 * You should have received a copy of the GNU Lesser General Public |
|
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3646
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
|
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 0 | 20 */ |
| 1106 | 21 |
| 22 /** | |
| 1108 | 23 * @file imgconvert.c |
| 5355 | 24 * misc image conversion routines |
| 1106 | 25 */ |
| 26 | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
27 /* TODO: |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
28 * - 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
|
29 * - move all api to slice based system |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
30 * - 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
|
31 */ |
| 1106 | 32 |
| 0 | 33 #include "avcodec.h" |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
34 #include "dsputil.h" |
| 5354 | 35 #include "colorspace.h" |
| 0 | 36 |
| 801 | 37 #ifdef HAVE_MMX |
| 38 #include "i386/mmx.h" | |
| 39 #endif | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
40 |
| 1204 | 41 #define xglue(x, y) x ## y |
| 42 #define glue(x, y) xglue(x, y) | |
| 43 | |
| 4549 | 44 #define FF_COLOR_RGB 0 /**< RGB color space */ |
| 45 #define FF_COLOR_GRAY 1 /**< gray color space */ | |
| 46 #define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */ | |
| 47 #define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */ | |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
48 |
| 4549 | 49 #define FF_PIXEL_PLANAR 0 /**< each channel has one component in AVPicture */ |
| 50 #define FF_PIXEL_PACKED 1 /**< only one components containing all the channels */ | |
| 51 #define FF_PIXEL_PALETTE 2 /**< one components containing indexes for a palette */ | |
| 1204 | 52 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
53 typedef struct PixFmtInfo { |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
54 const char *name; |
| 4549 | 55 uint8_t nb_channels; /**< number of channels (including alpha) */ |
| 56 uint8_t color_type; /**< color type (see FF_COLOR_xxx constants) */ | |
| 57 uint8_t pixel_type; /**< pixel storage type (see FF_PIXEL_xxx constants) */ | |
| 58 uint8_t is_alpha : 1; /**< true if alpha can be specified */ | |
| 59 uint8_t x_chroma_shift; /**< X chroma subsampling factor is 2 ^ shift */ | |
| 60 uint8_t y_chroma_shift; /**< Y chroma subsampling factor is 2 ^ shift */ | |
| 61 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
|
62 } PixFmtInfo; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
63 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
64 /* this table gives more information about formats */ |
| 3420 | 65 static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = { |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
66 /* YUV formats */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
67 [PIX_FMT_YUV420P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
68 .name = "yuv420p", |
| 1204 | 69 .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
|
70 .color_type = FF_COLOR_YUV, |
| 1204 | 71 .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
|
72 .depth = 8, |
| 2967 | 73 .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
|
74 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
75 [PIX_FMT_YUV422P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
76 .name = "yuv422p", |
| 1204 | 77 .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
|
78 .color_type = FF_COLOR_YUV, |
| 1204 | 79 .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
|
80 .depth = 8, |
| 2967 | 81 .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
|
82 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
83 [PIX_FMT_YUV444P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
84 .name = "yuv444p", |
| 1204 | 85 .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
|
86 .color_type = FF_COLOR_YUV, |
| 1204 | 87 .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
|
88 .depth = 8, |
| 2967 | 89 .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
|
90 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
91 [PIX_FMT_YUYV422] = { |
|
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
92 .name = "yuyv422", |
| 1204 | 93 .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
|
94 .color_type = FF_COLOR_YUV, |
| 1204 | 95 .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
|
96 .depth = 8, |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
97 .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
|
98 }, |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
99 [PIX_FMT_UYVY422] = { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
100 .name = "uyvy422", |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
101 .nb_channels = 1, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
102 .color_type = FF_COLOR_YUV, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
103 .pixel_type = FF_PIXEL_PACKED, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
104 .depth = 8, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
105 .x_chroma_shift = 1, .y_chroma_shift = 0, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
106 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
107 [PIX_FMT_YUV410P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
108 .name = "yuv410p", |
| 1204 | 109 .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
|
110 .color_type = FF_COLOR_YUV, |
| 1204 | 111 .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
|
112 .depth = 8, |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
113 .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
|
114 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
115 [PIX_FMT_YUV411P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
116 .name = "yuv411p", |
| 1204 | 117 .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
|
118 .color_type = FF_COLOR_YUV, |
| 1204 | 119 .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
|
120 .depth = 8, |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
121 .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
|
122 }, |
| 5363 | 123 [PIX_FMT_YUV440P] = { |
| 124 .name = "yuv440p", | |
| 125 .nb_channels = 3, | |
| 126 .color_type = FF_COLOR_YUV, | |
| 127 .pixel_type = FF_PIXEL_PLANAR, | |
| 128 .depth = 8, | |
| 129 .x_chroma_shift = 0, .y_chroma_shift = 1, | |
| 130 }, | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
131 |
|
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
132 /* YUV formats with alpha plane */ |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
133 [PIX_FMT_YUVA420P] = { |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
134 .name = "yuva420p", |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
135 .nb_channels = 4, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
136 .color_type = FF_COLOR_YUV, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
137 .pixel_type = FF_PIXEL_PLANAR, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
138 .depth = 8, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
139 .x_chroma_shift = 1, .y_chroma_shift = 1, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
140 }, |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
141 |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
142 /* JPEG YUV */ |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
143 [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
|
144 .name = "yuvj420p", |
| 1204 | 145 .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
|
146 .color_type = FF_COLOR_YUV_JPEG, |
| 1204 | 147 .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
|
148 .depth = 8, |
| 2967 | 149 .x_chroma_shift = 1, .y_chroma_shift = 1, |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
150 }, |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
151 [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
|
152 .name = "yuvj422p", |
| 1204 | 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_YUV_JPEG, |
| 1204 | 155 .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
|
156 .depth = 8, |
| 2967 | 157 .x_chroma_shift = 1, .y_chroma_shift = 0, |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
158 }, |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
159 [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
|
160 .name = "yuvj444p", |
| 1204 | 161 .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
|
162 .color_type = FF_COLOR_YUV_JPEG, |
| 1204 | 163 .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
|
164 .depth = 8, |
| 2967 | 165 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
166 }, |
| 5363 | 167 [PIX_FMT_YUVJ440P] = { |
| 168 .name = "yuvj440p", | |
| 169 .nb_channels = 3, | |
| 170 .color_type = FF_COLOR_YUV_JPEG, | |
| 171 .pixel_type = FF_PIXEL_PLANAR, | |
| 172 .depth = 8, | |
| 173 .x_chroma_shift = 0, .y_chroma_shift = 1, | |
| 174 }, | |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
175 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
176 /* RGB formats */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
177 [PIX_FMT_RGB24] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
178 .name = "rgb24", |
| 1204 | 179 .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
|
180 .color_type = FF_COLOR_RGB, |
| 1204 | 181 .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
|
182 .depth = 8, |
| 1593 | 183 .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
|
184 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
185 [PIX_FMT_BGR24] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
186 .name = "bgr24", |
| 1204 | 187 .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
|
188 .color_type = FF_COLOR_RGB, |
| 1204 | 189 .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
|
190 .depth = 8, |
| 1593 | 191 .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
|
192 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
193 [PIX_FMT_RGB32] = { |
|
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
194 .name = "rgb32", |
| 1204 | 195 .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
|
196 .color_type = FF_COLOR_RGB, |
| 1204 | 197 .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
|
198 .depth = 8, |
| 1593 | 199 .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
|
200 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
201 [PIX_FMT_RGB565] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
202 .name = "rgb565", |
| 1204 | 203 .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
|
204 .color_type = FF_COLOR_RGB, |
| 1204 | 205 .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
|
206 .depth = 5, |
| 1593 | 207 .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
|
208 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
209 [PIX_FMT_RGB555] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
210 .name = "rgb555", |
| 4208 | 211 .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
|
212 .color_type = FF_COLOR_RGB, |
| 1204 | 213 .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
|
214 .depth = 5, |
| 1593 | 215 .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
|
216 }, |
|
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 /* gray / mono formats */ |
| 4066 | 219 [PIX_FMT_GRAY16BE] = { |
| 220 .name = "gray16be", | |
| 221 .nb_channels = 1, | |
| 222 .color_type = FF_COLOR_GRAY, | |
| 223 .pixel_type = FF_PIXEL_PLANAR, | |
| 224 .depth = 16, | |
| 225 }, | |
| 226 [PIX_FMT_GRAY16LE] = { | |
| 227 .name = "gray16le", | |
| 228 .nb_channels = 1, | |
| 229 .color_type = FF_COLOR_GRAY, | |
| 230 .pixel_type = FF_PIXEL_PLANAR, | |
| 231 .depth = 16, | |
| 232 }, | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
233 [PIX_FMT_GRAY8] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
234 .name = "gray", |
| 1204 | 235 .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
|
236 .color_type = FF_COLOR_GRAY, |
| 1204 | 237 .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
|
238 .depth = 8, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
239 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
240 [PIX_FMT_MONOWHITE] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
241 .name = "monow", |
| 1204 | 242 .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
|
243 .color_type = FF_COLOR_GRAY, |
| 1204 | 244 .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
|
245 .depth = 1, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
246 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
247 [PIX_FMT_MONOBLACK] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
248 .name = "monob", |
| 1204 | 249 .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
|
250 .color_type = FF_COLOR_GRAY, |
| 1204 | 251 .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
|
252 .depth = 1, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
253 }, |
| 1055 | 254 |
| 255 /* paletted formats */ | |
| 256 [PIX_FMT_PAL8] = { | |
| 257 .name = "pal8", | |
| 1204 | 258 .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
|
259 .color_type = FF_COLOR_RGB, |
| 1204 | 260 .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
|
261 .depth = 8, |
| 1055 | 262 }, |
|
2179
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
263 [PIX_FMT_XVMC_MPEG2_MC] = { |
|
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
264 .name = "xvmcmc", |
|
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
265 }, |
|
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
266 [PIX_FMT_XVMC_MPEG2_IDCT] = { |
|
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
267 .name = "xvmcidct", |
|
34eaf41657d5
enrtries for PIX_FMT_XVMC_MPEG2_MC and PIX_FMT_XVMC_MPEG2_IDCT patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2137
diff
changeset
|
268 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
269 [PIX_FMT_UYYVYY411] = { |
|
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
270 .name = "uyyvyy411", |
| 2309 | 271 .nb_channels = 1, |
| 272 .color_type = FF_COLOR_YUV, | |
| 273 .pixel_type = FF_PIXEL_PACKED, | |
| 274 .depth = 8, | |
| 275 .x_chroma_shift = 2, .y_chroma_shift = 0, | |
| 276 }, | |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
277 [PIX_FMT_BGR32] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
278 .name = "bgr32", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
279 .nb_channels = 4, .is_alpha = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
280 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
281 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
282 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
283 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
284 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
285 [PIX_FMT_BGR565] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
286 .name = "bgr565", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
287 .nb_channels = 3, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
288 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
289 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
290 .depth = 5, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
291 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
292 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
293 [PIX_FMT_BGR555] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
294 .name = "bgr555", |
|
4207
bc9de4875ebd
BGR555 has never been working as alpha supporting format. Remove the false setting.
alex
parents:
4201
diff
changeset
|
295 .nb_channels = 3, |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
296 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
297 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
298 .depth = 5, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
299 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
300 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
301 [PIX_FMT_RGB8] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
302 .name = "rgb8", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
303 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
304 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
305 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
306 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
307 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
308 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
309 [PIX_FMT_RGB4] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
310 .name = "rgb4", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
311 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
312 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
313 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
314 .depth = 4, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
315 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
316 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
317 [PIX_FMT_RGB4_BYTE] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
318 .name = "rgb4_byte", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
319 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
320 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
321 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
322 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
323 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
324 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
325 [PIX_FMT_BGR8] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
326 .name = "bgr8", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
327 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
328 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
329 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
330 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
331 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
332 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
333 [PIX_FMT_BGR4] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
334 .name = "bgr4", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
335 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
336 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
337 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
338 .depth = 4, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
339 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
340 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
341 [PIX_FMT_BGR4_BYTE] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
342 .name = "bgr4_byte", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
343 .nb_channels = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
344 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
345 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
346 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
347 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
348 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
349 [PIX_FMT_NV12] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
350 .name = "nv12", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
351 .nb_channels = 2, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
352 .color_type = FF_COLOR_YUV, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
353 .pixel_type = FF_PIXEL_PLANAR, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
354 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
355 .x_chroma_shift = 1, .y_chroma_shift = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
356 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
357 [PIX_FMT_NV21] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
358 .name = "nv12", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
359 .nb_channels = 2, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
360 .color_type = FF_COLOR_YUV, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
361 .pixel_type = FF_PIXEL_PLANAR, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
362 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
363 .x_chroma_shift = 1, .y_chroma_shift = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
364 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
365 |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
366 [PIX_FMT_BGR32_1] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
367 .name = "bgr32_1", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
368 .nb_channels = 4, .is_alpha = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
369 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
370 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
371 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
372 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
373 }, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
374 [PIX_FMT_RGB32_1] = { |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
375 .name = "rgb32_1", |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
376 .nb_channels = 4, .is_alpha = 1, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
377 .color_type = FF_COLOR_RGB, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
378 .pixel_type = FF_PIXEL_PACKED, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
379 .depth = 8, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
380 .x_chroma_shift = 0, .y_chroma_shift = 0, |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
381 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
382 }; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
383 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
384 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
|
385 { |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
386 *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
|
387 *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
|
388 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
389 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
390 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
|
391 { |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
392 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
|
393 return "???"; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
394 else |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
395 return pix_fmt_info[pix_fmt].name; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
396 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
397 |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
398 enum PixelFormat avcodec_get_pix_fmt(const char* name) |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
399 { |
| 2967 | 400 int i; |
| 401 | |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
402 for (i=0; i < PIX_FMT_NB; i++) |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
403 if (!strcmp(pix_fmt_info[i].name, name)) |
| 2979 | 404 break; |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
405 return i; |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
406 } |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
407 |
|
5084
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
408 void avcodec_pix_fmt_string (char *buf, int buf_size, int pix_fmt) |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
409 { |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
410 PixFmtInfo info= pix_fmt_info[pix_fmt]; |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
411 |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
412 char is_alpha_char= info.is_alpha ? 'y' : 'n'; |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
413 |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
414 /* print header */ |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
415 if (pix_fmt < 0) |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
416 snprintf (buf, buf_size, |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
417 "name " " nb_channels" " depth" " is_alpha" |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
418 ); |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
419 else |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
420 snprintf (buf, buf_size, |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
421 "%-10s" " %1d " " %2d " " %c ", |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
422 info.name, |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
423 info.nb_channels, |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
424 info.depth, |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
425 is_alpha_char |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
426 ); |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
427 } |
|
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
428 |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
429 int ff_fill_linesize(AVPicture *picture, int pix_fmt, int width) |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
430 { |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
431 int w2; |
| 3420 | 432 const PixFmtInfo *pinfo; |
| 2967 | 433 |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
434 memset(picture->linesize, 0, sizeof(picture->linesize)); |
| 2422 | 435 |
|
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
436 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
|
437 switch(pix_fmt) { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
438 case PIX_FMT_YUV420P: |
|
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
439 case PIX_FMT_YUV422P: |
|
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
440 case PIX_FMT_YUV444P: |
|
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
441 case PIX_FMT_YUV410P: |
|
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
442 case PIX_FMT_YUV411P: |
| 5363 | 443 case PIX_FMT_YUV440P: |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
444 case PIX_FMT_YUVJ420P: |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
445 case PIX_FMT_YUVJ422P: |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
446 case PIX_FMT_YUVJ444P: |
| 5363 | 447 case PIX_FMT_YUVJ440P: |
|
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
448 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
449 picture->linesize[0] = width; |
|
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
450 picture->linesize[1] = w2; |
|
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
451 picture->linesize[2] = w2; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
452 break; |
|
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
453 case PIX_FMT_YUVA420P: |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
454 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
455 picture->linesize[0] = width; |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
456 picture->linesize[1] = w2; |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
457 picture->linesize[2] = w2; |
|
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
458 picture->linesize[3] = width; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
459 break; |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
460 case PIX_FMT_NV12: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
461 case PIX_FMT_NV21: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
462 w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
463 picture->linesize[0] = width; |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
464 picture->linesize[1] = w2; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
465 break; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
466 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
|
467 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
|
468 picture->linesize[0] = width * 3; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
469 break; |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
470 case PIX_FMT_RGB32: |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
471 case PIX_FMT_BGR32: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
472 case PIX_FMT_RGB32_1: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
473 case PIX_FMT_BGR32_1: |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
474 picture->linesize[0] = width * 4; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
475 break; |
| 4066 | 476 case PIX_FMT_GRAY16BE: |
| 477 case PIX_FMT_GRAY16LE: | |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
478 case PIX_FMT_BGR555: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
479 case PIX_FMT_BGR565: |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
480 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
|
481 case PIX_FMT_RGB565: |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
482 case PIX_FMT_YUYV422: |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
483 picture->linesize[0] = width * 2; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
484 break; |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
485 case PIX_FMT_UYVY422: |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
486 picture->linesize[0] = width * 2; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
487 break; |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
488 case PIX_FMT_UYYVYY411: |
| 2309 | 489 picture->linesize[0] = width + width/2; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
490 break; |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
491 case PIX_FMT_RGB8: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
492 case PIX_FMT_BGR8: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
493 case PIX_FMT_RGB4_BYTE: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
494 case PIX_FMT_BGR4_BYTE: |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
495 case PIX_FMT_GRAY8: |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
496 picture->linesize[0] = width; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
497 break; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
498 case PIX_FMT_RGB4: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
499 case PIX_FMT_BGR4: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
500 picture->linesize[0] = width / 2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
501 break; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
502 case PIX_FMT_MONOWHITE: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
503 case PIX_FMT_MONOBLACK: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
504 picture->linesize[0] = (width + 7) >> 3; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
505 break; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
506 case PIX_FMT_PAL8: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
507 picture->linesize[0] = width; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
508 picture->linesize[1] = 4; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
509 break; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
510 default: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
511 return -1; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
512 } |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
513 return 0; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
514 } |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
515 |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
516 int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, int pix_fmt, |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
517 int height) |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
518 { |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
519 int size, h2, size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
520 const PixFmtInfo *pinfo; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
521 |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
522 pinfo = &pix_fmt_info[pix_fmt]; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
523 size = picture->linesize[0] * height; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
524 switch(pix_fmt) { |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
525 case PIX_FMT_YUV420P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
526 case PIX_FMT_YUV422P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
527 case PIX_FMT_YUV444P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
528 case PIX_FMT_YUV410P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
529 case PIX_FMT_YUV411P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
530 case PIX_FMT_YUV440P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
531 case PIX_FMT_YUVJ420P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
532 case PIX_FMT_YUVJ422P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
533 case PIX_FMT_YUVJ444P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
534 case PIX_FMT_YUVJ440P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
535 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
536 size2 = picture->linesize[1] * h2; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
537 picture->data[0] = ptr; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
538 picture->data[1] = picture->data[0] + size; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
539 picture->data[2] = picture->data[1] + size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
540 picture->data[3] = NULL; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
541 return size + 2 * size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
542 case PIX_FMT_YUVA420P: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
543 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
544 size2 = picture->linesize[1] * h2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
545 picture->data[0] = ptr; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
546 picture->data[1] = picture->data[0] + size; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
547 picture->data[2] = picture->data[1] + size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
548 picture->data[3] = picture->data[1] + size2 + size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
549 return 2 * size + 2 * size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
550 case PIX_FMT_NV12: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
551 case PIX_FMT_NV21: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
552 h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
553 size2 = picture->linesize[1] * h2 * 2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
554 picture->data[0] = ptr; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
555 picture->data[1] = picture->data[0] + size; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
556 picture->data[2] = NULL; |
|
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
557 picture->data[3] = NULL; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
558 return size + 2 * size2; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
559 case PIX_FMT_RGB24: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
560 case PIX_FMT_BGR24: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
561 case PIX_FMT_RGB32: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
562 case PIX_FMT_BGR32: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
563 case PIX_FMT_RGB32_1: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
564 case PIX_FMT_BGR32_1: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
565 case PIX_FMT_GRAY16BE: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
566 case PIX_FMT_GRAY16LE: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
567 case PIX_FMT_BGR555: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
568 case PIX_FMT_BGR565: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
569 case PIX_FMT_RGB555: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
570 case PIX_FMT_RGB565: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
571 case PIX_FMT_YUYV422: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
572 case PIX_FMT_UYVY422: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
573 case PIX_FMT_UYYVYY411: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
574 case PIX_FMT_RGB8: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
575 case PIX_FMT_BGR8: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
576 case PIX_FMT_RGB4_BYTE: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
577 case PIX_FMT_BGR4_BYTE: |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
578 case PIX_FMT_GRAY8: |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
579 case PIX_FMT_RGB4: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
580 case PIX_FMT_BGR4: |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
581 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
|
582 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
|
583 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
|
584 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
|
585 picture->data[2] = NULL; |
|
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
586 picture->data[3] = NULL; |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
587 return size; |
| 1055 | 588 case PIX_FMT_PAL8: |
| 589 size2 = (size + 3) & ~3; | |
| 590 picture->data[0] = ptr; | |
| 591 picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */ | |
| 592 picture->data[2] = NULL; | |
|
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
593 picture->data[3] = NULL; |
| 1055 | 594 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
|
595 default: |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
596 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
|
597 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
|
598 picture->data[2] = NULL; |
| 1055 | 599 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
|
600 return -1; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
601 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
602 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
603 |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
604 int avpicture_fill(AVPicture *picture, uint8_t *ptr, |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
605 int pix_fmt, int width, int height) |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
606 { |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
607 |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
608 if(avcodec_check_dimensions(NULL, width, height)) |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
609 return -1; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
610 |
| 6357 | 611 if (ff_fill_linesize(picture, pix_fmt, width)) |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
612 return -1; |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
613 |
| 6357 | 614 return ff_fill_pointer(picture, ptr, pix_fmt, height); |
|
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
615 } |
|
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
616 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
617 int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height, |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
618 unsigned char *dest, int dest_size) |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
619 { |
| 3420 | 620 const PixFmtInfo* pf = &pix_fmt_info[pix_fmt]; |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
621 int i, j, w, h, data_planes; |
| 2967 | 622 const unsigned char* s; |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
623 int size = avpicture_get_size(pix_fmt, width, height); |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
624 |
| 2422 | 625 if (size > dest_size || size < 0) |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
626 return -1; |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
627 |
|
1243
5d2376294fbf
* fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents:
1231
diff
changeset
|
628 if (pf->pixel_type == FF_PIXEL_PACKED || pf->pixel_type == FF_PIXEL_PALETTE) { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
629 if (pix_fmt == PIX_FMT_YUYV422 || |
| 2967 | 630 pix_fmt == PIX_FMT_UYVY422 || |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
631 pix_fmt == PIX_FMT_BGR565 || |
| 4088 | 632 pix_fmt == PIX_FMT_BGR555 || |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
633 pix_fmt == PIX_FMT_RGB565 || |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
634 pix_fmt == PIX_FMT_RGB555) |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
635 w = width * 2; |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
636 else if (pix_fmt == PIX_FMT_UYYVYY411) |
| 2979 | 637 w = width + width/2; |
| 638 else if (pix_fmt == PIX_FMT_PAL8) | |
| 639 w = width; | |
| 640 else | |
| 641 w = width * (pf->depth * pf->nb_channels / 8); | |
| 2967 | 642 |
| 2979 | 643 data_planes = 1; |
| 644 h = height; | |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
645 } else { |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
646 data_planes = pf->nb_channels; |
| 2979 | 647 w = (width*pf->depth + 7)/8; |
| 648 h = height; | |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
649 } |
| 2967 | 650 |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
651 for (i=0; i<data_planes; i++) { |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
652 if (i == 1) { |
| 2979 | 653 w = width >> pf->x_chroma_shift; |
| 654 h = height >> pf->y_chroma_shift; | |
| 655 } | |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
656 s = src->data[i]; |
| 2979 | 657 for(j=0; j<h; j++) { |
| 658 memcpy(dest, s, w); | |
| 659 dest += w; | |
| 660 s += src->linesize[i]; | |
| 661 } | |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
662 } |
| 2967 | 663 |
|
1243
5d2376294fbf
* fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents:
1231
diff
changeset
|
664 if (pf->pixel_type == FF_PIXEL_PALETTE) |
| 2979 | 665 memcpy((unsigned char *)(((size_t)dest + 3) & ~3), src->data[1], 256 * 4); |
| 2967 | 666 |
|
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
667 return size; |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
668 } |
|
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
669 |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
670 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
|
671 { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
672 AVPicture dummy_pict; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
673 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
|
674 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
675 |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
676 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
|
677 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
|
678 { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
679 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
|
680 int loss; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
681 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
682 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
|
683 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
|
684 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
685 /* compute loss */ |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
686 loss = 0; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
687 pf = &pix_fmt_info[dst_pix_fmt]; |
|
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
688 if (pf->depth < ps->depth || |
|
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
689 (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
|
690 loss |= FF_LOSS_DEPTH; |
|
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
691 if (pf->x_chroma_shift > ps->x_chroma_shift || |
|
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
692 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
|
693 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
|
694 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
|
695 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
|
696 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
|
697 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
|
698 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
|
699 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
700 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
|
701 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
|
702 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
|
703 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
704 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
|
705 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
|
706 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
|
707 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
708 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
|
709 if (ps->color_type != FF_COLOR_YUV_JPEG && |
| 2967 | 710 ps->color_type != FF_COLOR_YUV && |
|
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
711 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
|
712 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
|
713 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
714 default: |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
715 /* 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
|
716 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
|
717 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
|
718 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
719 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
720 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
|
721 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
|
722 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
|
723 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
|
724 loss |= FF_LOSS_ALPHA; |
| 2967 | 725 if (pf->pixel_type == FF_PIXEL_PALETTE && |
| 1204 | 726 (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
|
727 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
|
728 return loss; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
729 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
730 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
731 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
|
732 { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
733 int bits; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
734 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
|
735 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
736 pf = &pix_fmt_info[pix_fmt]; |
| 1204 | 737 switch(pf->pixel_type) { |
| 738 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
|
739 switch(pix_fmt) { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
740 case PIX_FMT_YUYV422: |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
741 case PIX_FMT_UYVY422: |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
742 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
|
743 case PIX_FMT_RGB555: |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
744 case PIX_FMT_BGR565: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
745 case PIX_FMT_BGR555: |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
746 bits = 16; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
747 break; |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
748 case PIX_FMT_UYYVYY411: |
| 2979 | 749 bits = 12; |
| 750 break; | |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
751 default: |
| 1204 | 752 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
|
753 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
754 } |
| 1204 | 755 break; |
| 756 case FF_PIXEL_PLANAR: | |
| 757 if (pf->x_chroma_shift == 0 && pf->y_chroma_shift == 0) { | |
| 758 bits = pf->depth * pf->nb_channels; | |
| 759 } else { | |
| 2967 | 760 bits = pf->depth + ((2 * pf->depth) >> |
| 1204 | 761 (pf->x_chroma_shift + pf->y_chroma_shift)); |
| 762 } | |
| 763 break; | |
| 764 case FF_PIXEL_PALETTE: | |
| 765 bits = 8; | |
| 766 break; | |
| 767 default: | |
| 768 bits = -1; | |
| 769 break; | |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
770 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
771 return bits; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
772 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
773 |
| 2967 | 774 static int avcodec_find_best_pix_fmt1(int pix_fmt_mask, |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
775 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
|
776 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
|
777 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
|
778 { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
779 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
|
780 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
781 /* 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
|
782 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
|
783 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
|
784 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
|
785 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
|
786 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
|
787 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
|
788 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
|
789 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
|
790 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
|
791 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
|
792 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
793 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
794 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
795 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
796 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
|
797 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
798 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
799 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
|
800 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
|
801 { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
802 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
|
803 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
|
804 ~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
|
805 ~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
|
806 ~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
|
807 ~(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
|
808 ~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
|
809 ~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
|
810 0, |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
811 }; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
812 |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
813 /* 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
|
814 i = 0; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
815 for(;;) { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
816 loss_mask = loss_mask_order[i++]; |
| 2967 | 817 dst_pix_fmt = avcodec_find_best_pix_fmt1(pix_fmt_mask, src_pix_fmt, |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
818 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
|
819 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
|
820 goto found; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
821 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
|
822 break; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
823 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
824 return -1; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
825 found: |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
826 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
|
827 *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
|
828 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
|
829 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
830 |
| 3245 | 831 void ff_img_copy_plane(uint8_t *dst, int dst_wrap, |
| 1205 | 832 const uint8_t *src, int src_wrap, |
| 833 int width, int height) | |
| 1204 | 834 { |
| 2967 | 835 if((!dst) || (!src)) |
| 2785 | 836 return; |
| 1204 | 837 for(;height > 0; height--) { |
| 838 memcpy(dst, src, width); | |
| 839 dst += dst_wrap; | |
| 840 src += src_wrap; | |
| 841 } | |
| 842 } | |
| 843 | |
| 6347 | 844 int av_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane) |
| 1204 | 845 { |
| 6347 | 846 int bits; |
| 3420 | 847 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; |
| 2967 | 848 |
| 1204 | 849 pf = &pix_fmt_info[pix_fmt]; |
| 850 switch(pf->pixel_type) { | |
| 851 case FF_PIXEL_PACKED: | |
| 852 switch(pix_fmt) { | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
853 case PIX_FMT_YUYV422: |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
854 case PIX_FMT_UYVY422: |
| 1204 | 855 case PIX_FMT_RGB565: |
| 856 case PIX_FMT_RGB555: | |
|
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
857 case PIX_FMT_BGR565: |
|
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
858 case PIX_FMT_BGR555: |
| 1204 | 859 bits = 16; |
| 860 break; | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
861 case PIX_FMT_UYYVYY411: |
| 2979 | 862 bits = 12; |
| 863 break; | |
| 1204 | 864 default: |
| 865 bits = pf->depth * pf->nb_channels; | |
| 866 break; | |
| 867 } | |
| 6347 | 868 return (width * bits + 7) >> 3; |
| 869 break; | |
| 870 case FF_PIXEL_PLANAR: | |
| 871 if (plane == 1 || plane == 2) | |
| 872 width >>= pf->x_chroma_shift; | |
| 873 | |
| 874 return (width * pf->depth + 7) >> 3; | |
| 875 break; | |
| 876 case FF_PIXEL_PALETTE: | |
| 877 if (plane == 0) | |
| 878 return width; | |
| 1204 | 879 break; |
| 6347 | 880 } |
| 881 | |
| 882 return -1; | |
| 883 } | |
| 884 | |
| 885 void av_picture_copy(AVPicture *dst, const AVPicture *src, | |
| 886 int pix_fmt, int width, int height) | |
| 887 { | |
| 888 int i; | |
| 889 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; | |
| 890 | |
| 891 pf = &pix_fmt_info[pix_fmt]; | |
| 892 switch(pf->pixel_type) { | |
| 893 case FF_PIXEL_PACKED: | |
| 1204 | 894 case FF_PIXEL_PLANAR: |
| 895 for(i = 0; i < pf->nb_channels; i++) { | |
| 896 int w, h; | |
| 6347 | 897 int bwidth = av_get_plane_bytewidth(pix_fmt, width, i); |
| 1204 | 898 w = width; |
| 899 h = height; | |
| 900 if (i == 1 || i == 2) { | |
| 901 w >>= pf->x_chroma_shift; | |
| 902 h >>= pf->y_chroma_shift; | |
| 903 } | |
| 3245 | 904 ff_img_copy_plane(dst->data[i], dst->linesize[i], |
| 1204 | 905 src->data[i], src->linesize[i], |
| 906 bwidth, h); | |
| 907 } | |
| 908 break; | |
| 909 case FF_PIXEL_PALETTE: | |
| 3245 | 910 ff_img_copy_plane(dst->data[0], dst->linesize[0], |
| 1204 | 911 src->data[0], src->linesize[0], |
| 912 width, height); | |
| 913 /* copy the palette */ | |
| 3245 | 914 ff_img_copy_plane(dst->data[1], dst->linesize[1], |
| 1204 | 915 src->data[1], src->linesize[1], |
| 916 4, 256); | |
| 917 break; | |
| 918 } | |
| 919 } | |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
920 |
| 0 | 921 /* XXX: totally non optimized */ |
| 922 | |
| 4517 | 923 static void yuyv422_to_yuv420p(AVPicture *dst, const AVPicture *src, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
924 int width, int height) |
| 0 | 925 { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
926 const uint8_t *p, *p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
927 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
928 int w; |
| 2967 | 929 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
930 p1 = src->data[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
931 lum1 = dst->data[0]; |
| 1207 | 932 cb1 = dst->data[1]; |
| 933 cr1 = dst->data[2]; | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
934 |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
935 for(;height >= 1; height -= 2) { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
936 p = p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
937 lum = lum1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
938 cb = cb1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
939 cr = cr1; |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
940 for(w = width; w >= 2; w -= 2) { |
|
1028
e76fb91de4cc
reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents:
1023
diff
changeset
|
941 lum[0] = p[0]; |
|
e76fb91de4cc
reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents:
1023
diff
changeset
|
942 cb[0] = p[1]; |
|
e76fb91de4cc
reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents:
1023
diff
changeset
|
943 lum[1] = p[2]; |
|
e76fb91de4cc
reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents:
1023
diff
changeset
|
944 cr[0] = p[3]; |
| 0 | 945 p += 4; |
| 946 lum += 2; | |
| 947 cb++; | |
| 948 cr++; | |
| 949 } | |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
950 if (w) { |
|
1028
e76fb91de4cc
reversing my own stupidity ... (raw packed yuv422 files dont use YUY2 but UYVY)
michaelni
parents:
1023
diff
changeset
|
951 lum[0] = p[0]; |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
952 cb[0] = p[1]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
953 cr[0] = p[3]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
954 cb++; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
955 cr++; |
| 0 | 956 } |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
957 p1 += src->linesize[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
958 lum1 += dst->linesize[0]; |
|
1353
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
959 if (height>1) { |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
960 p = p1; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
961 lum = lum1; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
962 for(w = width; w >= 2; w -= 2) { |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
963 lum[0] = p[0]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
964 lum[1] = p[2]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
965 p += 4; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
966 lum += 2; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
967 } |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
968 if (w) { |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
969 lum[0] = p[0]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
970 } |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
971 p1 += src->linesize[0]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
972 lum1 += dst->linesize[0]; |
|
cfc80b3a4ada
flash video (flv) support patch by (Garrick Meeker <gmeeker at theoryllc dot com>)
michaelni
parents:
1282
diff
changeset
|
973 } |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
974 cb1 += dst->linesize[1]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
975 cr1 += dst->linesize[2]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
976 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
977 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
978 |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
979 static void uyvy422_to_yuv420p(AVPicture *dst, const AVPicture *src, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
980 int width, int height) |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
981 { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
982 const uint8_t *p, *p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
983 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
984 int w; |
| 2967 | 985 |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
986 p1 = src->data[0]; |
| 2967 | 987 |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
988 lum1 = dst->data[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
989 cb1 = dst->data[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
990 cr1 = dst->data[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
991 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
992 for(;height >= 1; height -= 2) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
993 p = p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
994 lum = lum1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
995 cb = cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
996 cr = cr1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
997 for(w = width; w >= 2; w -= 2) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
998 lum[0] = p[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
999 cb[0] = p[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1000 lum[1] = p[3]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1001 cr[0] = p[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1002 p += 4; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1003 lum += 2; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1004 cb++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1005 cr++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1006 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1007 if (w) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1008 lum[0] = p[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1009 cb[0] = p[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1010 cr[0] = p[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1011 cb++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1012 cr++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1013 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1014 p1 += src->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1015 lum1 += dst->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1016 if (height>1) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1017 p = p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1018 lum = lum1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1019 for(w = width; w >= 2; w -= 2) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1020 lum[0] = p[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1021 lum[1] = p[3]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1022 p += 4; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1023 lum += 2; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1024 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1025 if (w) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1026 lum[0] = p[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1027 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1028 p1 += src->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1029 lum1 += dst->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1030 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1031 cb1 += dst->linesize[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1032 cr1 += dst->linesize[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1033 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1034 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1035 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1036 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1037 static void uyvy422_to_yuv422p(AVPicture *dst, const AVPicture *src, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1038 int width, int height) |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1039 { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1040 const uint8_t *p, *p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1041 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1042 int w; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1043 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1044 p1 = src->data[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1045 lum1 = dst->data[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1046 cb1 = dst->data[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1047 cr1 = dst->data[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1048 for(;height > 0; height--) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1049 p = p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1050 lum = lum1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1051 cb = cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1052 cr = cr1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1053 for(w = width; w >= 2; w -= 2) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1054 lum[0] = p[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1055 cb[0] = p[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1056 lum[1] = p[3]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1057 cr[0] = p[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1058 p += 4; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1059 lum += 2; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1060 cb++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1061 cr++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1062 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1063 p1 += src->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1064 lum1 += dst->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1065 cb1 += dst->linesize[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1066 cr1 += dst->linesize[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1067 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1068 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1069 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1070 |
| 4517 | 1071 static void yuyv422_to_yuv422p(AVPicture *dst, const AVPicture *src, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1072 int width, int height) |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1073 { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1074 const uint8_t *p, *p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1075 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
|
1076 int w; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1077 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1078 p1 = src->data[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1079 lum1 = dst->data[0]; |
| 1207 | 1080 cb1 = dst->data[1]; |
| 1081 cr1 = dst->data[2]; | |
| 1082 for(;height > 0; height--) { | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1083 p = p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1084 lum = lum1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1085 cb = cb1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1086 cr = cr1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1087 for(w = width; w >= 2; w -= 2) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1088 lum[0] = p[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1089 cb[0] = p[1]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1090 lum[1] = p[2]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1091 cr[0] = p[3]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1092 p += 4; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1093 lum += 2; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1094 cb++; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1095 cr++; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1096 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1097 p1 += src->linesize[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1098 lum1 += dst->linesize[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1099 cb1 += dst->linesize[1]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1100 cr1 += dst->linesize[2]; |
| 0 | 1101 } |
| 1102 } | |
| 1103 | |
| 4517 | 1104 static void yuv422p_to_yuyv422(AVPicture *dst, const AVPicture *src, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1105 int width, int height) |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1106 { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1107 uint8_t *p, *p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1108 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
|
1109 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
|
1110 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1111 p1 = dst->data[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1112 lum1 = src->data[0]; |
| 1207 | 1113 cb1 = src->data[1]; |
| 1114 cr1 = src->data[2]; | |
| 1115 for(;height > 0; height--) { | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1116 p = p1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1117 lum = lum1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1118 cb = cb1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1119 cr = cr1; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1120 for(w = width; w >= 2; w -= 2) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1121 p[0] = lum[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1122 p[1] = cb[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1123 p[2] = lum[1]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1124 p[3] = cr[0]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1125 p += 4; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1126 lum += 2; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1127 cb++; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1128 cr++; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1129 } |
| 1207 | 1130 p1 += dst->linesize[0]; |
| 1131 lum1 += src->linesize[0]; | |
| 1132 cb1 += src->linesize[1]; | |
| 1133 cr1 += src->linesize[2]; | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1134 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1135 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1136 |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1137 static void yuv422p_to_uyvy422(AVPicture *dst, const AVPicture *src, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1138 int width, int height) |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1139 { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1140 uint8_t *p, *p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1141 const uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1142 int w; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1143 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1144 p1 = dst->data[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1145 lum1 = src->data[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1146 cb1 = src->data[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1147 cr1 = src->data[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1148 for(;height > 0; height--) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1149 p = p1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1150 lum = lum1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1151 cb = cb1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1152 cr = cr1; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1153 for(w = width; w >= 2; w -= 2) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1154 p[1] = lum[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1155 p[0] = cb[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1156 p[3] = lum[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1157 p[2] = cr[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1158 p += 4; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1159 lum += 2; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1160 cb++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1161 cr++; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1162 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1163 p1 += dst->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1164 lum1 += src->linesize[0]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1165 cb1 += src->linesize[1]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1166 cr1 += src->linesize[2]; |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1167 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1168 } |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1169 |
| 4516 | 1170 static void uyyvyy411_to_yuv411p(AVPicture *dst, const AVPicture *src, |
| 2309 | 1171 int width, int height) |
| 1172 { | |
| 1173 const uint8_t *p, *p1; | |
| 1174 uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1; | |
| 1175 int w; | |
| 1176 | |
| 1177 p1 = src->data[0]; | |
| 1178 lum1 = dst->data[0]; | |
| 1179 cb1 = dst->data[1]; | |
| 1180 cr1 = dst->data[2]; | |
| 1181 for(;height > 0; height--) { | |
| 1182 p = p1; | |
| 1183 lum = lum1; | |
| 1184 cb = cb1; | |
| 1185 cr = cr1; | |
| 1186 for(w = width; w >= 4; w -= 4) { | |
| 1187 cb[0] = p[0]; | |
| 2979 | 1188 lum[0] = p[1]; |
| 2309 | 1189 lum[1] = p[2]; |
| 1190 cr[0] = p[3]; | |
| 2979 | 1191 lum[2] = p[4]; |
| 1192 lum[3] = p[5]; | |
| 2309 | 1193 p += 6; |
| 1194 lum += 4; | |
| 1195 cb++; | |
| 1196 cr++; | |
| 1197 } | |
| 1198 p1 += src->linesize[0]; | |
| 1199 lum1 += dst->linesize[0]; | |
| 1200 cb1 += dst->linesize[1]; | |
| 1201 cr1 += dst->linesize[2]; | |
| 1202 } | |
| 1203 } | |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1204 |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
1205 |
| 4517 | 1206 static void yuv420p_to_yuyv422(AVPicture *dst, const AVPicture *src, |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1207 int width, int height) |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1208 { |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1209 int w, h; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1210 uint8_t *line1, *line2, *linesrc = dst->data[0]; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1211 uint8_t *lum1, *lum2, *lumsrc = src->data[0]; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1212 uint8_t *cb1, *cb2 = src->data[1]; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1213 uint8_t *cr1, *cr2 = src->data[2]; |
| 2967 | 1214 |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1215 for(h = height / 2; h--;) { |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1216 line1 = linesrc; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1217 line2 = linesrc + dst->linesize[0]; |
| 2967 | 1218 |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1219 lum1 = lumsrc; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1220 lum2 = lumsrc + src->linesize[0]; |
| 2967 | 1221 |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1222 cb1 = cb2; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1223 cr1 = cr2; |
| 2967 | 1224 |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1225 for(w = width / 2; w--;) { |
| 2967 | 1226 *line1++ = *lum1++; *line2++ = *lum2++; |
| 1227 *line1++ = *line2++ = *cb1++; | |
| 1228 *line1++ = *lum1++; *line2++ = *lum2++; | |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1229 *line1++ = *line2++ = *cr1++; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1230 } |
| 2967 | 1231 |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1232 linesrc += dst->linesize[0] * 2; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1233 lumsrc += src->linesize[0] * 2; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1234 cb2 += src->linesize[1]; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1235 cr2 += src->linesize[2]; |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1236 } |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1237 } |
|
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
1238 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1239 static void yuv420p_to_uyvy422(AVPicture *dst, const AVPicture *src, |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1240 int width, int height) |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1241 { |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1242 int w, h; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1243 uint8_t *line1, *line2, *linesrc = dst->data[0]; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1244 uint8_t *lum1, *lum2, *lumsrc = src->data[0]; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1245 uint8_t *cb1, *cb2 = src->data[1]; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1246 uint8_t *cr1, *cr2 = src->data[2]; |
| 2967 | 1247 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1248 for(h = height / 2; h--;) { |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1249 line1 = linesrc; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1250 line2 = linesrc + dst->linesize[0]; |
| 2967 | 1251 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1252 lum1 = lumsrc; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1253 lum2 = lumsrc + src->linesize[0]; |
| 2967 | 1254 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1255 cb1 = cb2; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1256 cr1 = cr2; |
| 2967 | 1257 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1258 for(w = width / 2; w--;) { |
| 2967 | 1259 *line1++ = *line2++ = *cb1++; |
| 1260 *line1++ = *lum1++; *line2++ = *lum2++; | |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1261 *line1++ = *line2++ = *cr1++; |
| 2967 | 1262 *line1++ = *lum1++; *line2++ = *lum2++; |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1263 } |
| 2967 | 1264 |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1265 linesrc += dst->linesize[0] * 2; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1266 lumsrc += src->linesize[0] * 2; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1267 cb2 += src->linesize[1]; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1268 cr2 += src->linesize[2]; |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1269 } |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1270 } |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
1271 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1272 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
|
1273 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
|
1274 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
|
1275 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
|
1276 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1277 /* init various conversion tables */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1278 static void img_convert_init(void) |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1279 { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1280 int i; |
| 4176 | 1281 uint8_t *cm = ff_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
|
1282 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1283 for(i = 0;i < 256; i++) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1284 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
|
1285 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
|
1286 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
|
1287 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
|
1288 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1289 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1290 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1291 /* apply to each pixel the given table */ |
| 2967 | 1292 static void img_apply_table(uint8_t *dst, int dst_wrap, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1293 const uint8_t *src, int src_wrap, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1294 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
|
1295 { |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1296 int n; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1297 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
|
1298 uint8_t *d; |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1299 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
|
1300 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1301 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
|
1302 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
|
1303 s = src; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1304 d = dst; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1305 n = width; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1306 while (n >= 4) { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1307 d[0] = table[s[0]]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1308 d[1] = table[s[1]]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1309 d[2] = table[s[2]]; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1310 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
|
1311 d += 4; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1312 s += 4; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1313 n -= 4; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1314 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1315 while (n > 0) { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1316 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
|
1317 d++; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1318 s++; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1319 n--; |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1320 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1321 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
|
1322 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
|
1323 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1324 } |
|
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
1325 |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1326 /* XXX: use generic filter ? */ |
| 1205 | 1327 /* XXX: in most cases, the sampling position is incorrect */ |
| 1328 | |
| 1329 /* 4x1 -> 1x1 */ | |
| 2967 | 1330 static void shrink41(uint8_t *dst, int dst_wrap, |
| 1205 | 1331 const uint8_t *src, int src_wrap, |
| 1332 int width, int height) | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1333 { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1334 int w; |
| 1205 | 1335 const uint8_t *s; |
| 1336 uint8_t *d; | |
| 1337 | |
| 1338 for(;height > 0; height--) { | |
| 1339 s = src; | |
| 1340 d = dst; | |
| 1341 for(w = width;w > 0; w--) { | |
| 1342 d[0] = (s[0] + s[1] + s[2] + s[3] + 2) >> 2; | |
| 1343 s += 4; | |
| 1344 d++; | |
| 1345 } | |
| 1346 src += src_wrap; | |
| 1347 dst += dst_wrap; | |
| 1348 } | |
| 1349 } | |
| 1350 | |
| 1351 /* 2x1 -> 1x1 */ | |
| 2967 | 1352 static void shrink21(uint8_t *dst, int dst_wrap, |
| 1205 | 1353 const uint8_t *src, int src_wrap, |
| 1354 int width, int height) | |
| 1355 { | |
| 1356 int w; | |
| 1357 const uint8_t *s; | |
| 1358 uint8_t *d; | |
| 1359 | |
| 1360 for(;height > 0; height--) { | |
| 1361 s = src; | |
| 1362 d = dst; | |
| 1363 for(w = width;w > 0; w--) { | |
| 1364 d[0] = (s[0] + s[1]) >> 1; | |
| 1365 s += 2; | |
| 1366 d++; | |
| 1367 } | |
| 1368 src += src_wrap; | |
| 1369 dst += dst_wrap; | |
| 1370 } | |
| 1371 } | |
| 1372 | |
| 1373 /* 1x2 -> 1x1 */ | |
| 2967 | 1374 static void shrink12(uint8_t *dst, int dst_wrap, |
| 1205 | 1375 const uint8_t *src, int src_wrap, |
| 1376 int width, int height) | |
| 1377 { | |
| 1378 int w; | |
| 1379 uint8_t *d; | |
| 1380 const uint8_t *s1, *s2; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1381 |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1382 for(;height > 0; height--) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1383 s1 = src; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1384 s2 = s1 + src_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1385 d = dst; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1386 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
|
1387 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
|
1388 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
|
1389 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
|
1390 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
|
1391 s1 += 4; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1392 s2 += 4; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1393 d += 4; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1394 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1395 for(;w > 0; w--) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1396 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
|
1397 s1++; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1398 s2++; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1399 d++; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1400 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1401 src += 2 * src_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1402 dst += dst_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1403 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1404 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1405 |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1406 /* 2x2 -> 1x1 */ |
| 3245 | 1407 void ff_shrink22(uint8_t *dst, int dst_wrap, |
| 1205 | 1408 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
|
1409 int width, int height) |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1410 { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1411 int w; |
| 1205 | 1412 const uint8_t *s1, *s2; |
| 1413 uint8_t *d; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1414 |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1415 for(;height > 0; height--) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1416 s1 = src; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1417 s2 = s1 + src_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1418 d = dst; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1419 for(w = width;w >= 4; w-=4) { |
|
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
1420 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
|
1421 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
|
1422 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
|
1423 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
|
1424 s1 += 8; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1425 s2 += 8; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1426 d += 4; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1427 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1428 for(;w > 0; w--) { |
|
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
1429 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
|
1430 s1 += 2; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1431 s2 += 2; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1432 d++; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1433 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1434 src += 2 * src_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1435 dst += dst_wrap; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1436 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1437 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1438 |
| 1205 | 1439 /* 4x4 -> 1x1 */ |
| 3245 | 1440 void ff_shrink44(uint8_t *dst, int dst_wrap, |
| 1205 | 1441 const uint8_t *src, int src_wrap, |
|
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1442 int width, int height) |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1443 { |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1444 int w; |
| 1205 | 1445 const uint8_t *s1, *s2, *s3, *s4; |
| 1446 uint8_t *d; | |
|
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1447 |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1448 for(;height > 0; height--) { |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1449 s1 = src; |
| 1205 | 1450 s2 = s1 + src_wrap; |
| 1451 s3 = s2 + src_wrap; | |
| 1452 s4 = s3 + src_wrap; | |
|
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1453 d = dst; |
| 1205 | 1454 for(w = width;w > 0; w--) { |
| 1455 d[0] = (s1[0] + s1[1] + s1[2] + s1[3] + | |
| 1456 s2[0] + s2[1] + s2[2] + s2[3] + | |
| 1457 s3[0] + s3[1] + s3[2] + s3[3] + | |
| 1458 s4[0] + s4[1] + s4[2] + s4[3] + 8) >> 4; | |
| 1459 s1 += 4; | |
| 1460 s2 += 4; | |
| 1461 s3 += 4; | |
| 1462 s4 += 4; | |
|
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1463 d++; |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1464 } |
| 1205 | 1465 src += 4 * src_wrap; |
| 1466 dst += dst_wrap; | |
| 1467 } | |
| 1468 } | |
| 1469 | |
| 3245 | 1470 /* 8x8 -> 1x1 */ |
| 1471 void ff_shrink88(uint8_t *dst, int dst_wrap, | |
| 1472 const uint8_t *src, int src_wrap, | |
| 1473 int width, int height) | |
| 1474 { | |
| 1475 int w, i; | |
| 1476 | |
| 1477 for(;height > 0; height--) { | |
| 1478 for(w = width;w > 0; w--) { | |
| 1479 int tmp=0; | |
| 1480 for(i=0; i<8; i++){ | |
| 1481 tmp += src[0] + src[1] + src[2] + src[3] + src[4] + src[5] + src[6] + src[7]; | |
| 1482 src += src_wrap; | |
| 1483 } | |
| 1484 *(dst++) = (tmp + 32)>>6; | |
| 1485 src += 8 - 8*src_wrap; | |
| 1486 } | |
| 1487 src += 8*src_wrap - 8*width; | |
| 1488 dst += dst_wrap - width; | |
| 1489 } | |
| 1490 } | |
| 1491 | |
| 1205 | 1492 static void grow21_line(uint8_t *dst, const uint8_t *src, |
| 1493 int width) | |
| 1494 { | |
| 1495 int w; | |
| 1496 const uint8_t *s1; | |
| 1497 uint8_t *d; | |
| 1498 | |
| 1499 s1 = src; | |
| 1500 d = dst; | |
| 1501 for(w = width;w >= 4; w-=4) { | |
| 1502 d[1] = d[0] = s1[0]; | |
| 1503 d[3] = d[2] = s1[1]; | |
| 1504 s1 += 2; | |
| 1505 d += 4; | |
| 1506 } | |
| 1507 for(;w >= 2; w -= 2) { | |
| 1508 d[1] = d[0] = s1[0]; | |
| 1509 s1 ++; | |
| 1510 d += 2; | |
| 1511 } | |
| 1512 /* only needed if width is not a multiple of two */ | |
| 1513 /* XXX: veryfy that */ | |
| 1514 if (w) { | |
| 1515 d[0] = s1[0]; | |
| 1516 } | |
| 1517 } | |
| 1518 | |
| 1519 static void grow41_line(uint8_t *dst, const uint8_t *src, | |
| 1520 int width) | |
| 1521 { | |
| 1522 int w, v; | |
| 1523 const uint8_t *s1; | |
| 1524 uint8_t *d; | |
| 1525 | |
| 1526 s1 = src; | |
| 1527 d = dst; | |
| 1528 for(w = width;w >= 4; w-=4) { | |
| 1529 v = s1[0]; | |
| 1530 d[0] = v; | |
| 1531 d[1] = v; | |
| 1532 d[2] = v; | |
| 1533 d[3] = v; | |
| 1534 s1 ++; | |
| 1535 d += 4; | |
| 1536 } | |
| 1537 } | |
| 1538 | |
| 1539 /* 1x1 -> 2x1 */ | |
| 1540 static void grow21(uint8_t *dst, int dst_wrap, | |
| 1541 const uint8_t *src, int src_wrap, | |
| 1542 int width, int height) | |
| 1543 { | |
| 1544 for(;height > 0; height--) { | |
| 1545 grow21_line(dst, src, width); | |
| 1546 src += src_wrap; | |
| 1547 dst += dst_wrap; | |
| 1548 } | |
| 1549 } | |
| 1550 | |
| 5363 | 1551 /* 1x1 -> 1x2 */ |
| 1552 static void grow12(uint8_t *dst, int dst_wrap, | |
| 1553 const uint8_t *src, int src_wrap, | |
| 1554 int width, int height) | |
| 1555 { | |
| 1556 for(;height > 0; height-=2) { | |
| 1557 memcpy(dst, src, width); | |
| 1558 dst += dst_wrap; | |
| 1559 memcpy(dst, src, width); | |
| 1560 dst += dst_wrap; | |
| 1561 src += src_wrap; | |
| 1562 } | |
| 1563 } | |
| 1564 | |
| 1205 | 1565 /* 1x1 -> 2x2 */ |
| 1566 static void grow22(uint8_t *dst, int dst_wrap, | |
| 1567 const uint8_t *src, int src_wrap, | |
| 1568 int width, int height) | |
| 1569 { | |
| 1570 for(;height > 0; height--) { | |
| 1571 grow21_line(dst, src, width); | |
|
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1572 if (height%2) |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1573 src += src_wrap; |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1574 dst += dst_wrap; |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1575 } |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1576 } |
|
9aa5f0d0124e
YUV410P to YUV420P patch by Fran?ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1577 |
| 1205 | 1578 /* 1x1 -> 4x1 */ |
| 1579 static void grow41(uint8_t *dst, int dst_wrap, | |
| 1580 const uint8_t *src, int src_wrap, | |
| 1581 int width, int height) | |
| 1582 { | |
| 1583 for(;height > 0; height--) { | |
| 1584 grow41_line(dst, src, width); | |
| 1585 src += src_wrap; | |
| 1586 dst += dst_wrap; | |
| 1587 } | |
| 1588 } | |
| 1589 | |
| 1590 /* 1x1 -> 4x4 */ | |
| 1591 static void grow44(uint8_t *dst, int dst_wrap, | |
| 1592 const uint8_t *src, int src_wrap, | |
| 1593 int width, int height) | |
| 1594 { | |
| 1595 for(;height > 0; height--) { | |
| 1596 grow41_line(dst, src, width); | |
| 1597 if ((height & 3) == 1) | |
| 1598 src += src_wrap; | |
| 1599 dst += dst_wrap; | |
| 1600 } | |
| 1601 } | |
| 1602 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1603 /* 1x2 -> 2x1 */ |
| 2967 | 1604 static void conv411(uint8_t *dst, int dst_wrap, |
| 1205 | 1605 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
|
1606 int width, int height) |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1607 { |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1608 int w, c; |
| 1205 | 1609 const uint8_t *s1, *s2; |
| 1610 uint8_t *d; | |
|
736
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1611 |
| 1166 | 1612 width>>=1; |
| 1613 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1614 for(;height > 0; height--) { |
|
736
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1615 s1 = src; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1616 s2 = src + src_wrap; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1617 d = dst; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1618 for(w = width;w > 0; w--) { |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1619 c = (s1[0] + s2[0]) >> 1; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1620 d[0] = c; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1621 d[1] = c; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1622 s1++; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1623 s2++; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1624 d += 2; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1625 } |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1626 src += src_wrap * 2; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1627 dst += dst_wrap; |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1628 } |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1629 } |
|
918756bffda2
minimum support for YUV411P (new combined scaler/converter will handle that better...)
bellard
parents:
583
diff
changeset
|
1630 |
| 1204 | 1631 /* XXX: add jpeg quantize code */ |
| 1632 | |
| 1633 #define TRANSP_INDEX (6*6*6) | |
| 1634 | |
| 1635 /* this is maybe slow, but allows for extensions */ | |
| 1636 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
|
1637 { |
| 1204 | 1638 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
|
1639 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1640 |
| 1204 | 1641 static void build_rgb_palette(uint8_t *palette, int has_alpha) |
| 1642 { | |
| 1643 uint32_t *pal; | |
| 1644 static const uint8_t pal_value[6] = { 0x00, 0x33, 0x66, 0x99, 0xcc, 0xff }; | |
| 1645 int i, r, g, b; | |
| 1646 | |
| 1647 pal = (uint32_t *)palette; | |
| 1648 i = 0; | |
| 1649 for(r = 0; r < 6; r++) { | |
| 1650 for(g = 0; g < 6; g++) { | |
| 1651 for(b = 0; b < 6; b++) { | |
| 2967 | 1652 pal[i++] = (0xff << 24) | (pal_value[r] << 16) | |
| 1204 | 1653 (pal_value[g] << 8) | pal_value[b]; |
| 1654 } | |
| 1655 } | |
| 1656 } | |
| 1657 if (has_alpha) | |
| 1658 pal[i++] = 0; | |
| 1659 while (i < 256) | |
| 1660 pal[i++] = 0xff000000; | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1661 } |
| 583 | 1662 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1663 /* copy bit n to bits 0 ... n - 1 */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1664 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
|
1665 { |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1666 int mask; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1667 mask = (1 << n) - 1; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1668 return (a & (0xff & ~mask)) | ((-((a >> n) & 1)) & mask); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1669 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1670 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1671 /* rgb555 handling */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1672 |
| 1204 | 1673 #define RGB_NAME rgb555 |
| 1674 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1675 #define RGB_IN(r, g, b, s)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1676 {\ |
| 1064 | 1677 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
|
1678 r = bitcopy_n(v >> (10 - 3), 3);\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1679 g = bitcopy_n(v >> (5 - 3), 3);\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1680 b = bitcopy_n(v << 3, 3);\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1681 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1682 |
| 4208 | 1683 |
| 1684 #define RGB_OUT(d, r, g, b)\ | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1685 {\ |
| 4208 | 1686 ((uint16_t *)(d))[0] = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3);\ |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1687 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1688 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1689 #define BPP 2 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1690 |
| 1204 | 1691 #include "imgconvert_template.h" |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1692 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1693 /* rgb565 handling */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1694 |
| 1204 | 1695 #define RGB_NAME rgb565 |
| 1696 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1697 #define RGB_IN(r, g, b, s)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1698 {\ |
| 1064 | 1699 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
|
1700 r = bitcopy_n(v >> (11 - 3), 3);\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1701 g = bitcopy_n(v >> (5 - 2), 2);\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1702 b = bitcopy_n(v << 3, 3);\ |
|
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 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1705 #define RGB_OUT(d, r, g, b)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1706 {\ |
| 1064 | 1707 ((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
|
1708 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1709 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1710 #define BPP 2 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1711 |
| 1204 | 1712 #include "imgconvert_template.h" |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1713 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1714 /* bgr24 handling */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1715 |
| 1204 | 1716 #define RGB_NAME bgr24 |
| 1717 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1718 #define RGB_IN(r, g, b, s)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1719 {\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1720 b = (s)[0];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1721 g = (s)[1];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1722 r = (s)[2];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1723 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1724 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1725 #define RGB_OUT(d, r, g, b)\ |
|
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 (d)[0] = b;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1728 (d)[1] = g;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1729 (d)[2] = r;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1730 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1731 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1732 #define BPP 3 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1733 |
| 1204 | 1734 #include "imgconvert_template.h" |
| 583 | 1735 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1736 #undef RGB_IN |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1737 #undef RGB_OUT |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1738 #undef BPP |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1739 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1740 /* rgb24 handling */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1741 |
| 1204 | 1742 #define RGB_NAME rgb24 |
| 1743 #define FMT_RGB24 | |
| 1744 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1745 #define RGB_IN(r, g, b, s)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1746 {\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1747 r = (s)[0];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1748 g = (s)[1];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1749 b = (s)[2];\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1750 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1751 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1752 #define RGB_OUT(d, r, g, b)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1753 {\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1754 (d)[0] = r;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1755 (d)[1] = g;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1756 (d)[2] = b;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1757 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1758 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1759 #define BPP 3 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1760 |
| 1204 | 1761 #include "imgconvert_template.h" |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1762 |
| 4515 | 1763 /* rgb32 handling */ |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1764 |
| 4515 | 1765 #define RGB_NAME rgb32 |
| 1766 #define FMT_RGB32 | |
| 1204 | 1767 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1768 #define RGB_IN(r, g, b, s)\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1769 {\ |
| 1064 | 1770 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
|
1771 r = (v >> 16) & 0xff;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1772 g = (v >> 8) & 0xff;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1773 b = v & 0xff;\ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1774 } |
| 583 | 1775 |
| 1204 | 1776 #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
|
1777 {\ |
| 1204 | 1778 unsigned int v = ((const uint32_t *)(s))[0];\ |
| 1779 a = (v >> 24) & 0xff;\ | |
| 1780 r = (v >> 16) & 0xff;\ | |
| 1781 g = (v >> 8) & 0xff;\ | |
| 1782 b = v & 0xff;\ | |
| 1783 } | |
| 1784 | |
| 1785 #define RGBA_OUT(d, r, g, b, a)\ | |
| 1786 {\ | |
| 1787 ((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
|
1788 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1789 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1790 #define BPP 4 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1791 |
| 1204 | 1792 #include "imgconvert_template.h" |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1793 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1794 static void mono_to_gray(AVPicture *dst, const AVPicture *src, |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1795 int width, int height, int xor_mask) |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1796 { |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1797 const unsigned char *p; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1798 unsigned char *q; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1799 int v, dst_wrap, src_wrap; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1800 int y, w; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1801 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1802 p = src->data[0]; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1803 src_wrap = src->linesize[0] - ((width + 7) >> 3); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1804 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1805 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
|
1806 dst_wrap = dst->linesize[0] - width; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1807 for(y=0;y<height;y++) { |
| 2967 | 1808 w = width; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1809 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
|
1810 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
|
1811 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
|
1812 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
|
1813 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
|
1814 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
|
1815 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
|
1816 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
|
1817 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
|
1818 q[7] = -((v >> 0) & 1); |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1819 w -= 8; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1820 q += 8; |
| 583 | 1821 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1822 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
|
1823 v = *p++ ^ xor_mask; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1824 do { |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1825 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
|
1826 q++; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1827 v <<= 1; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1828 } while (--w); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1829 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1830 p += src_wrap; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1831 q += dst_wrap; |
| 583 | 1832 } |
| 1833 } | |
| 1834 | |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1835 static void monowhite_to_gray(AVPicture *dst, const AVPicture *src, |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1836 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
|
1837 { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1838 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
|
1839 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1840 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1841 static void monoblack_to_gray(AVPicture *dst, const AVPicture *src, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1842 int width, int height) |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1843 { |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1844 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
|
1845 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1846 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1847 static void gray_to_mono(AVPicture *dst, const AVPicture *src, |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1848 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
|
1849 { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1850 int n; |
| 1064 | 1851 const uint8_t *s; |
| 1852 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
|
1853 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
|
1854 |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1855 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
|
1856 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
|
1857 |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1858 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
|
1859 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
|
1860 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1861 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
|
1862 n = width; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1863 while (n >= 8) { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1864 v = 0; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1865 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
|
1866 b = s[0]; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1867 s++; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1868 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
|
1869 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1870 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
|
1871 d++; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1872 n -= 8; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1873 } |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1874 if (n > 0) { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1875 n1 = n; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1876 v = 0; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1877 while (n > 0) { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1878 b = s[0]; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1879 s++; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1880 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
|
1881 n--; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1882 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1883 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
|
1884 d++; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1885 } |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1886 s += src_wrap; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1887 d += dst_wrap; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1888 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1889 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1890 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1891 static void gray_to_monowhite(AVPicture *dst, const AVPicture *src, |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1892 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
|
1893 { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1894 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
|
1895 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1896 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1897 static void gray_to_monoblack(AVPicture *dst, const AVPicture *src, |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1898 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
|
1899 { |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1900 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
|
1901 } |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1902 |
| 4066 | 1903 static void gray_to_gray16(AVPicture *dst, const AVPicture *src, |
| 1904 int width, int height) | |
| 1905 { | |
| 1906 int x, y, src_wrap, dst_wrap; | |
| 1907 uint8_t *s, *d; | |
| 1908 s = src->data[0]; | |
| 1909 src_wrap = src->linesize[0] - width; | |
| 1910 d = dst->data[0]; | |
| 1911 dst_wrap = dst->linesize[0] - width * 2; | |
| 1912 for(y=0; y<height; y++){ | |
| 1913 for(x=0; x<width; x++){ | |
| 1914 *d++ = *s; | |
| 1915 *d++ = *s++; | |
| 1916 } | |
| 1917 s += src_wrap; | |
| 1918 d += dst_wrap; | |
| 1919 } | |
| 1920 } | |
| 1921 | |
| 1922 static void gray16_to_gray(AVPicture *dst, const AVPicture *src, | |
| 1923 int width, int height) | |
| 1924 { | |
| 1925 int x, y, src_wrap, dst_wrap; | |
| 1926 uint8_t *s, *d; | |
| 1927 s = src->data[0]; | |
| 1928 src_wrap = src->linesize[0] - width * 2; | |
| 1929 d = dst->data[0]; | |
| 1930 dst_wrap = dst->linesize[0] - width; | |
| 1931 for(y=0; y<height; y++){ | |
| 1932 for(x=0; x<width; x++){ | |
| 1933 *d++ = *s; | |
| 1934 s += 2; | |
| 1935 } | |
| 1936 s += src_wrap; | |
| 1937 d += dst_wrap; | |
| 1938 } | |
| 1939 } | |
| 1940 | |
| 1941 static void gray16be_to_gray(AVPicture *dst, const AVPicture *src, | |
| 1942 int width, int height) | |
| 1943 { | |
| 1944 gray16_to_gray(dst, src, width, height); | |
| 1945 } | |
| 1946 | |
| 1947 static void gray16le_to_gray(AVPicture *dst, const AVPicture *src, | |
| 1948 int width, int height) | |
| 1949 { | |
|
4802
e02f7d142ce9
Fix segmentation fault for gray16le to gray conversion.
ivo
parents:
4624
diff
changeset
|
1950 AVPicture tmpsrc = *src; |
|
e02f7d142ce9
Fix segmentation fault for gray16le to gray conversion.
ivo
parents:
4624
diff
changeset
|
1951 tmpsrc.data[0]++; |
|
e02f7d142ce9
Fix segmentation fault for gray16le to gray conversion.
ivo
parents:
4624
diff
changeset
|
1952 gray16_to_gray(dst, &tmpsrc, width, height); |
| 4066 | 1953 } |
| 1954 | |
| 1955 static void gray16_to_gray16(AVPicture *dst, const AVPicture *src, | |
| 1956 int width, int height) | |
| 1957 { | |
| 1958 int x, y, src_wrap, dst_wrap; | |
| 1959 uint16_t *s, *d; | |
|
6198
e09251439406
cast to dest type, fix warning imgconvert.c:1958: warning: assignment from incompatible pointer type
bcoudurier
parents:
6040
diff
changeset
|
1960 s = (uint16_t*)src->data[0]; |
| 4066 | 1961 src_wrap = (src->linesize[0] - width * 2)/2; |
|
6198
e09251439406
cast to dest type, fix warning imgconvert.c:1958: warning: assignment from incompatible pointer type
bcoudurier
parents:
6040
diff
changeset
|
1962 d = (uint16_t*)dst->data[0]; |
| 4066 | 1963 dst_wrap = (dst->linesize[0] - width * 2)/2; |
| 1964 for(y=0; y<height; y++){ | |
| 1965 for(x=0; x<width; x++){ | |
| 1966 *d++ = bswap_16(*s++); | |
| 1967 } | |
| 1968 s += src_wrap; | |
| 1969 d += dst_wrap; | |
| 1970 } | |
| 1971 } | |
| 1972 | |
| 1973 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1974 typedef struct ConvertEntry { |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1975 void (*convert)(AVPicture *dst, |
| 2979 | 1976 const AVPicture *src, int width, int height); |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1977 } ConvertEntry; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1978 |
| 5355 | 1979 /* Add each new conversion function in this table. In order to be able |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1980 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
|
1981 must be satisfied: |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1982 |
| 2967 | 1983 - all FF_COLOR_RGB formats must convert to and from PIX_FMT_RGB24 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1984 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1985 - 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
|
1986 |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
1987 - all FF_COLOR_RGB formats with alpha must convert to and from PIX_FMT_RGB32 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1988 |
| 1205 | 1989 - 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
|
1990 PIX_FMT_RGB24. |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1991 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1992 - PIX_FMT_422 must convert to and from PIX_FMT_422P. |
| 1205 | 1993 |
| 5963 | 1994 The other conversion functions are just optimizations for common cases. |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1995 */ |
| 3420 | 1996 static const ConvertEntry convert_table[PIX_FMT_NB][PIX_FMT_NB] = { |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1997 [PIX_FMT_YUV420P] = { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
1998 [PIX_FMT_YUYV422] = { |
| 4517 | 1999 .convert = yuv420p_to_yuyv422, |
|
2326
fe1986d6230f
YUV420P to YUV422 conversion routine by (Danny Laarmans <dlaarmans at androme dot com>)
michael
parents:
2320
diff
changeset
|
2000 }, |
| 2967 | 2001 [PIX_FMT_RGB555] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2002 .convert = yuv420p_to_rgb555 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2003 }, |
| 2967 | 2004 [PIX_FMT_RGB565] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2005 .convert = yuv420p_to_rgb565 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2006 }, |
| 2967 | 2007 [PIX_FMT_BGR24] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2008 .convert = yuv420p_to_bgr24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2009 }, |
| 2967 | 2010 [PIX_FMT_RGB24] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2011 .convert = yuv420p_to_rgb24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2012 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2013 [PIX_FMT_RGB32] = { |
| 4515 | 2014 .convert = yuv420p_to_rgb32 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2015 }, |
| 2979 | 2016 [PIX_FMT_UYVY422] = { |
|
2366
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
2017 .convert = yuv420p_to_uyvy422, |
|
270666128b07
YUV420P to UYVY422 conversion patch by (Luca Abeni <lucabe72 >< email >< it>)
michael
parents:
2326
diff
changeset
|
2018 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2019 }, |
| 2967 | 2020 [PIX_FMT_YUV422P] = { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2021 [PIX_FMT_YUYV422] = { |
| 4517 | 2022 .convert = yuv422p_to_yuyv422, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2023 }, |
| 2967 | 2024 [PIX_FMT_UYVY422] = { |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2025 .convert = yuv422p_to_uyvy422, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2026 }, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2027 }, |
| 2967 | 2028 [PIX_FMT_YUV444P] = { |
| 2029 [PIX_FMT_RGB24] = { | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2030 .convert = yuv444p_to_rgb24 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2031 }, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2032 }, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2033 [PIX_FMT_YUVJ420P] = { |
| 2967 | 2034 [PIX_FMT_RGB555] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2035 .convert = yuvj420p_to_rgb555 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2036 }, |
| 2967 | 2037 [PIX_FMT_RGB565] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2038 .convert = yuvj420p_to_rgb565 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2039 }, |
| 2967 | 2040 [PIX_FMT_BGR24] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2041 .convert = yuvj420p_to_bgr24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2042 }, |
| 2967 | 2043 [PIX_FMT_RGB24] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2044 .convert = yuvj420p_to_rgb24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2045 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2046 [PIX_FMT_RGB32] = { |
| 4515 | 2047 .convert = yuvj420p_to_rgb32 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2048 }, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2049 }, |
| 2967 | 2050 [PIX_FMT_YUVJ444P] = { |
| 2051 [PIX_FMT_RGB24] = { | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2052 .convert = yuvj444p_to_rgb24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2053 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2054 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2055 [PIX_FMT_YUYV422] = { |
| 2967 | 2056 [PIX_FMT_YUV420P] = { |
| 4517 | 2057 .convert = yuyv422_to_yuv420p, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2058 }, |
| 2967 | 2059 [PIX_FMT_YUV422P] = { |
| 4517 | 2060 .convert = yuyv422_to_yuv422p, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2061 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2062 }, |
| 2967 | 2063 [PIX_FMT_UYVY422] = { |
| 2064 [PIX_FMT_YUV420P] = { | |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2065 .convert = uyvy422_to_yuv420p, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2066 }, |
| 2967 | 2067 [PIX_FMT_YUV422P] = { |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2068 .convert = uyvy422_to_yuv422p, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2069 }, |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2070 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2071 [PIX_FMT_RGB24] = { |
| 2967 | 2072 [PIX_FMT_YUV420P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2073 .convert = rgb24_to_yuv420p |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2074 }, |
| 2967 | 2075 [PIX_FMT_RGB565] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2076 .convert = rgb24_to_rgb565 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2077 }, |
| 2967 | 2078 [PIX_FMT_RGB555] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2079 .convert = rgb24_to_rgb555 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2080 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2081 [PIX_FMT_RGB32] = { |
| 4515 | 2082 .convert = rgb24_to_rgb32 |
| 1204 | 2083 }, |
| 2967 | 2084 [PIX_FMT_BGR24] = { |
| 1204 | 2085 .convert = rgb24_to_bgr24 |
| 2086 }, | |
| 2967 | 2087 [PIX_FMT_GRAY8] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2088 .convert = rgb24_to_gray |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2089 }, |
| 1204 | 2090 [PIX_FMT_PAL8] = { |
| 1055 | 2091 .convert = rgb24_to_pal8 |
| 2092 }, | |
| 2967 | 2093 [PIX_FMT_YUV444P] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2094 .convert = rgb24_to_yuv444p |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2095 }, |
| 2967 | 2096 [PIX_FMT_YUVJ420P] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2097 .convert = rgb24_to_yuvj420p |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2098 }, |
| 2967 | 2099 [PIX_FMT_YUVJ444P] = { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2100 .convert = rgb24_to_yuvj444p |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2101 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2102 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2103 [PIX_FMT_RGB32] = { |
| 2967 | 2104 [PIX_FMT_RGB24] = { |
| 4515 | 2105 .convert = rgb32_to_rgb24 |
| 1204 | 2106 }, |
|
4201
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2107 [PIX_FMT_BGR24] = { |
| 4515 | 2108 .convert = rgb32_to_bgr24 |
|
4201
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2109 }, |
|
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2110 [PIX_FMT_RGB565] = { |
| 4515 | 2111 .convert = rgb32_to_rgb565 |
|
4201
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2112 }, |
| 2967 | 2113 [PIX_FMT_RGB555] = { |
| 4515 | 2114 .convert = rgb32_to_rgb555 |
| 1204 | 2115 }, |
| 2967 | 2116 [PIX_FMT_PAL8] = { |
| 4515 | 2117 .convert = rgb32_to_pal8 |
| 1204 | 2118 }, |
| 2967 | 2119 [PIX_FMT_YUV420P] = { |
| 4515 | 2120 .convert = rgb32_to_yuv420p |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2121 }, |
| 2967 | 2122 [PIX_FMT_GRAY8] = { |
| 4515 | 2123 .convert = rgb32_to_gray |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2124 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2125 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2126 [PIX_FMT_BGR24] = { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2127 [PIX_FMT_RGB32] = { |
| 4515 | 2128 .convert = bgr24_to_rgb32 |
|
4201
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2129 }, |
| 2967 | 2130 [PIX_FMT_RGB24] = { |
| 1204 | 2131 .convert = bgr24_to_rgb24 |
| 2132 }, | |
| 2967 | 2133 [PIX_FMT_YUV420P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2134 .convert = bgr24_to_yuv420p |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2135 }, |
| 2967 | 2136 [PIX_FMT_GRAY8] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2137 .convert = bgr24_to_gray |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2138 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2139 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2140 [PIX_FMT_RGB555] = { |
| 2967 | 2141 [PIX_FMT_RGB24] = { |
| 1204 | 2142 .convert = rgb555_to_rgb24 |
| 2143 }, | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2144 [PIX_FMT_RGB32] = { |
| 4515 | 2145 .convert = rgb555_to_rgb32 |
| 1204 | 2146 }, |
| 2967 | 2147 [PIX_FMT_YUV420P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2148 .convert = rgb555_to_yuv420p |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2149 }, |
| 2967 | 2150 [PIX_FMT_GRAY8] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2151 .convert = rgb555_to_gray |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2152 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2153 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2154 [PIX_FMT_RGB565] = { |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2155 [PIX_FMT_RGB32] = { |
| 4515 | 2156 .convert = rgb565_to_rgb32 |
|
4201
c4f87cfd5b20
changed rgba32_to routines to support both alpha and non-alpha formats (see r7066 too)
alex
parents:
4176
diff
changeset
|
2157 }, |
| 2967 | 2158 [PIX_FMT_RGB24] = { |
| 1204 | 2159 .convert = rgb565_to_rgb24 |
| 2160 }, | |
| 2967 | 2161 [PIX_FMT_YUV420P] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2162 .convert = rgb565_to_yuv420p |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2163 }, |
| 2967 | 2164 [PIX_FMT_GRAY8] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2165 .convert = rgb565_to_gray |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2166 }, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2167 }, |
| 4066 | 2168 [PIX_FMT_GRAY16BE] = { |
| 2169 [PIX_FMT_GRAY8] = { | |
| 2170 .convert = gray16be_to_gray | |
| 2171 }, | |
| 2172 [PIX_FMT_GRAY16LE] = { | |
| 2173 .convert = gray16_to_gray16 | |
| 2174 }, | |
| 2175 }, | |
| 2176 [PIX_FMT_GRAY16LE] = { | |
| 2177 [PIX_FMT_GRAY8] = { | |
| 2178 .convert = gray16le_to_gray | |
| 2179 }, | |
| 2180 [PIX_FMT_GRAY16BE] = { | |
| 2181 .convert = gray16_to_gray16 | |
| 2182 }, | |
| 2183 }, | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2184 [PIX_FMT_GRAY8] = { |
| 2967 | 2185 [PIX_FMT_RGB555] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2186 .convert = gray_to_rgb555 |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2187 }, |
| 2967 | 2188 [PIX_FMT_RGB565] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2189 .convert = gray_to_rgb565 |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2190 }, |
| 2967 | 2191 [PIX_FMT_RGB24] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2192 .convert = gray_to_rgb24 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2193 }, |
| 2967 | 2194 [PIX_FMT_BGR24] = { |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2195 .convert = gray_to_bgr24 |
|
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2196 }, |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2197 [PIX_FMT_RGB32] = { |
| 4515 | 2198 .convert = gray_to_rgb32 |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2199 }, |
| 2967 | 2200 [PIX_FMT_MONOWHITE] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2201 .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
|
2202 }, |
| 2967 | 2203 [PIX_FMT_MONOBLACK] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2204 .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
|
2205 }, |
| 4066 | 2206 [PIX_FMT_GRAY16LE] = { |
| 2207 .convert = gray_to_gray16 | |
| 2208 }, | |
| 2209 [PIX_FMT_GRAY16BE] = { | |
| 2210 .convert = gray_to_gray16 | |
| 2211 }, | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2212 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2213 [PIX_FMT_MONOWHITE] = { |
| 2967 | 2214 [PIX_FMT_GRAY8] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2215 .convert = monowhite_to_gray |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2216 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2217 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2218 [PIX_FMT_MONOBLACK] = { |
| 2967 | 2219 [PIX_FMT_GRAY8] = { |
|
1014
48349e11c9b2
C99 initializers and kill warnings patch by (mru at users dot sourceforge dot net (M?ns Rullg?rd))
michaelni
parents:
993
diff
changeset
|
2220 .convert = monoblack_to_gray |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2221 }, |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2222 }, |
| 1055 | 2223 [PIX_FMT_PAL8] = { |
| 2967 | 2224 [PIX_FMT_RGB555] = { |
| 1055 | 2225 .convert = pal8_to_rgb555 |
| 2226 }, | |
| 2967 | 2227 [PIX_FMT_RGB565] = { |
| 1055 | 2228 .convert = pal8_to_rgb565 |
| 2229 }, | |
| 2967 | 2230 [PIX_FMT_BGR24] = { |
| 1055 | 2231 .convert = pal8_to_bgr24 |
| 2232 }, | |
| 2967 | 2233 [PIX_FMT_RGB24] = { |
| 1055 | 2234 .convert = pal8_to_rgb24 |
| 2235 }, | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2236 [PIX_FMT_RGB32] = { |
| 4515 | 2237 .convert = pal8_to_rgb32 |
| 1055 | 2238 }, |
| 2239 }, | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2240 [PIX_FMT_UYYVYY411] = { |
| 2967 | 2241 [PIX_FMT_YUV411P] = { |
| 4516 | 2242 .convert = uyyvyy411_to_yuv411p, |
| 2309 | 2243 }, |
| 2244 }, | |
| 2245 | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2246 }; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2247 |
| 1508 | 2248 int avpicture_alloc(AVPicture *picture, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2249 int pix_fmt, int width, int height) |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2250 { |
|
3266
3b785e80ce3e
make "size" variable in avpicture_alloc signed, since avpicture_get_size
reimar
parents:
3257
diff
changeset
|
2251 int size; |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2252 void *ptr; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2253 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2254 size = avpicture_get_size(pix_fmt, width, height); |
| 2422 | 2255 if(size<0) |
| 2256 goto fail; | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2257 ptr = av_malloc(size); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2258 if (!ptr) |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2259 goto fail; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2260 avpicture_fill(picture, ptr, pix_fmt, width, height); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2261 return 0; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2262 fail: |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2263 memset(picture, 0, sizeof(AVPicture)); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2264 return -1; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2265 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2266 |
| 1508 | 2267 void avpicture_free(AVPicture *picture) |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2268 { |
|
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
1028
diff
changeset
|
2269 av_free(picture->data[0]); |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2270 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2271 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2272 /* return true if yuv planar */ |
| 3420 | 2273 static inline int is_yuv_planar(const PixFmtInfo *ps) |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2274 { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2275 return (ps->color_type == FF_COLOR_YUV || |
| 2967 | 2276 ps->color_type == FF_COLOR_YUV_JPEG) && |
| 1204 | 2277 ps->pixel_type == FF_PIXEL_PLANAR; |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2278 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2279 |
|
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2280 int av_picture_crop(AVPicture *dst, const AVPicture *src, |
| 3179 | 2281 int pix_fmt, int top_band, int left_band) |
| 2282 { | |
| 2283 int y_shift; | |
| 2284 int x_shift; | |
| 2285 | |
| 2286 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || !is_yuv_planar(&pix_fmt_info[pix_fmt])) | |
| 2287 return -1; | |
| 2288 | |
| 2289 y_shift = pix_fmt_info[pix_fmt].y_chroma_shift; | |
| 2290 x_shift = pix_fmt_info[pix_fmt].x_chroma_shift; | |
| 2291 | |
| 2292 dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band; | |
| 2293 dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift); | |
| 2294 dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift); | |
| 2295 | |
| 2296 dst->linesize[0] = src->linesize[0]; | |
| 2297 dst->linesize[1] = src->linesize[1]; | |
| 2298 dst->linesize[2] = src->linesize[2]; | |
| 2299 return 0; | |
| 2300 } | |
| 2301 | |
|
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2302 int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, |
| 4358 | 2303 int pix_fmt, int padtop, int padbottom, int padleft, int padright, |
| 2304 int *color) | |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2305 { |
|
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2306 uint8_t *optr; |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2307 int y_shift; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2308 int x_shift; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2309 int yheight; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2310 int i, y; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2311 |
| 4358 | 2312 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || |
| 2313 !is_yuv_planar(&pix_fmt_info[pix_fmt])) return -1; | |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2314 |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2315 for (i = 0; i < 3; i++) { |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2316 x_shift = i ? pix_fmt_info[pix_fmt].x_chroma_shift : 0; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2317 y_shift = i ? pix_fmt_info[pix_fmt].y_chroma_shift : 0; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2318 |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2319 if (padtop || padleft) { |
| 4358 | 2320 memset(dst->data[i], color[i], |
| 2321 dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift)); | |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2322 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2323 |
|
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2324 if (padleft || padright) { |
| 4358 | 2325 optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + |
| 2326 (dst->linesize[i] - (padright >> x_shift)); | |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2327 yheight = (height - 1 - (padtop + padbottom)) >> y_shift; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2328 for (y = 0; y < yheight; y++) { |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2329 memset(optr, color[i], (padleft + padright) >> x_shift); |
|
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2330 optr += dst->linesize[i]; |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2331 } |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2332 } |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2333 |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2334 if (src) { /* first line */ |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2335 uint8_t *iptr = src->data[i]; |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2336 optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2337 (padleft >> x_shift); |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2338 memcpy(optr, iptr, src->linesize[i]); |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2339 iptr += src->linesize[i]; |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2340 optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2341 (dst->linesize[i] - (padright >> x_shift)); |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2342 yheight = (height - 1 - (padtop + padbottom)) >> y_shift; |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2343 for (y = 0; y < yheight; y++) { |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2344 memset(optr, color[i], (padleft + padright) >> x_shift); |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2345 memcpy(optr + ((padleft + padright) >> x_shift), iptr, |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2346 src->linesize[i]); |
|
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
2347 iptr += src->linesize[i]; |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2348 optr += dst->linesize[i]; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2349 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2350 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2351 |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2352 if (padbottom || padright) { |
| 4358 | 2353 optr = dst->data[i] + dst->linesize[i] * |
| 2354 ((height - padbottom) >> y_shift) - (padright >> x_shift); | |
| 2355 memset(optr, color[i],dst->linesize[i] * | |
| 2356 (padbottom >> y_shift) + (padright >> x_shift)); | |
|
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2357 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2358 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2359 return 0; |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2360 } |
|
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
2361 |
|
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2362 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2363 void img_copy(AVPicture *dst, const AVPicture *src, |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2364 int pix_fmt, int width, int height) |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2365 { |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2366 av_picture_copy(dst, src, pix_fmt, width, height); |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2367 } |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2368 |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2369 int img_crop(AVPicture *dst, const AVPicture *src, |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2370 int pix_fmt, int top_band, int left_band) |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2371 { |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2372 return av_picture_crop(dst, src, pix_fmt, top_band, left_band); |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2373 } |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2374 |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2375 int img_pad(AVPicture *dst, const AVPicture *src, int height, int width, |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2376 int pix_fmt, int padtop, int padbottom, int padleft, int padright, |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2377 int *color) |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2378 { |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2379 return av_picture_pad(dst, src, height, width, pix_fmt, padtop, padbottom, padleft, padright, color); |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2380 } |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2381 #endif |
|
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2382 |
| 3558 | 2383 #ifndef CONFIG_SWSCALER |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2384 /* 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
|
2385 int img_convert(AVPicture *dst, int dst_pix_fmt, |
| 2967 | 2386 const AVPicture *src, int src_pix_fmt, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2387 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
|
2388 { |
| 6350 | 2389 static int initialized; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2390 int i, ret, dst_width, dst_height, int_pix_fmt; |
| 3420 | 2391 const PixFmtInfo *src_pix, *dst_pix; |
| 2392 const ConvertEntry *ce; | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2393 AVPicture tmp1, *tmp = &tmp1; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2394 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2395 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
|
2396 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
|
2397 return -1; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2398 if (src_width <= 0 || src_height <= 0) |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2399 return 0; |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2400 |
| 6350 | 2401 if (!initialized) { |
| 2402 initialized = 1; | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2403 img_convert_init(); |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2404 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2405 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2406 dst_width = src_width; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2407 dst_height = src_height; |
|
1022
d651df667898
added gray<->RGB functions - fixed rgb<->yuv functions for non RGB24 case
bellard
parents:
1020
diff
changeset
|
2408 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2409 dst_pix = &pix_fmt_info[dst_pix_fmt]; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2410 src_pix = &pix_fmt_info[src_pix_fmt]; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2411 if (src_pix_fmt == dst_pix_fmt) { |
| 1204 | 2412 /* no conversion needed: just copy */ |
|
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
2413 av_picture_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
|
2414 return 0; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2415 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2416 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2417 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
|
2418 if (ce->convert) { |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2419 /* specific conversion routine */ |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2420 ce->convert(dst, src, dst_width, dst_height); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2421 return 0; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2422 } |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2423 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2424 /* gray to YUV */ |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2425 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
|
2426 src_pix_fmt == PIX_FMT_GRAY8) { |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2427 int w, h, y; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2428 uint8_t *d; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2429 |
|
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
2430 if (dst_pix->color_type == FF_COLOR_YUV_JPEG) { |
| 3245 | 2431 ff_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
|
2432 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
|
2433 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
|
2434 } else { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2435 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
|
2436 src->data[0], src->linesize[0], |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2437 dst_width, dst_height, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2438 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
|
2439 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2440 /* fill U and V with 128 */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2441 w = dst_width; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2442 h = dst_height; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2443 w >>= dst_pix->x_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2444 h >>= dst_pix->y_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2445 for(i = 1; i <= 2; i++) { |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2446 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
|
2447 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
|
2448 memset(d, 128, w); |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2449 d += dst->linesize[i]; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2450 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2451 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2452 return 0; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2453 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2454 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2455 /* YUV to gray */ |
| 2967 | 2456 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
|
2457 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
|
2458 if (src_pix->color_type == FF_COLOR_YUV_JPEG) { |
| 3245 | 2459 ff_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
|
2460 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
|
2461 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
|
2462 } else { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2463 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
|
2464 src->data[0], src->linesize[0], |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2465 dst_width, dst_height, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2466 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
|
2467 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2468 return 0; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2469 } |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2470 |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2471 /* YUV to YUV planar */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2472 if (is_yuv_planar(dst_pix) && is_yuv_planar(src_pix)) { |
| 1205 | 2473 int x_shift, y_shift, w, h, xy_shift; |
| 2967 | 2474 void (*resize_func)(uint8_t *dst, int dst_wrap, |
| 1205 | 2475 const uint8_t *src, int src_wrap, |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2476 int width, int height); |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2477 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2478 /* compute chroma size of the smallest dimensions */ |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2479 w = dst_width; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2480 h = dst_height; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2481 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
|
2482 w >>= dst_pix->x_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2483 else |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2484 w >>= src_pix->x_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2485 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
|
2486 h >>= dst_pix->y_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2487 else |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2488 h >>= src_pix->y_chroma_shift; |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2489 |
|
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2490 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
|
2491 y_shift = (dst_pix->y_chroma_shift - src_pix->y_chroma_shift); |
| 1205 | 2492 xy_shift = ((x_shift & 0xf) << 4) | (y_shift & 0xf); |
| 2493 /* there must be filters for conversion at least from and to | |
| 2494 YUV444 format */ | |
| 2495 switch(xy_shift) { | |
| 2496 case 0x00: | |
| 3245 | 2497 resize_func = ff_img_copy_plane; |
| 1205 | 2498 break; |
| 2499 case 0x10: | |
| 2500 resize_func = shrink21; | |
| 2501 break; | |
| 2502 case 0x20: | |
| 2503 resize_func = shrink41; | |
| 2504 break; | |
| 2505 case 0x01: | |
| 2506 resize_func = shrink12; | |
| 2507 break; | |
| 2508 case 0x11: | |
| 3245 | 2509 resize_func = ff_shrink22; |
| 1205 | 2510 break; |
| 2511 case 0x22: | |
| 3245 | 2512 resize_func = ff_shrink44; |
| 1205 | 2513 break; |
| 2514 case 0xf0: | |
| 2515 resize_func = grow21; | |
| 2516 break; | |
| 5363 | 2517 case 0x0f: |
| 2518 resize_func = grow12; | |
| 2519 break; | |
| 1205 | 2520 case 0xe0: |
| 2521 resize_func = grow41; | |
| 2522 break; | |
| 2523 case 0xff: | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2524 resize_func = grow22; |
| 1205 | 2525 break; |
| 2526 case 0xee: | |
| 2527 resize_func = grow44; | |
| 2528 break; | |
| 2529 case 0xf1: | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2530 resize_func = conv411; |
| 1205 | 2531 break; |
| 2532 default: | |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2533 /* currently not handled */ |
| 1205 | 2534 goto no_chroma_filter; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2535 } |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2536 |
| 3245 | 2537 ff_img_copy_plane(dst->data[0], dst->linesize[0], |
| 1204 | 2538 src->data[0], src->linesize[0], |
| 2539 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
|
2540 |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2541 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
|
2542 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
|
2543 src->data[i], src->linesize[i], |
| 1073 | 2544 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
|
2545 /* 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
|
2546 the destination image */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2547 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
|
2548 const uint8_t *y_table, *c_table; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2549 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
|
2550 y_table = y_jpeg_to_ccir; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2551 c_table = c_jpeg_to_ccir; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2552 } else { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2553 y_table = y_ccir_to_jpeg; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2554 c_table = c_ccir_to_jpeg; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2555 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2556 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
|
2557 dst->data[0], dst->linesize[0], |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2558 dst_width, dst_height, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2559 y_table); |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2560 |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2561 for(i = 1;i <= 2; i++) |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2562 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
|
2563 dst->data[i], dst->linesize[i], |
| 2967 | 2564 dst_width>>dst_pix->x_chroma_shift, |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2565 dst_height>>dst_pix->y_chroma_shift, |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2566 c_table); |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2567 } |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2568 return 0; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2569 } |
| 1205 | 2570 no_chroma_filter: |
|
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
2571 |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2572 /* try to use an intermediate format */ |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2573 if (src_pix_fmt == PIX_FMT_YUYV422 || |
|
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2574 dst_pix_fmt == PIX_FMT_YUYV422) { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2575 /* specific case: convert to YUV422P first */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2576 int_pix_fmt = PIX_FMT_YUV422P; |
|
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2577 } else if (src_pix_fmt == PIX_FMT_UYVY422 || |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2578 dst_pix_fmt == PIX_FMT_UYVY422) { |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2579 /* specific case: convert to YUV422P first */ |
|
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
2580 int_pix_fmt = PIX_FMT_YUV422P; |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2581 } else if (src_pix_fmt == PIX_FMT_UYYVYY411 || |
|
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2582 dst_pix_fmt == PIX_FMT_UYYVYY411) { |
| 2309 | 2583 /* specific case: convert to YUV411P first */ |
| 2584 int_pix_fmt = PIX_FMT_YUV411P; | |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2585 } else if ((src_pix->color_type == FF_COLOR_GRAY && |
| 2967 | 2586 src_pix_fmt != PIX_FMT_GRAY8) || |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2587 (dst_pix->color_type == FF_COLOR_GRAY && |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2588 dst_pix_fmt != PIX_FMT_GRAY8)) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2589 /* 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
|
2590 int_pix_fmt = PIX_FMT_GRAY8; |
| 2967 | 2591 } else if ((is_yuv_planar(src_pix) && |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2592 src_pix_fmt != PIX_FMT_YUV444P && |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2593 src_pix_fmt != PIX_FMT_YUVJ444P)) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2594 /* yuv444 is the normalized format */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2595 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
|
2596 int_pix_fmt = PIX_FMT_YUVJ444P; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2597 else |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2598 int_pix_fmt = PIX_FMT_YUV444P; |
| 2967 | 2599 } else if ((is_yuv_planar(dst_pix) && |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2600 dst_pix_fmt != PIX_FMT_YUV444P && |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2601 dst_pix_fmt != PIX_FMT_YUVJ444P)) { |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2602 /* yuv444 is the normalized format */ |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2603 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
|
2604 int_pix_fmt = PIX_FMT_YUVJ444P; |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2605 else |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2606 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
|
2607 } else { |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2608 /* 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
|
2609 if (src_pix->is_alpha && dst_pix->is_alpha) |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2610 int_pix_fmt = PIX_FMT_RGB32; |
|
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2611 else |
|
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
2612 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
|
2613 } |
|
6040
08e4fbdbf554
avoid infinite loop if pixel format conversion does not exist
bcoudurier
parents:
5963
diff
changeset
|
2614 if (src_pix_fmt == int_pix_fmt) |
|
08e4fbdbf554
avoid infinite loop if pixel format conversion does not exist
bcoudurier
parents:
5963
diff
changeset
|
2615 return -1; |
|
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2616 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
|
2617 return -1; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2618 ret = -1; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2619 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
|
2620 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
|
2621 goto fail1; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2622 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
|
2623 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
|
2624 goto fail1; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2625 ret = 0; |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2626 fail1: |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2627 avpicture_free(tmp); |
|
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
2628 return ret; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2629 } |
| 3558 | 2630 #endif |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2631 |
| 1208 | 2632 /* NOTE: we scan all the pixels to have an exact information */ |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2633 static int get_alpha_info_pal8(const AVPicture *src, int width, int height) |
| 1208 | 2634 { |
| 2635 const unsigned char *p; | |
| 2636 int src_wrap, ret, x, y; | |
| 2637 unsigned int a; | |
| 2638 uint32_t *palette = (uint32_t *)src->data[1]; | |
| 2967 | 2639 |
| 1208 | 2640 p = src->data[0]; |
| 2641 src_wrap = src->linesize[0] - width; | |
| 2642 ret = 0; | |
| 2643 for(y=0;y<height;y++) { | |
| 2644 for(x=0;x<width;x++) { | |
| 2645 a = palette[p[0]] >> 24; | |
| 2646 if (a == 0x00) { | |
| 2647 ret |= FF_ALPHA_TRANSP; | |
| 2648 } else if (a != 0xff) { | |
| 2649 ret |= FF_ALPHA_SEMI_TRANSP; | |
| 2650 } | |
| 2651 p++; | |
| 2652 } | |
| 2653 p += src_wrap; | |
| 2654 } | |
| 2655 return ret; | |
| 2656 } | |
| 2657 | |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2658 int img_get_alpha_info(const AVPicture *src, |
| 2979 | 2659 int pix_fmt, int width, int height) |
| 1208 | 2660 { |
| 3420 | 2661 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; |
| 1208 | 2662 int ret; |
| 2663 | |
| 2664 pf = &pix_fmt_info[pix_fmt]; | |
| 2665 /* no alpha can be represented in format */ | |
| 2666 if (!pf->is_alpha) | |
| 2667 return 0; | |
| 2668 switch(pix_fmt) { | |
|
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
2669 case PIX_FMT_RGB32: |
| 4515 | 2670 ret = get_alpha_info_rgb32(src, width, height); |
| 1208 | 2671 break; |
| 2672 case PIX_FMT_PAL8: | |
| 2673 ret = get_alpha_info_pal8(src, width, height); | |
| 2674 break; | |
| 2675 default: | |
| 2676 /* we do not know, so everything is indicated */ | |
| 2677 ret = FF_ALPHA_TRANSP | FF_ALPHA_SEMI_TRANSP; | |
| 2678 break; | |
| 2679 } | |
| 2680 return ret; | |
| 2681 } | |
| 801 | 2682 |
| 2683 #ifdef HAVE_MMX | |
| 2684 #define DEINT_INPLACE_LINE_LUM \ | |
| 2685 movd_m2r(lum_m4[0],mm0);\ | |
| 2686 movd_m2r(lum_m3[0],mm1);\ | |
| 2687 movd_m2r(lum_m2[0],mm2);\ | |
| 2688 movd_m2r(lum_m1[0],mm3);\ | |
| 2689 movd_m2r(lum[0],mm4);\ | |
| 2690 punpcklbw_r2r(mm7,mm0);\ | |
| 2691 movd_r2m(mm2,lum_m4[0]);\ | |
| 2692 punpcklbw_r2r(mm7,mm1);\ | |
| 2693 punpcklbw_r2r(mm7,mm2);\ | |
| 2694 punpcklbw_r2r(mm7,mm3);\ | |
| 2695 punpcklbw_r2r(mm7,mm4);\ | |
| 2696 paddw_r2r(mm3,mm1);\ | |
| 2697 psllw_i2r(1,mm2);\ | |
| 2698 paddw_r2r(mm4,mm0);\ | |
| 2699 psllw_i2r(2,mm1);\ | |
| 2700 paddw_r2r(mm6,mm2);\ | |
| 2701 paddw_r2r(mm2,mm1);\ | |
| 2702 psubusw_r2r(mm0,mm1);\ | |
| 2703 psrlw_i2r(3,mm1);\ | |
| 2704 packuswb_r2r(mm7,mm1);\ | |
| 2705 movd_r2m(mm1,lum_m2[0]); | |
| 2706 | |
| 2707 #define DEINT_LINE_LUM \ | |
| 2708 movd_m2r(lum_m4[0],mm0);\ | |
| 2709 movd_m2r(lum_m3[0],mm1);\ | |
| 2710 movd_m2r(lum_m2[0],mm2);\ | |
| 2711 movd_m2r(lum_m1[0],mm3);\ | |
| 2712 movd_m2r(lum[0],mm4);\ | |
| 2713 punpcklbw_r2r(mm7,mm0);\ | |
| 2714 punpcklbw_r2r(mm7,mm1);\ | |
| 2715 punpcklbw_r2r(mm7,mm2);\ | |
| 2716 punpcklbw_r2r(mm7,mm3);\ | |
| 2717 punpcklbw_r2r(mm7,mm4);\ | |
| 2718 paddw_r2r(mm3,mm1);\ | |
| 2719 psllw_i2r(1,mm2);\ | |
| 2720 paddw_r2r(mm4,mm0);\ | |
| 2721 psllw_i2r(2,mm1);\ | |
| 2722 paddw_r2r(mm6,mm2);\ | |
| 2723 paddw_r2r(mm2,mm1);\ | |
| 2724 psubusw_r2r(mm0,mm1);\ | |
| 2725 psrlw_i2r(3,mm1);\ | |
| 2726 packuswb_r2r(mm7,mm1);\ | |
| 2727 movd_r2m(mm1,dst[0]); | |
| 2728 #endif | |
| 2729 | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2730 /* filter parameters: [-1 4 2 4 -1] // 8 */ |
| 2967 | 2731 static void deinterlace_line(uint8_t *dst, |
| 2979 | 2732 const uint8_t *lum_m4, const uint8_t *lum_m3, |
| 2733 const uint8_t *lum_m2, const uint8_t *lum_m1, | |
| 2734 const uint8_t *lum, | |
| 2735 int size) | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2736 { |
| 801 | 2737 #ifndef HAVE_MMX |
| 4176 | 2738 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2739 int sum; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2740 |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2741 for(;size > 0;size--) { |
| 801 | 2742 sum = -lum_m4[0]; |
| 2743 sum += lum_m3[0] << 2; | |
| 2744 sum += lum_m2[0] << 1; | |
| 2745 sum += lum_m1[0] << 2; | |
| 2746 sum += -lum[0]; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2747 dst[0] = cm[(sum + 4) >> 3]; |
| 801 | 2748 lum_m4++; |
| 2749 lum_m3++; | |
| 2750 lum_m2++; | |
| 2751 lum_m1++; | |
| 2752 lum++; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2753 dst++; |
| 801 | 2754 } |
| 2755 #else | |
| 2756 | |
| 1044 | 2757 { |
| 2758 mmx_t rounder; | |
| 2759 rounder.uw[0]=4; | |
| 2760 rounder.uw[1]=4; | |
| 2761 rounder.uw[2]=4; | |
| 2762 rounder.uw[3]=4; | |
| 2763 pxor_r2r(mm7,mm7); | |
| 2764 movq_m2r(rounder,mm6); | |
| 2765 } | |
| 801 | 2766 for (;size > 3; size-=4) { |
| 2767 DEINT_LINE_LUM | |
| 2768 lum_m4+=4; | |
| 2769 lum_m3+=4; | |
| 2770 lum_m2+=4; | |
| 2771 lum_m1+=4; | |
| 2772 lum+=4; | |
| 2773 dst+=4; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2774 } |
| 801 | 2775 #endif |
| 2776 } | |
| 1064 | 2777 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 | 2778 int size) |
| 2779 { | |
| 2780 #ifndef HAVE_MMX | |
| 4176 | 2781 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
| 801 | 2782 int sum; |
| 2783 | |
| 2784 for(;size > 0;size--) { | |
| 2785 sum = -lum_m4[0]; | |
| 2786 sum += lum_m3[0] << 2; | |
| 2787 sum += lum_m2[0] << 1; | |
| 2788 lum_m4[0]=lum_m2[0]; | |
| 2789 sum += lum_m1[0] << 2; | |
| 2790 sum += -lum[0]; | |
| 2791 lum_m2[0] = cm[(sum + 4) >> 3]; | |
| 2792 lum_m4++; | |
| 2793 lum_m3++; | |
| 2794 lum_m2++; | |
| 2795 lum_m1++; | |
| 2796 lum++; | |
| 2797 } | |
| 2798 #else | |
| 2799 | |
| 1044 | 2800 { |
| 2801 mmx_t rounder; | |
| 2802 rounder.uw[0]=4; | |
| 2803 rounder.uw[1]=4; | |
| 2804 rounder.uw[2]=4; | |
| 2805 rounder.uw[3]=4; | |
| 2806 pxor_r2r(mm7,mm7); | |
| 2807 movq_m2r(rounder,mm6); | |
| 2808 } | |
| 801 | 2809 for (;size > 3; size-=4) { |
| 2810 DEINT_INPLACE_LINE_LUM | |
| 2811 lum_m4+=4; | |
| 2812 lum_m3+=4; | |
| 2813 lum_m2+=4; | |
| 2814 lum_m1+=4; | |
| 2815 lum+=4; | |
| 2816 } | |
| 2817 #endif | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2818 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2819 |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2820 /* 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
|
2821 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
|
2822 against the top field. */ |
| 1064 | 2823 static void deinterlace_bottom_field(uint8_t *dst, int dst_wrap, |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2824 const uint8_t *src1, int src_wrap, |
| 801 | 2825 int width, int height) |
| 2826 { | |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2827 const uint8_t *src_m2, *src_m1, *src_0, *src_p1, *src_p2; |
| 801 | 2828 int y; |
| 2829 | |
| 2830 src_m2 = src1; | |
| 2831 src_m1 = src1; | |
| 2832 src_0=&src_m1[src_wrap]; | |
| 2833 src_p1=&src_0[src_wrap]; | |
| 2834 src_p2=&src_p1[src_wrap]; | |
| 2835 for(y=0;y<(height-2);y+=2) { | |
| 2836 memcpy(dst,src_m1,width); | |
| 2837 dst += dst_wrap; | |
| 2838 deinterlace_line(dst,src_m2,src_m1,src_0,src_p1,src_p2,width); | |
| 2839 src_m2 = src_0; | |
| 2840 src_m1 = src_p1; | |
| 2841 src_0 = src_p2; | |
| 2842 src_p1 += 2*src_wrap; | |
| 2843 src_p2 += 2*src_wrap; | |
| 2844 dst += dst_wrap; | |
| 2845 } | |
| 2846 memcpy(dst,src_m1,width); | |
| 2847 dst += dst_wrap; | |
| 2848 /* do last line */ | |
| 2849 deinterlace_line(dst,src_m2,src_m1,src_0,src_0,src_0,width); | |
| 2850 } | |
| 2851 | |
| 1064 | 2852 static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap, |
| 2979 | 2853 int width, int height) |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2854 { |
| 1064 | 2855 uint8_t *src_m1, *src_0, *src_p1, *src_p2; |
| 801 | 2856 int y; |
| 1064 | 2857 uint8_t *buf; |
| 2858 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
|
2859 |
| 801 | 2860 src_m1 = src1; |
| 2861 memcpy(buf,src_m1,width); | |
| 2862 src_0=&src_m1[src_wrap]; | |
| 2863 src_p1=&src_0[src_wrap]; | |
| 2864 src_p2=&src_p1[src_wrap]; | |
| 2865 for(y=0;y<(height-2);y+=2) { | |
| 2866 deinterlace_line_inplace(buf,src_m1,src_0,src_p1,src_p2,width); | |
| 2867 src_m1 = src_p1; | |
| 2868 src_0 = src_p2; | |
| 2869 src_p1 += 2*src_wrap; | |
| 2870 src_p2 += 2*src_wrap; | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2871 } |
| 801 | 2872 /* do last line */ |
| 2873 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
|
2874 av_free(buf); |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2875 } |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2876 |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2877 int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, |
| 0 | 2878 int pix_fmt, int width, int height) |
| 2879 { | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2880 int i; |
| 0 | 2881 |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2882 if (pix_fmt != PIX_FMT_YUV420P && |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2883 pix_fmt != PIX_FMT_YUV422P && |
|
1425
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
2884 pix_fmt != PIX_FMT_YUV444P && |
| 5810 | 2885 pix_fmt != PIX_FMT_YUV411P && |
| 2886 pix_fmt != PIX_FMT_GRAY8) | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2887 return -1; |
| 801 | 2888 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
|
2889 return -1; |
| 801 | 2890 |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2891 for(i=0;i<3;i++) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2892 if (i == 1) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2893 switch(pix_fmt) { |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2894 case PIX_FMT_YUV420P: |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2895 width >>= 1; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2896 height >>= 1; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2897 break; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2898 case PIX_FMT_YUV422P: |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2899 width >>= 1; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2900 break; |
|
1425
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
2901 case PIX_FMT_YUV411P: |
|
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
2902 width >>= 2; |
|
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
2903 break; |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2904 default: |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2905 break; |
|
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2906 } |
| 5810 | 2907 if (pix_fmt == PIX_FMT_GRAY8) { |
| 2908 break; | |
| 2909 } | |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2910 } |
| 801 | 2911 if (src == dst) { |
|
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
2912 deinterlace_bottom_field_inplace(dst->data[i], dst->linesize[i], |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2913 width, height); |
| 801 | 2914 } else { |
| 2915 deinterlace_bottom_field(dst->data[i],dst->linesize[i], | |
| 2916 src->data[i], src->linesize[i], | |
| 2917 width, height); | |
| 2918 } | |
| 0 | 2919 } |
| 5735 | 2920 emms_c(); |
|
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
2921 return 0; |
| 0 | 2922 } |
|
440
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
2923 |
