Mercurial > libavcodec.hg
annotate imgconvert.c @ 11034:fd5921186064 libavcodec
Make the fast loop filter path work with unavailable left MBs.
This prevents the issue with having to switch between slow and
fast code paths in each row.
0.5% faster loopfilter for cathedral
author | michael |
---|---|
date | Thu, 28 Jan 2010 02:15:25 +0000 |
parents | aa8bebc96764 |
children | e1bc53867092 |
rev | line source |
---|---|
0 | 1 /* |
5355 | 2 * Misc image conversion routines |
8629
04423b2f6e0b
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
8601
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 /** | |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8631
diff
changeset
|
23 * @file libavcodec/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" |
10572
a21b640dba50
Use av_pix_fmt_descriptors in ff_is_hwaccel_pix_fmt() rather than
stefano
parents:
10569
diff
changeset
|
36 #include "libavutil/pixdesc.h" |
0 | 37 |
8590 | 38 #if HAVE_MMX |
8430 | 39 #include "x86/mmx.h" |
40 #include "x86/dsputil_mmx.h" | |
801 | 41 #endif |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
42 |
1204 | 43 #define xglue(x, y) x ## y |
44 #define glue(x, y) xglue(x, y) | |
45 | |
4549 | 46 #define FF_COLOR_RGB 0 /**< RGB color space */ |
47 #define FF_COLOR_GRAY 1 /**< gray color space */ | |
48 #define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */ | |
49 #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
|
50 |
4549 | 51 #define FF_PIXEL_PLANAR 0 /**< each channel has one component in AVPicture */ |
52 #define FF_PIXEL_PACKED 1 /**< only one components containing all the channels */ | |
53 #define FF_PIXEL_PALETTE 2 /**< one components containing indexes for a palette */ | |
1204 | 54 |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
55 typedef struct PixFmtInfo { |
4549 | 56 uint8_t nb_channels; /**< number of channels (including alpha) */ |
57 uint8_t color_type; /**< color type (see FF_COLOR_xxx constants) */ | |
58 uint8_t pixel_type; /**< pixel storage type (see FF_PIXEL_xxx constants) */ | |
59 uint8_t is_alpha : 1; /**< true if alpha can be specified */ | |
60 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
|
61 } PixFmtInfo; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
62 |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
63 /* this table gives more information about formats */ |
3420 | 64 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
|
65 /* YUV formats */ |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
66 [PIX_FMT_YUV420P] = { |
1204 | 67 .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
|
68 .color_type = FF_COLOR_YUV, |
1204 | 69 .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
|
70 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
71 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
72 [PIX_FMT_YUV422P] = { |
1204 | 73 .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
|
74 .color_type = FF_COLOR_YUV, |
1204 | 75 .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
|
76 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
77 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
78 [PIX_FMT_YUV444P] = { |
1204 | 79 .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
|
80 .color_type = FF_COLOR_YUV, |
1204 | 81 .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
|
82 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
83 }, |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
84 [PIX_FMT_YUYV422] = { |
1204 | 85 .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
|
86 .color_type = FF_COLOR_YUV, |
1204 | 87 .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
|
88 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
89 }, |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
90 [PIX_FMT_UYVY422] = { |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
91 .nb_channels = 1, |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
92 .color_type = FF_COLOR_YUV, |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
93 .pixel_type = FF_PIXEL_PACKED, |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
94 .depth = 8, |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
95 }, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
96 [PIX_FMT_YUV410P] = { |
1204 | 97 .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
|
98 .color_type = FF_COLOR_YUV, |
1204 | 99 .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
|
100 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
101 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
102 [PIX_FMT_YUV411P] = { |
1204 | 103 .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
|
104 .color_type = FF_COLOR_YUV, |
1204 | 105 .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
|
106 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
107 }, |
5363 | 108 [PIX_FMT_YUV440P] = { |
109 .nb_channels = 3, | |
110 .color_type = FF_COLOR_YUV, | |
111 .pixel_type = FF_PIXEL_PLANAR, | |
112 .depth = 8, | |
113 }, | |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
114 [PIX_FMT_YUV420P16LE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
115 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
116 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
117 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
118 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
119 }, |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
120 [PIX_FMT_YUV422P16LE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
121 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
122 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
123 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
124 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
125 }, |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
126 [PIX_FMT_YUV444P16LE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
127 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
128 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
129 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
130 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
131 }, |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
132 [PIX_FMT_YUV420P16BE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
133 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
134 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
135 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
136 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
137 }, |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
138 [PIX_FMT_YUV422P16BE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
139 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
140 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
141 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
142 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
143 }, |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
144 [PIX_FMT_YUV444P16BE] = { |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
145 .nb_channels = 3, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
146 .color_type = FF_COLOR_YUV, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
147 .pixel_type = FF_PIXEL_PLANAR, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
148 .depth = 16, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
149 }, |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
150 |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
151 |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
152 /* YUV formats with alpha plane */ |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
153 [PIX_FMT_YUVA420P] = { |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
154 .nb_channels = 4, |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
155 .color_type = FF_COLOR_YUV, |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
156 .pixel_type = FF_PIXEL_PLANAR, |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
157 .depth = 8, |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
158 }, |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
159 |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
160 /* JPEG YUV */ |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
161 [PIX_FMT_YUVJ420P] = { |
1204 | 162 .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
|
163 .color_type = FF_COLOR_YUV_JPEG, |
1204 | 164 .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
|
165 .depth = 8, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
166 }, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
167 [PIX_FMT_YUVJ422P] = { |
1204 | 168 .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
|
169 .color_type = FF_COLOR_YUV_JPEG, |
1204 | 170 .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
|
171 .depth = 8, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
172 }, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
173 [PIX_FMT_YUVJ444P] = { |
1204 | 174 .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
|
175 .color_type = FF_COLOR_YUV_JPEG, |
1204 | 176 .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
|
177 .depth = 8, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
178 }, |
5363 | 179 [PIX_FMT_YUVJ440P] = { |
180 .nb_channels = 3, | |
181 .color_type = FF_COLOR_YUV_JPEG, | |
182 .pixel_type = FF_PIXEL_PLANAR, | |
183 .depth = 8, | |
184 }, | |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
185 |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
186 /* RGB formats */ |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
187 [PIX_FMT_RGB24] = { |
1204 | 188 .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
|
189 .color_type = FF_COLOR_RGB, |
1204 | 190 .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
|
191 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
192 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
193 [PIX_FMT_BGR24] = { |
1204 | 194 .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
|
195 .color_type = FF_COLOR_RGB, |
1204 | 196 .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
|
197 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
198 }, |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
199 [PIX_FMT_ARGB] = { |
1204 | 200 .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
|
201 .color_type = FF_COLOR_RGB, |
1204 | 202 .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
|
203 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
204 }, |
9001 | 205 [PIX_FMT_RGB48BE] = { |
206 .nb_channels = 3, | |
207 .color_type = FF_COLOR_RGB, | |
208 .pixel_type = FF_PIXEL_PACKED, | |
209 .depth = 16, | |
210 }, | |
211 [PIX_FMT_RGB48LE] = { | |
212 .nb_channels = 3, | |
213 .color_type = FF_COLOR_RGB, | |
214 .pixel_type = FF_PIXEL_PACKED, | |
215 .depth = 16, | |
216 }, | |
9223
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
217 [PIX_FMT_RGB565BE] = { |
1204 | 218 .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
|
219 .color_type = FF_COLOR_RGB, |
1204 | 220 .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
|
221 .depth = 5, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
222 }, |
9223
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
223 [PIX_FMT_RGB565LE] = { |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
224 .nb_channels = 3, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
225 .color_type = FF_COLOR_RGB, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
226 .pixel_type = FF_PIXEL_PACKED, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
227 .depth = 5, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
228 }, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
229 [PIX_FMT_RGB555BE] = { |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
230 .nb_channels = 3, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
231 .color_type = FF_COLOR_RGB, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
232 .pixel_type = FF_PIXEL_PACKED, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
233 .depth = 5, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
234 }, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
235 [PIX_FMT_RGB555LE] = { |
4208 | 236 .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
|
237 .color_type = FF_COLOR_RGB, |
1204 | 238 .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
|
239 .depth = 5, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
240 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
241 |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
242 /* gray / mono formats */ |
4066 | 243 [PIX_FMT_GRAY16BE] = { |
244 .nb_channels = 1, | |
245 .color_type = FF_COLOR_GRAY, | |
246 .pixel_type = FF_PIXEL_PLANAR, | |
247 .depth = 16, | |
248 }, | |
249 [PIX_FMT_GRAY16LE] = { | |
250 .nb_channels = 1, | |
251 .color_type = FF_COLOR_GRAY, | |
252 .pixel_type = FF_PIXEL_PLANAR, | |
253 .depth = 16, | |
254 }, | |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
255 [PIX_FMT_GRAY8] = { |
1204 | 256 .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
|
257 .color_type = FF_COLOR_GRAY, |
1204 | 258 .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
|
259 .depth = 8, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
260 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
261 [PIX_FMT_MONOWHITE] = { |
1204 | 262 .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
|
263 .color_type = FF_COLOR_GRAY, |
1204 | 264 .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
|
265 .depth = 1, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
266 }, |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
267 [PIX_FMT_MONOBLACK] = { |
1204 | 268 .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
|
269 .color_type = FF_COLOR_GRAY, |
1204 | 270 .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
|
271 .depth = 1, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
272 }, |
1055 | 273 |
274 /* paletted formats */ | |
275 [PIX_FMT_PAL8] = { | |
1204 | 276 .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
|
277 .color_type = FF_COLOR_RGB, |
1204 | 278 .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
|
279 .depth = 8, |
1055 | 280 }, |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
281 [PIX_FMT_UYYVYY411] = { |
2309 | 282 .nb_channels = 1, |
283 .color_type = FF_COLOR_YUV, | |
284 .pixel_type = FF_PIXEL_PACKED, | |
285 .depth = 8, | |
286 }, | |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
287 [PIX_FMT_ABGR] = { |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
288 .nb_channels = 4, .is_alpha = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
289 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
290 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
291 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
292 }, |
9223
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
293 [PIX_FMT_BGR565BE] = { |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
294 .nb_channels = 3, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
295 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
296 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
297 .depth = 5, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
298 }, |
9223
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
299 [PIX_FMT_BGR565LE] = { |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
300 .nb_channels = 3, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
301 .color_type = FF_COLOR_RGB, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
302 .pixel_type = FF_PIXEL_PACKED, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
303 .depth = 5, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
304 }, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
305 [PIX_FMT_BGR555BE] = { |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
306 .nb_channels = 3, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
307 .color_type = FF_COLOR_RGB, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
308 .pixel_type = FF_PIXEL_PACKED, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
309 .depth = 5, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
310 }, |
53f2c0f6e71d
Change the RGB5X5/BGR5X5 pixel format defines so that we have little
stefano
parents:
9222
diff
changeset
|
311 [PIX_FMT_BGR555LE] = { |
4207
bc9de4875ebd
BGR555 has never been working as alpha supporting format. Remove the false setting.
alex
parents:
4201
diff
changeset
|
312 .nb_channels = 3, |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
313 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
314 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
315 .depth = 5, |
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_RGB8] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
318 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
319 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
320 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
321 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
322 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
323 [PIX_FMT_RGB4] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
324 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
325 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
326 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
327 .depth = 4, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
328 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
329 [PIX_FMT_RGB4_BYTE] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
330 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
331 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
332 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
333 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
334 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
335 [PIX_FMT_BGR8] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
336 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
337 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
338 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
339 .depth = 8, |
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] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
342 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
343 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
344 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
345 .depth = 4, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
346 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
347 [PIX_FMT_BGR4_BYTE] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
348 .nb_channels = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
349 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
350 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
351 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
352 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
353 [PIX_FMT_NV12] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
354 .nb_channels = 2, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
355 .color_type = FF_COLOR_YUV, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
356 .pixel_type = FF_PIXEL_PLANAR, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
357 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
358 }, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
359 [PIX_FMT_NV21] = { |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
360 .nb_channels = 2, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
361 .color_type = FF_COLOR_YUV, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
362 .pixel_type = FF_PIXEL_PLANAR, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
363 .depth = 8, |
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 |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
366 [PIX_FMT_BGRA] = { |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
367 .nb_channels = 4, .is_alpha = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
368 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
369 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
370 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
371 }, |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
372 [PIX_FMT_RGBA] = { |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
373 .nb_channels = 4, .is_alpha = 1, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
374 .color_type = FF_COLOR_RGB, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
375 .pixel_type = FF_PIXEL_PACKED, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
376 .depth = 8, |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
377 }, |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
378 }; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
379 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
380 void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift) |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
381 { |
10573
ac49ab818d4d
Use av_pix_fmt_descriptors in avcodec_get_chroma_sub_sample(), rather
stefano
parents:
10572
diff
changeset
|
382 *h_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_w; |
ac49ab818d4d
Use av_pix_fmt_descriptors in avcodec_get_chroma_sub_sample(), rather
stefano
parents:
10572
diff
changeset
|
383 *v_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_h; |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
384 } |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
385 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
386 const char *avcodec_get_pix_fmt_name(enum PixelFormat pix_fmt) |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
387 { |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
388 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB) |
7463
5515e19b9137
Add graceful error handling to avcodec_get_pix_fmt_name() and avcodec_get_pix_fmt().
pross
parents:
6963
diff
changeset
|
389 return NULL; |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
390 else |
10579
dacdec913c5b
Make avcodec_get_pix_fmt_name() use av_pix_fmt_descriptors rather than
stefano
parents:
10577
diff
changeset
|
391 return av_pix_fmt_descriptors[pix_fmt].name; |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
392 } |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
393 |
9222
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
394 static enum PixelFormat avcodec_get_pix_fmt_internal(const char *name) |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
395 { |
2967 | 396 int i; |
397 | |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
398 for (i=0; i < PIX_FMT_NB; i++) |
10583
96d1d05cfd37
Use pixel formats names defined in av_pix_fmt_descriptors rather than
stefano
parents:
10582
diff
changeset
|
399 if (av_pix_fmt_descriptors[i].name && !strcmp(av_pix_fmt_descriptors[i].name, name)) |
9435 | 400 return i; |
7463
5515e19b9137
Add graceful error handling to avcodec_get_pix_fmt_name() and avcodec_get_pix_fmt().
pross
parents:
6963
diff
changeset
|
401 return PIX_FMT_NONE; |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
402 } |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
403 |
9985 | 404 #if HAVE_BIGENDIAN |
9240 | 405 # define X_NE(be, le) be |
406 #else | |
407 # define X_NE(be, le) le | |
408 #endif | |
409 | |
9222
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
410 enum PixelFormat avcodec_get_pix_fmt(const char *name) |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
411 { |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
412 enum PixelFormat pix_fmt; |
9222
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
413 |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
414 if (!strcmp(name, "rgb32")) |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
415 name = X_NE("argb", "bgra"); |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
416 else if (!strcmp(name, "bgr32")) |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
417 name = X_NE("abgr", "rgba"); |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
418 |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
419 pix_fmt = avcodec_get_pix_fmt_internal(name); |
9222
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
420 if (pix_fmt == PIX_FMT_NONE) { |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
421 char name2[32]; |
9242
3153dcc9f8d0
Factorize: use the X_NE() macro in avcodec_get_pix_fmt().
stefano
parents:
9240
diff
changeset
|
422 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le")); |
9222
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
423 pix_fmt = avcodec_get_pix_fmt_internal(name2); |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
424 } |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
425 return pix_fmt; |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
426 } |
e314914641bc
Extend the behavior of avcodec_get_pix_fmt(), if it cannot find a
stefano
parents:
9221
diff
changeset
|
427 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
428 void avcodec_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt) |
5084
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
429 { |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
430 /* print header */ |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
431 if (pix_fmt < 0) |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
432 snprintf (buf, buf_size, |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
433 "name " " nb_channels" " depth" " is_alpha" |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
434 ); |
6911 | 435 else{ |
436 PixFmtInfo info= pix_fmt_info[pix_fmt]; | |
437 | |
438 char is_alpha_char= info.is_alpha ? 'y' : 'n'; | |
439 | |
5084
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
440 snprintf (buf, buf_size, |
10277 | 441 "%-11s %5d %9d %6c", |
10583
96d1d05cfd37
Use pixel formats names defined in av_pix_fmt_descriptors rather than
stefano
parents:
10582
diff
changeset
|
442 av_pix_fmt_descriptors[pix_fmt].name, |
5084
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
443 info.nb_channels, |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
444 info.depth, |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
445 is_alpha_char |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
446 ); |
6911 | 447 } |
5084
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
448 } |
9930b7031cb2
Add support for listing the supported pixel formats using the option
benoit
parents:
5077
diff
changeset
|
449 |
9011
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
9007
diff
changeset
|
450 int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt) |
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
9007
diff
changeset
|
451 { |
10572
a21b640dba50
Use av_pix_fmt_descriptors in ff_is_hwaccel_pix_fmt() rather than
stefano
parents:
10569
diff
changeset
|
452 return av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL; |
9011
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
9007
diff
changeset
|
453 } |
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
9007
diff
changeset
|
454 |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
455 int ff_set_systematic_pal(uint32_t pal[256], enum PixelFormat pix_fmt){ |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
456 int i; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
457 |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
458 for(i=0; i<256; i++){ |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
459 int r,g,b; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
460 |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
461 switch(pix_fmt) { |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
462 case PIX_FMT_RGB8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
463 r= (i>>5 )*36; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
464 g= ((i>>2)&7)*36; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
465 b= (i&3 )*85; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
466 break; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
467 case PIX_FMT_BGR8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
468 b= (i>>6 )*85; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
469 g= ((i>>3)&7)*36; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
470 r= (i&7 )*36; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
471 break; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
472 case PIX_FMT_RGB4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
473 r= (i>>3 )*255; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
474 g= ((i>>1)&3)*85; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
475 b= (i&1 )*255; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
476 break; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
477 case PIX_FMT_BGR4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
478 b= (i>>3 )*255; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
479 g= ((i>>1)&3)*85; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
480 r= (i&1 )*255; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
481 break; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
482 case PIX_FMT_GRAY8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
483 r=b=g= i; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
484 break; |
8788
5e9e735cd793
Add a default (error) for the switch in case of an unsupported PIX_FMT.
gpoirier
parents:
8748
diff
changeset
|
485 default: |
5e9e735cd793
Add a default (error) for the switch in case of an unsupported PIX_FMT.
gpoirier
parents:
8748
diff
changeset
|
486 return -1; |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
487 } |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
488 pal[i] = b + (g<<8) + (r<<16); |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
489 } |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
490 |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
491 return 0; |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
492 } |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
493 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
494 int ff_fill_linesize(AVPicture *picture, enum PixelFormat 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
|
495 { |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
496 int w2; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
497 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; |
2967 | 498 |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
499 memset(picture->linesize, 0, sizeof(picture->linesize)); |
2422 | 500 |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
501 switch(pix_fmt) { |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
502 case PIX_FMT_YUV420P: |
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
503 case PIX_FMT_YUV422P: |
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
504 case PIX_FMT_YUV444P: |
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
505 case PIX_FMT_YUV410P: |
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
506 case PIX_FMT_YUV411P: |
5363 | 507 case PIX_FMT_YUV440P: |
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
508 case PIX_FMT_YUVJ420P: |
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
509 case PIX_FMT_YUVJ422P: |
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
510 case PIX_FMT_YUVJ444P: |
5363 | 511 case PIX_FMT_YUVJ440P: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
512 w2 = (width + (1 << desc->log2_chroma_w) - 1) >> desc->log2_chroma_w; |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
513 picture->linesize[0] = width; |
1047
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
514 picture->linesize[1] = w2; |
3f316a471019
handle odd image sizes when using subsampled chroma (useful for JPEG images)
bellard
parents:
1044
diff
changeset
|
515 picture->linesize[2] = w2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
516 break; |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
517 case PIX_FMT_YUV420P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
518 case PIX_FMT_YUV422P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
519 case PIX_FMT_YUV444P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
520 case PIX_FMT_YUV420P16BE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
521 case PIX_FMT_YUV422P16BE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
522 case PIX_FMT_YUV444P16BE: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
523 w2 = (width + (1 << desc->log2_chroma_w) - 1) >> desc->log2_chroma_w; |
9519
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
524 picture->linesize[0] = 2*width; |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
525 picture->linesize[1] = 2*w2; |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
526 picture->linesize[2] = 2*w2; |
d42979883bb1
Add 420,422 and 444 planar 16bit per component pix formats.
michael
parents:
9483
diff
changeset
|
527 break; |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
528 case PIX_FMT_YUVA420P: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
529 w2 = (width + (1 << desc->log2_chroma_w) - 1) >> desc->log2_chroma_w; |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
530 picture->linesize[0] = width; |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
531 picture->linesize[1] = w2; |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
532 picture->linesize[2] = w2; |
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
533 picture->linesize[3] = width; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
534 break; |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
535 case PIX_FMT_NV12: |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
536 case PIX_FMT_NV21: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
537 w2 = (width + (1 << desc->log2_chroma_w) - 1) >> desc->log2_chroma_w; |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
538 picture->linesize[0] = width; |
10569
7a8b35405591
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
ramiro
parents:
10546
diff
changeset
|
539 picture->linesize[1] = 2 * w2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
540 break; |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
541 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
|
542 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
|
543 picture->linesize[0] = width * 3; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
544 break; |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
545 case PIX_FMT_ARGB: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
546 case PIX_FMT_ABGR: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
547 case PIX_FMT_RGBA: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
548 case PIX_FMT_BGRA: |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
549 picture->linesize[0] = width * 4; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
550 break; |
9001 | 551 case PIX_FMT_RGB48BE: |
552 case PIX_FMT_RGB48LE: | |
553 picture->linesize[0] = width * 6; | |
554 break; | |
4066 | 555 case PIX_FMT_GRAY16BE: |
556 case PIX_FMT_GRAY16LE: | |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
557 case PIX_FMT_BGR555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
558 case PIX_FMT_BGR555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
559 case PIX_FMT_BGR565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
560 case PIX_FMT_BGR565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
561 case PIX_FMT_RGB555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
562 case PIX_FMT_RGB555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
563 case PIX_FMT_RGB565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
564 case PIX_FMT_RGB565LE: |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
565 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
|
566 picture->linesize[0] = width * 2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
567 break; |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
568 case PIX_FMT_UYVY422: |
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
569 picture->linesize[0] = width * 2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
570 break; |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
571 case PIX_FMT_UYYVYY411: |
2309 | 572 picture->linesize[0] = width + width/2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
573 break; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
574 case PIX_FMT_RGB4: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
575 case PIX_FMT_BGR4: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
576 picture->linesize[0] = width / 2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
577 break; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
578 case PIX_FMT_MONOWHITE: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
579 case PIX_FMT_MONOBLACK: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
580 picture->linesize[0] = (width + 7) >> 3; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
581 break; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
582 case PIX_FMT_PAL8: |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
583 case PIX_FMT_RGB8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
584 case PIX_FMT_BGR8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
585 case PIX_FMT_RGB4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
586 case PIX_FMT_BGR4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
587 case PIX_FMT_GRAY8: |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
588 picture->linesize[0] = width; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
589 break; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
590 default: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
591 return -1; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
592 } |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
593 return 0; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
594 } |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
595 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
596 int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, enum PixelFormat pix_fmt, |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
597 int height) |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
598 { |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
599 int size, h2, size2; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
600 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
601 |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
602 size = picture->linesize[0] * height; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
603 switch(pix_fmt) { |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
604 case PIX_FMT_YUV420P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
605 case PIX_FMT_YUV422P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
606 case PIX_FMT_YUV444P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
607 case PIX_FMT_YUV410P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
608 case PIX_FMT_YUV411P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
609 case PIX_FMT_YUV440P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
610 case PIX_FMT_YUVJ420P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
611 case PIX_FMT_YUVJ422P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
612 case PIX_FMT_YUVJ444P: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
613 case PIX_FMT_YUVJ440P: |
10136
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
614 case PIX_FMT_YUV420P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
615 case PIX_FMT_YUV422P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
616 case PIX_FMT_YUV444P16LE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
617 case PIX_FMT_YUV420P16BE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
618 case PIX_FMT_YUV422P16BE: |
399b5d6b5439
Make 16bit YUV formats compatible with NE avcodec_get_pix_fmt().
ramiro
parents:
10043
diff
changeset
|
619 case PIX_FMT_YUV444P16BE: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
620 h2 = (height + (1 << desc->log2_chroma_h) - 1) >> desc->log2_chroma_h; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
621 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
|
622 picture->data[0] = ptr; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
623 picture->data[1] = picture->data[0] + size; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
624 picture->data[2] = picture->data[1] + size2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
625 picture->data[3] = NULL; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
626 return size + 2 * size2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
627 case PIX_FMT_YUVA420P: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
628 h2 = (height + (1 << desc->log2_chroma_h) - 1) >> desc->log2_chroma_h; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
629 size2 = picture->linesize[1] * h2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
630 picture->data[0] = ptr; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
631 picture->data[1] = picture->data[0] + size; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
632 picture->data[2] = picture->data[1] + size2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
633 picture->data[3] = picture->data[1] + size2 + size2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
634 return 2 * size + 2 * size2; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
635 case PIX_FMT_NV12: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
636 case PIX_FMT_NV21: |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
637 h2 = (height + (1 << desc->log2_chroma_h) - 1) >> desc->log2_chroma_h; |
10569
7a8b35405591
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
ramiro
parents:
10546
diff
changeset
|
638 size2 = picture->linesize[1] * h2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
639 picture->data[0] = ptr; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
640 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
|
641 picture->data[2] = NULL; |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
642 picture->data[3] = NULL; |
10569
7a8b35405591
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
ramiro
parents:
10546
diff
changeset
|
643 return size + size2; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
644 case PIX_FMT_RGB24: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
645 case PIX_FMT_BGR24: |
9245
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
646 case PIX_FMT_ARGB: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
647 case PIX_FMT_ABGR: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
648 case PIX_FMT_RGBA: |
b5d1395879a0
Make the pixel formats which were defined as macros:
stefano
parents:
9242
diff
changeset
|
649 case PIX_FMT_BGRA: |
9001 | 650 case PIX_FMT_RGB48BE: |
651 case PIX_FMT_RGB48LE: | |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
652 case PIX_FMT_GRAY16BE: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
653 case PIX_FMT_GRAY16LE: |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
654 case PIX_FMT_BGR555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
655 case PIX_FMT_BGR555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
656 case PIX_FMT_BGR565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
657 case PIX_FMT_BGR565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
658 case PIX_FMT_RGB555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
659 case PIX_FMT_RGB555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
660 case PIX_FMT_RGB565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
661 case PIX_FMT_RGB565LE: |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
662 case PIX_FMT_YUYV422: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
663 case PIX_FMT_UYVY422: |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
664 case PIX_FMT_UYYVYY411: |
3646
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
665 case PIX_FMT_RGB4: |
e324e5ce41a1
Minimal support for the new pixel formats in libavcodec
lucabe
parents:
3589
diff
changeset
|
666 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
|
667 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
|
668 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
|
669 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
|
670 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
|
671 picture->data[2] = NULL; |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
672 picture->data[3] = NULL; |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
673 return size; |
1055 | 674 case PIX_FMT_PAL8: |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
675 case PIX_FMT_RGB8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
676 case PIX_FMT_BGR8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
677 case PIX_FMT_RGB4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
678 case PIX_FMT_BGR4_BYTE: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
679 case PIX_FMT_GRAY8: |
1055 | 680 size2 = (size + 3) & ~3; |
681 picture->data[0] = ptr; | |
682 picture->data[1] = ptr + size2; /* palette is stored here as 256 32 bit words */ | |
683 picture->data[2] = NULL; | |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5363
diff
changeset
|
684 picture->data[3] = NULL; |
1055 | 685 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
|
686 default: |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
687 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
|
688 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
|
689 picture->data[2] = NULL; |
1055 | 690 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
|
691 return -1; |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
692 } |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
693 } |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
694 |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
695 int avpicture_fill(AVPicture *picture, uint8_t *ptr, |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
696 enum PixelFormat pix_fmt, int width, int height) |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
697 { |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
698 |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
699 if(avcodec_check_dimensions(NULL, width, height)) |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
700 return -1; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
701 |
6357 | 702 if (ff_fill_linesize(picture, pix_fmt, width)) |
6356
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
703 return -1; |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
704 |
6357 | 705 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
|
706 } |
afa99894d8d9
Split avpicture_fill() in two functions. This will be
vitor
parents:
6350
diff
changeset
|
707 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
708 int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width, int height, |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
709 unsigned char *dest, int dest_size) |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
710 { |
3420 | 711 const PixFmtInfo* pf = &pix_fmt_info[pix_fmt]; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
712 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; |
9070
87f496299f09
Fix avpicture_layout to not chroma shift the alpha plane when outputting YUVA420P
sdrik
parents:
9061
diff
changeset
|
713 int i, j, w, ow, h, oh, data_planes; |
2967 | 714 const unsigned char* s; |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
715 int size = avpicture_get_size(pix_fmt, width, height); |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
716 |
2422 | 717 if (size > dest_size || size < 0) |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
718 return -1; |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
719 |
1243
5d2376294fbf
* fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents:
1231
diff
changeset
|
720 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
|
721 if (pix_fmt == PIX_FMT_YUYV422 || |
2967 | 722 pix_fmt == PIX_FMT_UYVY422 || |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
723 pix_fmt == PIX_FMT_BGR565BE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
724 pix_fmt == PIX_FMT_BGR565LE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
725 pix_fmt == PIX_FMT_BGR555BE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
726 pix_fmt == PIX_FMT_BGR555LE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
727 pix_fmt == PIX_FMT_RGB565BE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
728 pix_fmt == PIX_FMT_RGB565LE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
729 pix_fmt == PIX_FMT_RGB555BE || |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
730 pix_fmt == PIX_FMT_RGB555LE) |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
731 w = width * 2; |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
732 else if (pix_fmt == PIX_FMT_UYYVYY411) |
10546 | 733 w = width + width/2; |
2979 | 734 else if (pix_fmt == PIX_FMT_PAL8) |
10546 | 735 w = width; |
2979 | 736 else |
10546 | 737 w = width * (pf->depth * pf->nb_channels / 8); |
2967 | 738 |
2979 | 739 data_planes = 1; |
740 h = height; | |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
741 } else { |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
742 data_planes = pf->nb_channels; |
2979 | 743 w = (width*pf->depth + 7)/8; |
744 h = height; | |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
745 } |
2967 | 746 |
9070
87f496299f09
Fix avpicture_layout to not chroma shift the alpha plane when outputting YUVA420P
sdrik
parents:
9061
diff
changeset
|
747 ow = w; |
87f496299f09
Fix avpicture_layout to not chroma shift the alpha plane when outputting YUVA420P
sdrik
parents:
9061
diff
changeset
|
748 oh = h; |
87f496299f09
Fix avpicture_layout to not chroma shift the alpha plane when outputting YUVA420P
sdrik
parents:
9061
diff
changeset
|
749 |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
750 for (i=0; i<data_planes; i++) { |
10546 | 751 if (i == 1) { |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
752 w = ((width >> desc->log2_chroma_w) * pf->depth + 7) / 8; |
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
753 h = height >> desc->log2_chroma_h; |
10569
7a8b35405591
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
ramiro
parents:
10546
diff
changeset
|
754 if (pix_fmt == PIX_FMT_NV12 || pix_fmt == PIX_FMT_NV21) |
7a8b35405591
Fix nv12/nv21 handling. linesize for plane 1 should account for both chroma
ramiro
parents:
10546
diff
changeset
|
755 w <<= 1; |
10546 | 756 } else if (i == 3) { |
757 w = ow; | |
758 h = oh; | |
759 } | |
760 s = src->data[i]; | |
761 for(j=0; j<h; j++) { | |
762 memcpy(dest, s, w); | |
763 dest += w; | |
764 s += src->linesize[i]; | |
765 } | |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
766 } |
2967 | 767 |
1243
5d2376294fbf
* fixing a bug in avpicture_layout (PAL8 wasn't handled properly)
romansh
parents:
1231
diff
changeset
|
768 if (pf->pixel_type == FF_PIXEL_PALETTE) |
2979 | 769 memcpy((unsigned char *)(((size_t)dest + 3) & ~3), src->data[1], 256 * 4); |
2967 | 770 |
1231
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
771 return size; |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
772 } |
b88dfc4bbf8c
* introducing new public interface in imgconvert.c
romansh
parents:
1209
diff
changeset
|
773 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
774 int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height) |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
775 { |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
776 AVPicture dummy_pict; |
9217
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
777 if(avcodec_check_dimensions(NULL, width, height)) |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
778 return -1; |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
779 switch (pix_fmt) { |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
780 case PIX_FMT_RGB8: |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
781 case PIX_FMT_BGR8: |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
782 case PIX_FMT_RGB4_BYTE: |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
783 case PIX_FMT_BGR4_BYTE: |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
784 case PIX_FMT_GRAY8: |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
785 // do not include palette for these pseudo-paletted formats |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
786 return width * height; |
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
787 } |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
788 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
|
789 } |
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
790 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
791 int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat 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
|
792 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
|
793 { |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
794 const PixFmtInfo *pf, *ps; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
795 const AVPixFmtDescriptor *src_desc = &av_pix_fmt_descriptors[src_pix_fmt]; |
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
796 const AVPixFmtDescriptor *dst_desc = &av_pix_fmt_descriptors[dst_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
|
797 int loss; |
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 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
|
800 |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
801 /* compute loss */ |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
802 loss = 0; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
803 pf = &pix_fmt_info[dst_pix_fmt]; |
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
804 if (pf->depth < ps->depth || |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
805 ((dst_pix_fmt == PIX_FMT_RGB555BE || dst_pix_fmt == PIX_FMT_RGB555LE) && |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
806 (src_pix_fmt == PIX_FMT_RGB565BE || src_pix_fmt == PIX_FMT_RGB565LE))) |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
807 loss |= FF_LOSS_DEPTH; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
808 if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w || |
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
809 dst_desc->log2_chroma_h > src_desc->log2_chroma_h) |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
810 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
|
811 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
|
812 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
|
813 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
|
814 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
|
815 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
|
816 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
817 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
|
818 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
|
819 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
|
820 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
821 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
|
822 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
|
823 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
|
824 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
825 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
|
826 if (ps->color_type != FF_COLOR_YUV_JPEG && |
2967 | 827 ps->color_type != FF_COLOR_YUV && |
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
828 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
|
829 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
|
830 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
831 default: |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
832 /* 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
|
833 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
|
834 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
|
835 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
836 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
837 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
|
838 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
|
839 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
|
840 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
|
841 loss |= FF_LOSS_ALPHA; |
2967 | 842 if (pf->pixel_type == FF_PIXEL_PALETTE && |
1204 | 843 (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
|
844 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
|
845 return loss; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
846 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
847 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
848 static int avg_bits_per_pixel(enum PixelFormat 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
|
849 { |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
850 int bits; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
851 const PixFmtInfo *pf; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
852 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[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
|
853 |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
854 pf = &pix_fmt_info[pix_fmt]; |
1204 | 855 switch(pf->pixel_type) { |
856 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
|
857 switch(pix_fmt) { |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
858 case PIX_FMT_YUYV422: |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
859 case PIX_FMT_UYVY422: |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
860 case PIX_FMT_RGB565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
861 case PIX_FMT_RGB565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
862 case PIX_FMT_RGB555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
863 case PIX_FMT_RGB555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
864 case PIX_FMT_BGR565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
865 case PIX_FMT_BGR565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
866 case PIX_FMT_BGR555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
867 case PIX_FMT_BGR555LE: |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
868 bits = 16; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
869 break; |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
870 case PIX_FMT_UYYVYY411: |
2979 | 871 bits = 12; |
872 break; | |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
873 default: |
1204 | 874 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
|
875 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
876 } |
1204 | 877 break; |
878 case FF_PIXEL_PLANAR: | |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
879 if (desc->log2_chroma_w == 0 && desc->log2_chroma_h == 0) { |
1204 | 880 bits = pf->depth * pf->nb_channels; |
881 } else { | |
2967 | 882 bits = pf->depth + ((2 * pf->depth) >> |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
883 (desc->log2_chroma_w + desc->log2_chroma_h)); |
1204 | 884 } |
885 break; | |
886 case FF_PIXEL_PALETTE: | |
887 bits = 8; | |
888 break; | |
889 default: | |
890 bits = -1; | |
891 break; | |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
892 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
893 return bits; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
894 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
895 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
896 static enum PixelFormat avcodec_find_best_pix_fmt1(int64_t pix_fmt_mask, |
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
897 enum PixelFormat 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
|
898 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
|
899 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
|
900 { |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
901 int dist, i, loss, min_dist; |
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
902 enum PixelFormat dst_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
|
903 |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
904 /* find exact color match with smallest size */ |
10682
aa8bebc96764
Use PIX_FMT_NONE for -1 when enum PixelFormat is expected (fixes two icc warnings).
cehoyos
parents:
10640
diff
changeset
|
905 dst_pix_fmt = PIX_FMT_NONE; |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
906 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
|
907 for(i = 0;i < PIX_FMT_NB; i++) { |
8321
e9db9859de6c
Prevent shift overflow, patch by Anders Gr«Ónberg, galileo.m2 gmail com.
diego
parents:
8316
diff
changeset
|
908 if (pix_fmt_mask & (1ULL << i)) { |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
909 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
|
910 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
|
911 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
|
912 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
|
913 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
|
914 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
|
915 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
916 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
917 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
918 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
919 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
|
920 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
921 |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
922 enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat 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
|
923 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
|
924 { |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
925 enum PixelFormat dst_pix_fmt; |
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
926 int loss_mask, i; |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
927 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
|
928 ~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
|
929 ~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
|
930 ~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
|
931 ~(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
|
932 ~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
|
933 ~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
|
934 0, |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
935 }; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
936 |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
937 /* 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
|
938 i = 0; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
939 for(;;) { |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
940 loss_mask = loss_mask_order[i++]; |
2967 | 941 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
|
942 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
|
943 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
|
944 goto found; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
945 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
|
946 break; |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
947 } |
10682
aa8bebc96764
Use PIX_FMT_NONE for -1 when enum PixelFormat is expected (fixes two icc warnings).
cehoyos
parents:
10640
diff
changeset
|
948 return PIX_FMT_NONE; |
1202
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
949 found: |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
950 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
|
951 *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
|
952 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
|
953 } |
8b49a7ee4e4e
YUV formats/gray formats are correctly defined - added format loss information - preliminary JPEG YUV formats support
bellard
parents:
1199
diff
changeset
|
954 |
3245 | 955 void ff_img_copy_plane(uint8_t *dst, int dst_wrap, |
1205 | 956 const uint8_t *src, int src_wrap, |
957 int width, int height) | |
1204 | 958 { |
2967 | 959 if((!dst) || (!src)) |
2785 | 960 return; |
1204 | 961 for(;height > 0; height--) { |
962 memcpy(dst, src, width); | |
963 dst += dst_wrap; | |
964 src += src_wrap; | |
965 } | |
966 } | |
967 | |
6358 | 968 int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane) |
1204 | 969 { |
6347 | 970 int bits; |
3420 | 971 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
972 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; |
2967 | 973 |
1204 | 974 pf = &pix_fmt_info[pix_fmt]; |
975 switch(pf->pixel_type) { | |
976 case FF_PIXEL_PACKED: | |
977 switch(pix_fmt) { | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
978 case PIX_FMT_YUYV422: |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
1593
diff
changeset
|
979 case PIX_FMT_UYVY422: |
10043
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
980 case PIX_FMT_RGB565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
981 case PIX_FMT_RGB565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
982 case PIX_FMT_RGB555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
983 case PIX_FMT_RGB555LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
984 case PIX_FMT_BGR565BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
985 case PIX_FMT_BGR565LE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
986 case PIX_FMT_BGR555BE: |
5d5562aa94df
Use RGB5x5LE, RGB5x5BE, BGR5x5LE and BGR5x5BE instead of their native
cehoyos
parents:
9985
diff
changeset
|
987 case PIX_FMT_BGR555LE: |
1204 | 988 bits = 16; |
989 break; | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4359
diff
changeset
|
990 case PIX_FMT_UYYVYY411: |
2979 | 991 bits = 12; |
992 break; | |
1204 | 993 default: |
994 bits = pf->depth * pf->nb_channels; | |
995 break; | |
996 } | |
6347 | 997 return (width * bits + 7) >> 3; |
998 break; | |
999 case FF_PIXEL_PLANAR: | |
1000 if (plane == 1 || plane == 2) | |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1001 width= -((-width)>>desc->log2_chroma_w); |
6347 | 1002 |
1003 return (width * pf->depth + 7) >> 3; | |
1004 break; | |
1005 case FF_PIXEL_PALETTE: | |
1006 if (plane == 0) | |
1007 return width; | |
1204 | 1008 break; |
6347 | 1009 } |
1010 | |
1011 return -1; | |
1012 } | |
1013 | |
1014 void av_picture_copy(AVPicture *dst, const AVPicture *src, | |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
1015 enum PixelFormat pix_fmt, int width, int height) |
6347 | 1016 { |
1017 int i; | |
1018 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; | |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1019 const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt]; |
6347 | 1020 |
1021 switch(pf->pixel_type) { | |
1022 case FF_PIXEL_PACKED: | |
1204 | 1023 case FF_PIXEL_PLANAR: |
1024 for(i = 0; i < pf->nb_channels; i++) { | |
8087
661cd381d996
Remove unused variable, patch by Art Clarke, aclarke vlideshow com.
diego
parents:
8083
diff
changeset
|
1025 int h; |
6358 | 1026 int bwidth = ff_get_plane_bytewidth(pix_fmt, width, i); |
1204 | 1027 h = height; |
1028 if (i == 1 || i == 2) { | |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1029 h= -((-height)>>desc->log2_chroma_h); |
1204 | 1030 } |
3245 | 1031 ff_img_copy_plane(dst->data[i], dst->linesize[i], |
1204 | 1032 src->data[i], src->linesize[i], |
1033 bwidth, h); | |
1034 } | |
1035 break; | |
1036 case FF_PIXEL_PALETTE: | |
3245 | 1037 ff_img_copy_plane(dst->data[0], dst->linesize[0], |
1204 | 1038 src->data[0], src->linesize[0], |
1039 width, height); | |
1040 /* copy the palette */ | |
10510
26fcf45bb486
Fix palette copying in av_picture_copy(). Previous code worked only if
vitor
parents:
10509
diff
changeset
|
1041 memcpy(dst->data[1], src->data[1], 4*256); |
1204 | 1042 break; |
1043 } | |
1044 } | |
993
895d3b01c6f4
added missing formats in all functions - added monoblack, monowhite and gray8 support for most conversions
bellard
parents:
989
diff
changeset
|
1045 |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1046 /* 2x2 -> 1x1 */ |
3245 | 1047 void ff_shrink22(uint8_t *dst, int dst_wrap, |
1205 | 1048 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
|
1049 int width, int height) |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1050 { |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1051 int w; |
1205 | 1052 const uint8_t *s1, *s2; |
1053 uint8_t *d; | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1054 |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1055 for(;height > 0; height--) { |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1056 s1 = src; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1057 s2 = s1 + src_wrap; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1058 d = dst; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1059 for(w = width;w >= 4; w-=4) { |
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
1060 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
|
1061 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
|
1062 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
|
1063 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
|
1064 s1 += 8; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1065 s2 += 8; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1066 d += 4; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1067 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1068 for(;w > 0; w--) { |
1206
fd676abc754c
loss fixes (thanks to Daniel Serpell) - shrink22 fix
bellard
parents:
1205
diff
changeset
|
1069 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
|
1070 s1 += 2; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1071 s2 += 2; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1072 d++; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1073 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1074 src += 2 * src_wrap; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1075 dst += dst_wrap; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1076 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1077 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1078 |
1205 | 1079 /* 4x4 -> 1x1 */ |
3245 | 1080 void ff_shrink44(uint8_t *dst, int dst_wrap, |
1205 | 1081 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
|
1082 int width, int height) |
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1083 { |
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1084 int w; |
1205 | 1085 const uint8_t *s1, *s2, *s3, *s4; |
1086 uint8_t *d; | |
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1087 |
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1088 for(;height > 0; height--) { |
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1089 s1 = src; |
1205 | 1090 s2 = s1 + src_wrap; |
1091 s3 = s2 + src_wrap; | |
1092 s4 = s3 + src_wrap; | |
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1093 d = dst; |
1205 | 1094 for(w = width;w > 0; w--) { |
1095 d[0] = (s1[0] + s1[1] + s1[2] + s1[3] + | |
1096 s2[0] + s2[1] + s2[2] + s2[3] + | |
1097 s3[0] + s3[1] + s3[2] + s3[3] + | |
1098 s4[0] + s4[1] + s4[2] + s4[3] + 8) >> 4; | |
1099 s1 += 4; | |
1100 s2 += 4; | |
1101 s3 += 4; | |
1102 s4 += 4; | |
576
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1103 d++; |
9aa5f0d0124e
YUV410P to YUV420P patch by Fran«®ois Revol <revol at free dot fr>
michaelni
parents:
440
diff
changeset
|
1104 } |
1205 | 1105 src += 4 * src_wrap; |
1106 dst += dst_wrap; | |
1107 } | |
1108 } | |
1109 | |
3245 | 1110 /* 8x8 -> 1x1 */ |
1111 void ff_shrink88(uint8_t *dst, int dst_wrap, | |
1112 const uint8_t *src, int src_wrap, | |
1113 int width, int height) | |
1114 { | |
1115 int w, i; | |
1116 | |
1117 for(;height > 0; height--) { | |
1118 for(w = width;w > 0; w--) { | |
1119 int tmp=0; | |
1120 for(i=0; i<8; i++){ | |
1121 tmp += src[0] + src[1] + src[2] + src[3] + src[4] + src[5] + src[6] + src[7]; | |
1122 src += src_wrap; | |
1123 } | |
1124 *(dst++) = (tmp + 32)>>6; | |
1125 src += 8 - 8*src_wrap; | |
1126 } | |
1127 src += 8*src_wrap - 8*width; | |
1128 dst += dst_wrap - width; | |
1129 } | |
1130 } | |
1131 | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1132 |
1508 | 1133 int avpicture_alloc(AVPicture *picture, |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
1134 enum PixelFormat pix_fmt, int width, int height) |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1135 { |
3266
3b785e80ce3e
make "size" variable in avpicture_alloc signed, since avpicture_get_size
reimar
parents:
3257
diff
changeset
|
1136 int size; |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1137 void *ptr; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1138 |
9217
53ec03e7ba40
Fix avpicture_get_size for non-paletted formats with a helper palette
reimar
parents:
9191
diff
changeset
|
1139 size = avpicture_fill(picture, NULL, pix_fmt, width, height); |
2422 | 1140 if(size<0) |
1141 goto fail; | |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1142 ptr = av_malloc(size); |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1143 if (!ptr) |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1144 goto fail; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1145 avpicture_fill(picture, ptr, pix_fmt, width, height); |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
1146 if(picture->data[1] && !picture->data[2]) |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
1147 ff_set_systematic_pal((uint32_t*)picture->data[1], pix_fmt); |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
1148 |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1149 return 0; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1150 fail: |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1151 memset(picture, 0, sizeof(AVPicture)); |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1152 return -1; |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1153 } |
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1154 |
1508 | 1155 void avpicture_free(AVPicture *picture) |
989
fe9083c56733
simplified code (need automatic testing) - added primitive new format support.
bellard
parents:
940
diff
changeset
|
1156 { |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
1028
diff
changeset
|
1157 av_free(picture->data[0]); |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1158 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1159 |
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1160 /* return true if yuv planar */ |
3420 | 1161 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
|
1162 { |
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1163 return (ps->color_type == FF_COLOR_YUV || |
2967 | 1164 ps->color_type == FF_COLOR_YUV_JPEG) && |
1204 | 1165 ps->pixel_type == FF_PIXEL_PLANAR; |
1203
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1166 } |
80c73b9b0ba2
accurate YUV to RGB and RGB to YUV conversions - added comments
bellard
parents:
1202
diff
changeset
|
1167 |
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
1168 int av_picture_crop(AVPicture *dst, const AVPicture *src, |
9902
9bdf9fe9018c
Fix argument type mismatches for av_picture_crop and av_picture_fill
mru
parents:
9519
diff
changeset
|
1169 enum PixelFormat pix_fmt, int top_band, int left_band) |
3179 | 1170 { |
1171 int y_shift; | |
1172 int x_shift; | |
1173 | |
1174 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || !is_yuv_planar(&pix_fmt_info[pix_fmt])) | |
1175 return -1; | |
1176 | |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1177 y_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_h; |
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1178 x_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_w; |
3179 | 1179 |
1180 dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band; | |
1181 dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift); | |
1182 dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift); | |
1183 | |
1184 dst->linesize[0] = src->linesize[0]; | |
1185 dst->linesize[1] = src->linesize[1]; | |
1186 dst->linesize[2] = src->linesize[2]; | |
1187 return 0; | |
1188 } | |
1189 | |
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4593
diff
changeset
|
1190 int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
1191 enum PixelFormat pix_fmt, int padtop, int padbottom, int padleft, int padright, |
4358 | 1192 int *color) |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1193 { |
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1194 uint8_t *optr; |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1195 int y_shift; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1196 int x_shift; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1197 int yheight; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1198 int i, y; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1199 |
4358 | 1200 if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || |
1201 !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
|
1202 |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1203 for (i = 0; i < 3; i++) { |
10577
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1204 x_shift = i ? av_pix_fmt_descriptors[pix_fmt].log2_chroma_w : 0; |
db54dba1f21c
Remove x_chroma_shift and y_chroma_shift fields from PixFmtInfo, use
stefano
parents:
10573
diff
changeset
|
1205 y_shift = i ? av_pix_fmt_descriptors[pix_fmt].log2_chroma_h : 0; |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1206 |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1207 if (padtop || padleft) { |
4358 | 1208 memset(dst->data[i], color[i], |
1209 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
|
1210 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1211 |
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1212 if (padleft || padright) { |
4358 | 1213 optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + |
1214 (dst->linesize[i] - (padright >> x_shift)); | |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1215 yheight = (height - 1 - (padtop + padbottom)) >> y_shift; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1216 for (y = 0; y < yheight; y++) { |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1217 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
|
1218 optr += dst->linesize[i]; |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1219 } |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1220 } |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1221 |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1222 if (src) { /* first line */ |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1223 uint8_t *iptr = src->data[i]; |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1224 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
|
1225 (padleft >> x_shift); |
6963
cc2c5a21a0eb
memcpy considering output width, not src linesize, fix segv with av_picture_pad
bcoudurier
parents:
6911
diff
changeset
|
1226 memcpy(optr, iptr, (width - padleft - padright) >> x_shift); |
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1227 iptr += src->linesize[i]; |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1228 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
|
1229 (dst->linesize[i] - (padright >> x_shift)); |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1230 yheight = (height - 1 - (padtop + padbottom)) >> y_shift; |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1231 for (y = 0; y < yheight; y++) { |
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1232 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
|
1233 memcpy(optr + ((padleft + padright) >> x_shift), iptr, |
6963
cc2c5a21a0eb
memcpy considering output width, not src linesize, fix segv with av_picture_pad
bcoudurier
parents:
6911
diff
changeset
|
1234 (width - padleft - padright) >> x_shift); |
4359
d276d6eed6a0
Avoid branches in the loop and solve a gcc warning
lu_zero
parents:
4358
diff
changeset
|
1235 iptr += src->linesize[i]; |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1236 optr += dst->linesize[i]; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1237 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1238 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1239 |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1240 if (padbottom || padright) { |
4358 | 1241 optr = dst->data[i] + dst->linesize[i] * |
1242 ((height - padbottom) >> y_shift) - (padright >> x_shift); | |
1243 memset(optr, color[i],dst->linesize[i] * | |
1244 (padbottom >> y_shift) + (padright >> x_shift)); | |
3257
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1245 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1246 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1247 return 0; |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1248 } |
63f61b09dcee
Baptiste COUDURIER's padding patch (reworked by me a little bit).
lucabe
parents:
3245
diff
changeset
|
1249 |
1208 | 1250 /* 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
|
1251 static int get_alpha_info_pal8(const AVPicture *src, int width, int height) |
1208 | 1252 { |
1253 const unsigned char *p; | |
1254 int src_wrap, ret, x, y; | |
1255 unsigned int a; | |
1256 uint32_t *palette = (uint32_t *)src->data[1]; | |
2967 | 1257 |
1208 | 1258 p = src->data[0]; |
1259 src_wrap = src->linesize[0] - width; | |
1260 ret = 0; | |
1261 for(y=0;y<height;y++) { | |
1262 for(x=0;x<width;x++) { | |
1263 a = palette[p[0]] >> 24; | |
1264 if (a == 0x00) { | |
1265 ret |= FF_ALPHA_TRANSP; | |
1266 } else if (a != 0xff) { | |
1267 ret |= FF_ALPHA_SEMI_TRANSP; | |
1268 } | |
1269 p++; | |
1270 } | |
1271 p += src_wrap; | |
1272 } | |
1273 return ret; | |
1274 } | |
1275 | |
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1276 int img_get_alpha_info(const AVPicture *src, |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
1277 enum PixelFormat pix_fmt, int width, int height) |
1208 | 1278 { |
3420 | 1279 const PixFmtInfo *pf = &pix_fmt_info[pix_fmt]; |
1208 | 1280 int ret; |
1281 | |
1282 /* no alpha can be represented in format */ | |
1283 if (!pf->is_alpha) | |
1284 return 0; | |
1285 switch(pix_fmt) { | |
1286 case PIX_FMT_PAL8: | |
1287 ret = get_alpha_info_pal8(src, width, height); | |
1288 break; | |
1289 default: | |
1290 /* we do not know, so everything is indicated */ | |
1291 ret = FF_ALPHA_TRANSP | FF_ALPHA_SEMI_TRANSP; | |
1292 break; | |
1293 } | |
1294 return ret; | |
1295 } | |
801 | 1296 |
8590 | 1297 #if HAVE_MMX |
801 | 1298 #define DEINT_INPLACE_LINE_LUM \ |
1299 movd_m2r(lum_m4[0],mm0);\ | |
1300 movd_m2r(lum_m3[0],mm1);\ | |
1301 movd_m2r(lum_m2[0],mm2);\ | |
1302 movd_m2r(lum_m1[0],mm3);\ | |
1303 movd_m2r(lum[0],mm4);\ | |
1304 punpcklbw_r2r(mm7,mm0);\ | |
1305 movd_r2m(mm2,lum_m4[0]);\ | |
1306 punpcklbw_r2r(mm7,mm1);\ | |
1307 punpcklbw_r2r(mm7,mm2);\ | |
1308 punpcklbw_r2r(mm7,mm3);\ | |
1309 punpcklbw_r2r(mm7,mm4);\ | |
1310 paddw_r2r(mm3,mm1);\ | |
1311 psllw_i2r(1,mm2);\ | |
1312 paddw_r2r(mm4,mm0);\ | |
1313 psllw_i2r(2,mm1);\ | |
1314 paddw_r2r(mm6,mm2);\ | |
1315 paddw_r2r(mm2,mm1);\ | |
1316 psubusw_r2r(mm0,mm1);\ | |
1317 psrlw_i2r(3,mm1);\ | |
1318 packuswb_r2r(mm7,mm1);\ | |
1319 movd_r2m(mm1,lum_m2[0]); | |
1320 | |
1321 #define DEINT_LINE_LUM \ | |
1322 movd_m2r(lum_m4[0],mm0);\ | |
1323 movd_m2r(lum_m3[0],mm1);\ | |
1324 movd_m2r(lum_m2[0],mm2);\ | |
1325 movd_m2r(lum_m1[0],mm3);\ | |
1326 movd_m2r(lum[0],mm4);\ | |
1327 punpcklbw_r2r(mm7,mm0);\ | |
1328 punpcklbw_r2r(mm7,mm1);\ | |
1329 punpcklbw_r2r(mm7,mm2);\ | |
1330 punpcklbw_r2r(mm7,mm3);\ | |
1331 punpcklbw_r2r(mm7,mm4);\ | |
1332 paddw_r2r(mm3,mm1);\ | |
1333 psllw_i2r(1,mm2);\ | |
1334 paddw_r2r(mm4,mm0);\ | |
1335 psllw_i2r(2,mm1);\ | |
1336 paddw_r2r(mm6,mm2);\ | |
1337 paddw_r2r(mm2,mm1);\ | |
1338 psubusw_r2r(mm0,mm1);\ | |
1339 psrlw_i2r(3,mm1);\ | |
1340 packuswb_r2r(mm7,mm1);\ | |
1341 movd_r2m(mm1,dst[0]); | |
1342 #endif | |
1343 | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1344 /* filter parameters: [-1 4 2 4 -1] // 8 */ |
2967 | 1345 static void deinterlace_line(uint8_t *dst, |
2979 | 1346 const uint8_t *lum_m4, const uint8_t *lum_m3, |
1347 const uint8_t *lum_m2, const uint8_t *lum_m1, | |
1348 const uint8_t *lum, | |
1349 int size) | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1350 { |
8590 | 1351 #if !HAVE_MMX |
4176 | 1352 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
|
1353 int sum; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1354 |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1355 for(;size > 0;size--) { |
801 | 1356 sum = -lum_m4[0]; |
1357 sum += lum_m3[0] << 2; | |
1358 sum += lum_m2[0] << 1; | |
1359 sum += lum_m1[0] << 2; | |
1360 sum += -lum[0]; | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1361 dst[0] = cm[(sum + 4) >> 3]; |
801 | 1362 lum_m4++; |
1363 lum_m3++; | |
1364 lum_m2++; | |
1365 lum_m1++; | |
1366 lum++; | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1367 dst++; |
801 | 1368 } |
1369 #else | |
1370 | |
1044 | 1371 { |
1372 pxor_r2r(mm7,mm7); | |
8316 | 1373 movq_m2r(ff_pw_4,mm6); |
1044 | 1374 } |
801 | 1375 for (;size > 3; size-=4) { |
1376 DEINT_LINE_LUM | |
1377 lum_m4+=4; | |
1378 lum_m3+=4; | |
1379 lum_m2+=4; | |
1380 lum_m1+=4; | |
1381 lum+=4; | |
1382 dst+=4; | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1383 } |
801 | 1384 #endif |
1385 } | |
1064 | 1386 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 | 1387 int size) |
1388 { | |
8590 | 1389 #if !HAVE_MMX |
4176 | 1390 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP; |
801 | 1391 int sum; |
1392 | |
1393 for(;size > 0;size--) { | |
1394 sum = -lum_m4[0]; | |
1395 sum += lum_m3[0] << 2; | |
1396 sum += lum_m2[0] << 1; | |
1397 lum_m4[0]=lum_m2[0]; | |
1398 sum += lum_m1[0] << 2; | |
1399 sum += -lum[0]; | |
1400 lum_m2[0] = cm[(sum + 4) >> 3]; | |
1401 lum_m4++; | |
1402 lum_m3++; | |
1403 lum_m2++; | |
1404 lum_m1++; | |
1405 lum++; | |
1406 } | |
1407 #else | |
1408 | |
1044 | 1409 { |
1410 pxor_r2r(mm7,mm7); | |
8316 | 1411 movq_m2r(ff_pw_4,mm6); |
1044 | 1412 } |
801 | 1413 for (;size > 3; size-=4) { |
1414 DEINT_INPLACE_LINE_LUM | |
1415 lum_m4+=4; | |
1416 lum_m3+=4; | |
1417 lum_m2+=4; | |
1418 lum_m1+=4; | |
1419 lum+=4; | |
1420 } | |
1421 #endif | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1422 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1423 |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1424 /* 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
|
1425 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
|
1426 against the top field. */ |
1064 | 1427 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
|
1428 const uint8_t *src1, int src_wrap, |
801 | 1429 int width, int height) |
1430 { | |
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1431 const uint8_t *src_m2, *src_m1, *src_0, *src_p1, *src_p2; |
801 | 1432 int y; |
1433 | |
1434 src_m2 = src1; | |
1435 src_m1 = src1; | |
1436 src_0=&src_m1[src_wrap]; | |
1437 src_p1=&src_0[src_wrap]; | |
1438 src_p2=&src_p1[src_wrap]; | |
1439 for(y=0;y<(height-2);y+=2) { | |
1440 memcpy(dst,src_m1,width); | |
1441 dst += dst_wrap; | |
1442 deinterlace_line(dst,src_m2,src_m1,src_0,src_p1,src_p2,width); | |
1443 src_m2 = src_0; | |
1444 src_m1 = src_p1; | |
1445 src_0 = src_p2; | |
1446 src_p1 += 2*src_wrap; | |
1447 src_p2 += 2*src_wrap; | |
1448 dst += dst_wrap; | |
1449 } | |
1450 memcpy(dst,src_m1,width); | |
1451 dst += dst_wrap; | |
1452 /* do last line */ | |
1453 deinterlace_line(dst,src_m2,src_m1,src_0,src_0,src_0,width); | |
1454 } | |
1455 | |
1064 | 1456 static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap, |
2979 | 1457 int width, int height) |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1458 { |
1064 | 1459 uint8_t *src_m1, *src_0, *src_p1, *src_p2; |
801 | 1460 int y; |
1064 | 1461 uint8_t *buf; |
1462 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
|
1463 |
801 | 1464 src_m1 = src1; |
1465 memcpy(buf,src_m1,width); | |
1466 src_0=&src_m1[src_wrap]; | |
1467 src_p1=&src_0[src_wrap]; | |
1468 src_p2=&src_p1[src_wrap]; | |
1469 for(y=0;y<(height-2);y+=2) { | |
1470 deinterlace_line_inplace(buf,src_m1,src_0,src_p1,src_p2,width); | |
1471 src_m1 = src_p1; | |
1472 src_0 = src_p2; | |
1473 src_p1 += 2*src_wrap; | |
1474 src_p2 += 2*src_wrap; | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1475 } |
801 | 1476 /* do last line */ |
1477 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
|
1478 av_free(buf); |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1479 } |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1480 |
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1481 int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, |
9221
a15ec86bf752
Globally prefer enum PixelFormat over int when it makes sense.
stefano
parents:
9217
diff
changeset
|
1482 enum PixelFormat pix_fmt, int width, int height) |
0 | 1483 { |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1484 int i; |
0 | 1485 |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1486 if (pix_fmt != PIX_FMT_YUV420P && |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1487 pix_fmt != PIX_FMT_YUV422P && |
1425
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
1488 pix_fmt != PIX_FMT_YUV444P && |
5810 | 1489 pix_fmt != PIX_FMT_YUV411P && |
1490 pix_fmt != PIX_FMT_GRAY8) | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1491 return -1; |
801 | 1492 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
|
1493 return -1; |
801 | 1494 |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1495 for(i=0;i<3;i++) { |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1496 if (i == 1) { |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1497 switch(pix_fmt) { |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1498 case PIX_FMT_YUV420P: |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1499 width >>= 1; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1500 height >>= 1; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1501 break; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1502 case PIX_FMT_YUV422P: |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1503 width >>= 1; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1504 break; |
1425
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
1505 case PIX_FMT_YUV411P: |
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
1506 width >>= 2; |
f53d31c5eac9
* ffmpeg was *silently* rejecting to deinterlace NTSC DV. The problem
romansh
parents:
1353
diff
changeset
|
1507 break; |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1508 default: |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1509 break; |
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1510 } |
5810 | 1511 if (pix_fmt == PIX_FMT_GRAY8) { |
1512 break; | |
1513 } | |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1514 } |
801 | 1515 if (src == dst) { |
1488
766a2f4edbea
avcodec const correctness patch by (Drew Hess <dhess at ilm dot com>)
michaelni
parents:
1425
diff
changeset
|
1516 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
|
1517 width, height); |
801 | 1518 } else { |
1519 deinterlace_bottom_field(dst->data[i],dst->linesize[i], | |
1520 src->data[i], src->linesize[i], | |
1521 width, height); | |
1522 } | |
0 | 1523 } |
5735 | 1524 emms_c(); |
52
1d796bdb2c2a
added 422P, 444P support - added deinterlace support - added xxx to RGB24 convertion
glantau
parents:
18
diff
changeset
|
1525 return 0; |
0 | 1526 } |
440
000aeeac27a2
* started to cleanup name clashes for onetime compilation
kabi
parents:
429
diff
changeset
|
1527 |