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