History

libavutil/swscale: YUV444P10/YUV444P9 support.

Also add missing glue code for recently added YUV422P10 formats to swscale.

Ronald S. Bultje committed 15 years ago

Commit 103278f1 parent c1498435 files · +83 −1Browse files

Unified · Split

5 files
  1. libavutil/pixdesc.c +46 −0
  2. libavutil/pixfmt.h +6 −0
  3. libswscale/swscale.c +13 −1
  4. libswscale/swscale_internal.h +12 −0
  5. libswscale/utils.c +6 −0
libavutil/pixdesc.c+46−0
@@ -878,6 +878,52 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = { · 877 unmodified lines
878 },878 },
879 .flags = PIX_FMT_BE,879 .flags = PIX_FMT_BE,
880 },880 },
881 [PIX_FMT_YUV444P10LE] = {
882 .name = "yuv444p10le",
883 .nb_components= 3,
884 .log2_chroma_w= 0,
885 .log2_chroma_h= 0,
886 .comp = {
887 {0,1,1,0,9}, /* Y */
888 {1,1,1,0,9}, /* U */
889 {2,1,1,0,9}, /* V */
890 },
891 },
892 [PIX_FMT_YUV444P10BE] = {
893 .name = "yuv444p10be",
894 .nb_components= 3,
895 .log2_chroma_w= 0,
896 .log2_chroma_h= 0,
897 .comp = {
898 {0,1,1,0,9}, /* Y */
899 {1,1,1,0,9}, /* U */
900 {2,1,1,0,9}, /* V */
901 },
902 .flags = PIX_FMT_BE,
903 },
904 [PIX_FMT_YUV444P9LE] = {
905 .name = "yuv444p9le",
906 .nb_components= 3,
907 .log2_chroma_w= 0,
908 .log2_chroma_h= 0,
909 .comp = {
910 {0,1,1,0,8}, /* Y */
911 {1,1,1,0,8}, /* U */
912 {2,1,1,0,8}, /* V */
913 },
914 },
915 [PIX_FMT_YUV444P9BE] = {
916 .name = "yuv444p9be",
917 .nb_components= 3,
918 .log2_chroma_w= 0,
919 .log2_chroma_h= 0,
920 .comp = {
921 {0,1,1,0,9}, /* Y */
922 {1,1,1,0,9}, /* U */
923 {2,1,1,0,9}, /* V */
924 },
925 .flags = PIX_FMT_BE,
926 },
881 [PIX_FMT_DXVA2_VLD] = {927 [PIX_FMT_DXVA2_VLD] = {
882 .name = "dxva2_vld",928 .name = "dxva2_vld",
883 .log2_chroma_w = 1,929 .log2_chroma_w = 1,
libavutil/pixfmt.h+6−0
@@ -141,6 +141,10 @@ enum PixelFormat { · 140 unmodified lines
141 PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian141 PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
142 PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian142 PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
143 PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian143 PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
144 PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
145 PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
146 PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
147 PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
144 PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions148 PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
145};149};
146 150
@@ -166,8 +170,10 @@ enum PixelFormat { · 19 unmodified lines
166#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE)170#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE)
167 171
168#define PIX_FMT_YUV420P9 PIX_FMT_NE(YUV420P9BE , YUV420P9LE)172#define PIX_FMT_YUV420P9 PIX_FMT_NE(YUV420P9BE , YUV420P9LE)
173#define PIX_FMT_YUV444P9 PIX_FMT_NE(YUV444P9BE , YUV444P9LE)
169#define PIX_FMT_YUV420P10 PIX_FMT_NE(YUV420P10BE, YUV420P10LE)174#define PIX_FMT_YUV420P10 PIX_FMT_NE(YUV420P10BE, YUV420P10LE)
170#define PIX_FMT_YUV422P10 PIX_FMT_NE(YUV422P10BE, YUV422P10LE)175#define PIX_FMT_YUV422P10 PIX_FMT_NE(YUV422P10BE, YUV422P10LE)
176#define PIX_FMT_YUV444P10 PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
171#define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE)177#define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
172#define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE)178#define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
173#define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE)179#define PIX_FMT_YUV444P16 PIX_FMT_NE(YUV444P16BE, YUV444P16LE)
libswscale/swscale.c+13−1
@@ -1821,7 +1821,7 @@ find_c_packed_planar_out_funcs(SwsContext *c, · 1820 unmodified lines
1821 } else if (is16BPS(dstFormat)) {1821 } else if (is16BPS(dstFormat)) {
1822 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX16BE_c : yuv2yuvX16LE_c;1822 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX16BE_c : yuv2yuvX16LE_c;
1823 } else if (is9_OR_10BPS(dstFormat)) {1823 } else if (is9_OR_10BPS(dstFormat)) {
1824 if (dstFormat == PIX_FMT_YUV420P9BE || dstFormat == PIX_FMT_YUV420P9LE) {1824 if (av_pix_fmt_descriptors[dstFormat].comp[0].depth_minus1 == 8) {
1825 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX9BE_c : yuv2yuvX9LE_c;1825 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX9BE_c : yuv2yuvX9LE_c;
1826 } else {1826 } else {
1827 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX10BE_c : yuv2yuvX10LE_c;1827 *yuv2yuvX = isBE(dstFormat) ? yuv2yuvX10BE_c : yuv2yuvX10LE_c;
@@ -2161,9 +2161,15 @@ static av_cold void sws_init_swScale_c(SwsContext *c) · 333 unmodified lines
2161 case PIX_FMT_PAL8 :2161 case PIX_FMT_PAL8 :
2162 case PIX_FMT_BGR4_BYTE:2162 case PIX_FMT_BGR4_BYTE:
2163 case PIX_FMT_RGB4_BYTE: c->chrToYV12 = palToUV_c; break;2163 case PIX_FMT_RGB4_BYTE: c->chrToYV12 = palToUV_c; break;
2164 case PIX_FMT_YUV444P9BE:
2164 case PIX_FMT_YUV420P9BE: c->chrToYV12 = BE9ToUV_c; break;2165 case PIX_FMT_YUV420P9BE: c->chrToYV12 = BE9ToUV_c; break;
2166 case PIX_FMT_YUV444P9LE:
2165 case PIX_FMT_YUV420P9LE: c->chrToYV12 = LE9ToUV_c; break;2167 case PIX_FMT_YUV420P9LE: c->chrToYV12 = LE9ToUV_c; break;
2168 case PIX_FMT_YUV444P10BE:
2169 case PIX_FMT_YUV422P10BE:
2166 case PIX_FMT_YUV420P10BE: c->chrToYV12 = BE10ToUV_c; break;2170 case PIX_FMT_YUV420P10BE: c->chrToYV12 = BE10ToUV_c; break;
2171 case PIX_FMT_YUV422P10LE:
2172 case PIX_FMT_YUV444P10LE:
2167 case PIX_FMT_YUV420P10LE: c->chrToYV12 = LE10ToUV_c; break;2173 case PIX_FMT_YUV420P10LE: c->chrToYV12 = LE10ToUV_c; break;
2168 case PIX_FMT_YUV420P16BE:2174 case PIX_FMT_YUV420P16BE:
2169 case PIX_FMT_YUV422P16BE:2175 case PIX_FMT_YUV422P16BE:
@@ -2219,9 +2225,15 @@ static av_cold void sws_init_swScale_c(SwsContext *c) · 49 unmodified lines
2219 c->lumToYV12 = NULL;2225 c->lumToYV12 = NULL;
2220 c->alpToYV12 = NULL;2226 c->alpToYV12 = NULL;
2221 switch (srcFormat) {2227 switch (srcFormat) {
2228 case PIX_FMT_YUV444P9BE:
2222 case PIX_FMT_YUV420P9BE: c->lumToYV12 = BE9ToY_c; break;2229 case PIX_FMT_YUV420P9BE: c->lumToYV12 = BE9ToY_c; break;
2230 case PIX_FMT_YUV444P9LE:
2223 case PIX_FMT_YUV420P9LE: c->lumToYV12 = LE9ToY_c; break;2231 case PIX_FMT_YUV420P9LE: c->lumToYV12 = LE9ToY_c; break;
2232 case PIX_FMT_YUV444P10BE:
2233 case PIX_FMT_YUV422P10BE:
2224 case PIX_FMT_YUV420P10BE: c->lumToYV12 = BE10ToY_c; break;2234 case PIX_FMT_YUV420P10BE: c->lumToYV12 = BE10ToY_c; break;
2235 case PIX_FMT_YUV444P10LE:
2236 case PIX_FMT_YUV422P10LE:
2225 case PIX_FMT_YUV420P10LE: c->lumToYV12 = LE10ToY_c; break;2237 case PIX_FMT_YUV420P10LE: c->lumToYV12 = LE10ToY_c; break;
2226 case PIX_FMT_YUYV422 :2238 case PIX_FMT_YUYV422 :
2227 case PIX_FMT_YUV420P16BE:2239 case PIX_FMT_YUV420P16BE:
libswscale/swscale_internal.h+12−0
@@ -355,6 +355,12 @@ const char *sws_format_name(enum PixelFormat format); · 354 unmodified lines
355#define is9_OR_10BPS(x) ( \355#define is9_OR_10BPS(x) ( \
356 (x)==PIX_FMT_YUV420P9LE \356 (x)==PIX_FMT_YUV420P9LE \
357 || (x)==PIX_FMT_YUV420P9BE \357 || (x)==PIX_FMT_YUV420P9BE \
358 || (x)==PIX_FMT_YUV444P9BE \
359 || (x)==PIX_FMT_YUV444P9LE \
360 || (x)==PIX_FMT_YUV422P10BE \
361 || (x)==PIX_FMT_YUV422P10LE \
362 || (x)==PIX_FMT_YUV444P10BE \
363 || (x)==PIX_FMT_YUV444P10LE \
358 || (x)==PIX_FMT_YUV420P10LE \364 || (x)==PIX_FMT_YUV420P10LE \
359 || (x)==PIX_FMT_YUV420P10BE \365 || (x)==PIX_FMT_YUV420P10BE \
360 )366 )
@@ -373,12 +379,18 @@ const char *sws_format_name(enum PixelFormat format); · 12 unmodified lines
373#define isPlanarYUV(x) ( \379#define isPlanarYUV(x) ( \
374 isPlanar8YUV(x) \380 isPlanar8YUV(x) \
375 || (x)==PIX_FMT_YUV420P9LE \381 || (x)==PIX_FMT_YUV420P9LE \
382 || (x)==PIX_FMT_YUV444P9LE \
376 || (x)==PIX_FMT_YUV420P10LE \383 || (x)==PIX_FMT_YUV420P10LE \
384 || (x)==PIX_FMT_YUV422P10LE \
385 || (x)==PIX_FMT_YUV444P10LE \
377 || (x)==PIX_FMT_YUV420P16LE \386 || (x)==PIX_FMT_YUV420P16LE \
378 || (x)==PIX_FMT_YUV422P16LE \387 || (x)==PIX_FMT_YUV422P16LE \
379 || (x)==PIX_FMT_YUV444P16LE \388 || (x)==PIX_FMT_YUV444P16LE \
380 || (x)==PIX_FMT_YUV420P9BE \389 || (x)==PIX_FMT_YUV420P9BE \
390 || (x)==PIX_FMT_YUV444P9BE \
381 || (x)==PIX_FMT_YUV420P10BE \391 || (x)==PIX_FMT_YUV420P10BE \
392 || (x)==PIX_FMT_YUV422P10BE \
393 || (x)==PIX_FMT_YUV444P10BE \
382 || (x)==PIX_FMT_YUV420P16BE \394 || (x)==PIX_FMT_YUV420P16BE \
383 || (x)==PIX_FMT_YUV422P16BE \395 || (x)==PIX_FMT_YUV422P16BE \
384 || (x)==PIX_FMT_YUV444P16BE \396 || (x)==PIX_FMT_YUV444P16BE \
libswscale/utils.c+6−0
@@ -110,12 +110,18 @@ const char *swscale_license(void) · 109 unmodified lines
110 || (x)==PIX_FMT_MONOWHITE \110 || (x)==PIX_FMT_MONOWHITE \
111 || (x)==PIX_FMT_MONOBLACK \111 || (x)==PIX_FMT_MONOBLACK \
112 || (x)==PIX_FMT_YUV420P9LE \112 || (x)==PIX_FMT_YUV420P9LE \
113 || (x)==PIX_FMT_YUV444P9LE \
113 || (x)==PIX_FMT_YUV420P10LE \114 || (x)==PIX_FMT_YUV420P10LE \
115 || (x)==PIX_FMT_YUV422P10LE \
116 || (x)==PIX_FMT_YUV444P10LE \
114 || (x)==PIX_FMT_YUV420P16LE \117 || (x)==PIX_FMT_YUV420P16LE \
115 || (x)==PIX_FMT_YUV422P16LE \118 || (x)==PIX_FMT_YUV422P16LE \
116 || (x)==PIX_FMT_YUV444P16LE \119 || (x)==PIX_FMT_YUV444P16LE \
117 || (x)==PIX_FMT_YUV420P9BE \120 || (x)==PIX_FMT_YUV420P9BE \
121 || (x)==PIX_FMT_YUV444P9BE \
118 || (x)==PIX_FMT_YUV420P10BE \122 || (x)==PIX_FMT_YUV420P10BE \
123 || (x)==PIX_FMT_YUV444P10BE \
124 || (x)==PIX_FMT_YUV422P10BE \
119 || (x)==PIX_FMT_YUV420P16BE \125 || (x)==PIX_FMT_YUV420P16BE \
120 || (x)==PIX_FMT_YUV422P16BE \126 || (x)==PIX_FMT_YUV422P16BE \
121 || (x)==PIX_FMT_YUV444P16BE \127 || (x)==PIX_FMT_YUV444P16BE \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t