History

swscale: add support for new 10/12 bit MSB formats

Timo Rothenpieler committed 1 year ago

Commit 02a7c851 parent e93de9931 files · +436 −57Browse files

Unified · Split

31 files
  1. libswscale/format.c +8 −0
  2. libswscale/input.c +188 −52
  3. libswscale/loongarch/output_lasx.c +1 −0
  4. libswscale/loongarch/output_lsx.c +1 −0
  5. libswscale/output.c +117 −0
  6. libswscale/ppc/swscale_altivec.c +1 −1
  7. libswscale/ppc/swscale_vsx.c +1 −1
  8. libswscale/swscale_unscaled.c +5 −1
  9. libswscale/tests/floatimg_cmp.c +2 −0
  10. libswscale/utils.c +2 −0
  11. libswscale/x86/swscale.c +2 −2
  12. tests/ref/fate/filter-pixdesc-gbrp10msbbe +1 −0
  13. tests/ref/fate/filter-pixdesc-gbrp10msble +1 −0
  14. tests/ref/fate/filter-pixdesc-gbrp12msbbe +1 −0
  15. tests/ref/fate/filter-pixdesc-gbrp12msble +1 −0
  16. tests/ref/fate/filter-pixdesc-yuv444p10msbbe +1 −0
  17. tests/ref/fate/filter-pixdesc-yuv444p10msble +1 −0
  18. tests/ref/fate/filter-pixdesc-yuv444p12msbbe +1 −0
  19. tests/ref/fate/filter-pixdesc-yuv444p12msble +1 −0
  20. tests/ref/fate/filter-pixfmts-copy +8 −0
  21. tests/ref/fate/filter-pixfmts-crop +8 −0
  22. tests/ref/fate/filter-pixfmts-field +8 −0
  23. tests/ref/fate/filter-pixfmts-fieldorder +8 −0
  24. tests/ref/fate/filter-pixfmts-hflip +8 −0
  25. tests/ref/fate/filter-pixfmts-il +8 −0
  26. tests/ref/fate/filter-pixfmts-null +8 −0
  27. tests/ref/fate/filter-pixfmts-pad +4 −0
  28. tests/ref/fate/filter-pixfmts-scale +8 −0
  29. tests/ref/fate/filter-pixfmts-transpose +8 −0
  30. tests/ref/fate/filter-pixfmts-vflip +8 −0
  31. tests/ref/fate/sws-floatimg-cmp +16 −0
libswscale/format.c+8−0
@@ -157,6 +157,10 @@ static const FormatEntry format_entries[] = { · 156 unmodified lines
157157 [AV_PIX_FMT_YUV444P12LE] = { 1, 1 },
158158 [AV_PIX_FMT_YUV444P14BE] = { 1, 1 },
159159 [AV_PIX_FMT_YUV444P14LE] = { 1, 1 },
160+ [AV_PIX_FMT_YUV444P10MSBBE] = { 1, 1 },
161+ [AV_PIX_FMT_YUV444P10MSBLE] = { 1, 1 },
162+ [AV_PIX_FMT_YUV444P12MSBBE] = { 1, 1 },
163+ [AV_PIX_FMT_YUV444P12MSBLE] = { 1, 1 },
160164 [AV_PIX_FMT_GBRP] = { 1, 1 },
161165 [AV_PIX_FMT_GBRP9LE] = { 1, 1 },
162166 [AV_PIX_FMT_GBRP9BE] = { 1, 1 },
@@ -164,8 +168,12 @@ static const FormatEntry format_entries[] = { · 1 unmodified line
164168 [AV_PIX_FMT_GBRP10BE] = { 1, 1 },
165169 [AV_PIX_FMT_GBRAP10LE] = { 1, 1 },
166170 [AV_PIX_FMT_GBRAP10BE] = { 1, 1 },
171+ [AV_PIX_FMT_GBRP10MSBLE] = { 1, 1 },
172+ [AV_PIX_FMT_GBRP10MSBBE] = { 1, 1 },
167173 [AV_PIX_FMT_GBRP12LE] = { 1, 1 },
168174 [AV_PIX_FMT_GBRP12BE] = { 1, 1 },
175+ [AV_PIX_FMT_GBRP12MSBLE] = { 1, 1 },
176+ [AV_PIX_FMT_GBRP12MSBBE] = { 1, 1 },
169177 [AV_PIX_FMT_GBRAP12LE] = { 1, 1 },
170178 [AV_PIX_FMT_GBRAP12BE] = { 1, 1 },
171179 [AV_PIX_FMT_GBRP14LE] = { 1, 1 },
libswscale/input.c+188−52
@@ -1006,6 +1006,64 @@ p01x_wrapper(p010, 6) · 1005 unmodified lines
10061006 p01x_wrapper(p012, 4)
10071007 p01x_uv_wrapper(p016, 0)
10081008
1009+#define shf16_uv_wrapper(shift) \
1010+ static void shf16_ ## shift ## LEToUV_c(uint8_t *dstU, \
1011+ uint8_t *dstV, \
1012+ const uint8_t *unused0, \
1013+ const uint8_t *src1, \
1014+ const uint8_t *src2, int width, \
1015+ uint32_t *unused, void *opq) \
1016+ { \
1017+ int i; \
1018+ for (i = 0; i < width; i++) { \
1019+ AV_WN16(dstU + i * 2, AV_RL16(src1 + i * 2) >> (16 - shift)); \
1020+ AV_WN16(dstV + i * 2, AV_RL16(src2 + i * 2) >> (16 - shift)); \
1021+ } \
1022+ } \
1023+ \
1024+ static void shf16_ ## shift ## BEToUV_c(uint8_t *dstU, \
1025+ uint8_t *dstV, \
1026+ const uint8_t *unused0, \
1027+ const uint8_t *src1, \
1028+ const uint8_t *src2, int width, \
1029+ uint32_t *unused, void *opq) \
1030+ { \
1031+ int i; \
1032+ for (i = 0; i < width; i++) { \
1033+ AV_WN16(dstU + i * 2, AV_RB16(src1 + i * 2) >> (16 - shift)); \
1034+ AV_WN16(dstV + i * 2, AV_RB16(src2 + i * 2) >> (16 - shift)); \
1035+ } \
1036+ }
1037+
1038+#define shf16_wrapper(shift) \
1039+ static void shf16_ ## shift ## LEToY_c(uint8_t *dst, \
1040+ const uint8_t *src, \
1041+ const uint8_t *unused1, \
1042+ const uint8_t *unused2, int width, \
1043+ uint32_t *unused, void *opq) \
1044+ { \
1045+ int i; \
1046+ for (i = 0; i < width; i++) { \
1047+ AV_WN16(dst + i * 2, AV_RL16(src + i * 2) >> (16 - shift)); \
1048+ } \
1049+ } \
1050+ \
1051+ static void shf16_ ## shift ## BEToY_c(uint8_t *dst, \
1052+ const uint8_t *src, \
1053+ const uint8_t *unused1, \
1054+ const uint8_t *unused2, int width, \
1055+ uint32_t *unused, void *opq) \
1056+ { \
1057+ int i; \
1058+ for (i = 0; i < width; i++) { \
1059+ AV_WN16(dst + i * 2, AV_RB16(src + i * 2) >> (16 - shift)); \
1060+ } \
1061+ } \
1062+ shf16_uv_wrapper(shift)
1063+
1064+shf16_wrapper(10)
1065+shf16_wrapper(12)
1066+
10091067 static void bgr24ToY_c(uint8_t *_dst, const uint8_t *src, const uint8_t *unused1, const uint8_t *unused2,
10101068 int width, uint32_t *rgb2yuv, void *opq)
10111069 {
@@ -1153,56 +1211,66 @@ static void planar_rgb_to_uv(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[ · 141 unmodified lines
11531211
11541212 #define rdpx(src) \
11551213 (is_be ? AV_RB16(src) : AV_RL16(src))
1156−static av_always_inline void planar_rgb16_to_y(uint8_t *_dst, const uint8_t *_src[4],
1157− int width, int bpc, int is_be, int32_t *rgb2yuv)
1158−{
1159− int i;
1160− const uint16_t **src = (const uint16_t **)_src;
1161− uint16_t *dst = (uint16_t *)_dst;
1162− int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX];
1163− int shift = bpc < 16 ? bpc : 14;
1164− for (i = 0; i < width; i++) {
1165− int g = rdpx(src[0] + i);
1166− int b = rdpx(src[1] + i);
1167− int r = rdpx(src[2] + i);
11681214
1169− dst[i] = (ry*r + gy*g + by*b + (16 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);
1170− }
1171−}
1172−
1173−static av_always_inline void planar_rgb16_to_a(uint8_t *_dst, const uint8_t *_src[4],
1174− int width, int bpc, int is_be, int32_t *rgb2yuv)
1175−{
1176− int i;
1177− const uint16_t **src = (const uint16_t **)_src;
1178− uint16_t *dst = (uint16_t *)_dst;
1179− int shift = bpc < 16 ? bpc : 14;
1180−
1181− for (i = 0; i < width; i++) {
1182− dst[i] = rdpx(src[3] + i) << (14 - shift);
1183− }
1184−}
1185−
1186−static av_always_inline void planar_rgb16_to_uv(uint8_t *_dstU, uint8_t *_dstV,
1187− const uint8_t *_src[4], int width,
1188− int bpc, int is_be, int32_t *rgb2yuv)
1189−{
1190− int i;
1191− const uint16_t **src = (const uint16_t **)_src;
1192− uint16_t *dstU = (uint16_t *)_dstU;
1193− uint16_t *dstV = (uint16_t *)_dstV;
1194− int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX];
1195− int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX];
1196− int shift = bpc < 16 ? bpc : 14;
1197− for (i = 0; i < width; i++) {
1198− int g = rdpx(src[0] + i);
1199− int b = rdpx(src[1] + i);
1200− int r = rdpx(src[2] + i);
1215+#define shifted_planar_rgb16(rdpx_shift) \
1216+ static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_y(uint8_t *_dst, const uint8_t *_src[4], \
1217+ int width, int bpc, int is_be, int32_t *rgb2yuv) \
1218+ { \
1219+ int i; \
1220+ const uint16_t **src = (const uint16_t **)_src; \
1221+ uint16_t *dst = (uint16_t *)_dst; \
1222+ int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; \
1223+ int shift = bpc < 16 ? bpc : 14; \
1224+ for (i = 0; i < width; i++) { \
1225+ int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \
1226+ int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \
1227+ int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \
1228+ \
1229+ dst[i] = (ry*r + gy*g + by*b + (16 << (RGB2YUV_SHIFT + bpc - 8)) \
1230+ + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1231+ } \
1232+ } \
1233+ \
1234+ static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_a(uint8_t *_dst, const uint8_t *_src[4], \
1235+ int width, int bpc, int is_be, int32_t *rgb2yuv) \
1236+ { \
1237+ int i; \
1238+ const uint16_t **src = (const uint16_t **)_src; \
1239+ uint16_t *dst = (uint16_t *)_dst; \
1240+ int shift = (bpc < 16 ? bpc : 14) + 16 - rdpx_shift; \
1241+ \
1242+ for (i = 0; i < width; i++) { \
1243+ dst[i] = rdpx(src[3] + i) << (14 - shift); \
1244+ } \
1245+ } \
1246+ \
1247+ static av_always_inline void planar_rgb16_s ## rdpx_shift ## _to_uv(uint8_t *_dstU, uint8_t *_dstV, \
1248+ const uint8_t *_src[4], int width, \
1249+ int bpc, int is_be, int32_t *rgb2yuv) \
1250+ { \
1251+ int i; \
1252+ const uint16_t **src = (const uint16_t **)_src; \
1253+ uint16_t *dstU = (uint16_t *)_dstU; \
1254+ uint16_t *dstV = (uint16_t *)_dstV; \
1255+ int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; \
1256+ int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; \
1257+ int shift = bpc < 16 ? bpc : 14; \
1258+ for (i = 0; i < width; i++) { \
1259+ int g = rdpx(src[0] + i) >> (16 - rdpx_shift); \
1260+ int b = rdpx(src[1] + i) >> (16 - rdpx_shift); \
1261+ int r = rdpx(src[2] + i) >> (16 - rdpx_shift); \
1262+ \
1263+ dstU[i] = (ru*r + gu*g + bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \
1264+ + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1265+ dstV[i] = (rv*r + gv*g + bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) \
1266+ + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14); \
1267+ } \
1268+ }
1269+
1270+shifted_planar_rgb16(16)
1271+shifted_planar_rgb16(12)
1272+shifted_planar_rgb16(10)
12011273
1202− dstU[i] = (ru*r + gu*g + bu*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);
1203− dstV[i] = (rv*r + gv*g + bv*b + (128 << (RGB2YUV_SHIFT + bpc - 8)) + (1 << (RGB2YUV_SHIFT + shift - 15))) >> (RGB2YUV_SHIFT + shift - 14);
1204− }
1205−}
12061274 #undef rdpx
12071275
12081276 #define rdpx(src) (is_be ? av_int2float(AV_RB32(src)): av_int2float(AV_RL32(src)))
@@ -1334,13 +1402,13 @@ static av_always_inline void read_yaf32_alpha_c(uint8_t *_dst, const uint8_t *_s · 125 unmodified lines
13341402 static void planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
13351403 int w, int32_t *rgb2yuv, void *opq) \
13361404 { \
1337− planar_rgb16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1405+ planar_rgb16_s16_to_y(dst, src, w, nbits, endian, rgb2yuv); \
13381406 } \
13391407 static void planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
13401408 const uint8_t *src[4], int w, int32_t *rgb2yuv, \
13411409 void *opq) \
13421410 { \
1343− planar_rgb16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
1411+ planar_rgb16_s16_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
13441412 } \
13451413
13461414 #define rgb9plus_planar_transparency_funcs(nbits) \
@@ -1348,19 +1416,36 @@ static void planar_rgb##nbits##le_to_a(uint8_t *dst, const uint8_t *src[4], \ · 1 unmodified line
13481416 int w, int32_t *rgb2yuv, \
13491417 void *opq) \
13501418 { \
1351− planar_rgb16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
1419+ planar_rgb16_s16_to_a(dst, src, w, nbits, 0, rgb2yuv); \
13521420 } \
13531421 static void planar_rgb##nbits##be_to_a(uint8_t *dst, const uint8_t *src[4], \
13541422 int w, int32_t *rgb2yuv, \
13551423 void *opq) \
13561424 { \
1357− planar_rgb16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1425+ planar_rgb16_s16_to_a(dst, src, w, nbits, 1, rgb2yuv); \
1426+}
1427+
1428+#define rgb9plus_msb_planar_funcs_endian(nbits, endian_name, endian) \
1429+static void msb_planar_rgb##nbits##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
1430+ int w, int32_t *rgb2yuv, void *opq) \
1431+{ \
1432+ planar_rgb16_s##nbits##_to_y(dst, src, w, nbits, endian, rgb2yuv); \
1433+} \
1434+static void msb_planar_rgb##nbits##endian_name##_to_uv(uint8_t *dstU, uint8_t *dstV, \
1435+ const uint8_t *src[4], int w, int32_t *rgb2yuv, \
1436+ void *opq) \
1437+{ \
1438+ planar_rgb16_s##nbits##_to_uv(dstU, dstV, src, w, nbits, endian, rgb2yuv); \
13581439 }
13591440
13601441 #define rgb9plus_planar_funcs(nbits) \
13611442 rgb9plus_planar_funcs_endian(nbits, le, 0) \
13621443 rgb9plus_planar_funcs_endian(nbits, be, 1)
13631444
1445+#define rgb9plus_msb_planar_funcs(nbits) \
1446+ rgb9plus_msb_planar_funcs_endian(nbits, le, 0) \
1447+ rgb9plus_msb_planar_funcs_endian(nbits, be, 1)
1448+
13641449 rgb9plus_planar_funcs(9)
13651450 rgb9plus_planar_funcs(10)
13661451 rgb9plus_planar_funcs(12)
@@ -1372,6 +1457,9 @@ rgb9plus_planar_transparency_funcs(12) · 5 unmodified lines
13721457 rgb9plus_planar_transparency_funcs(14)
13731458 rgb9plus_planar_transparency_funcs(16)
13741459
1460+rgb9plus_msb_planar_funcs(10)
1461+rgb9plus_msb_planar_funcs(12)
1462+
13751463 #define rgbf32_funcs_endian(endian_name, endian) \
13761464 static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \
13771465 int w, int32_t *rgb2yuv, void *opq) \
@@ -1786,6 +1874,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 408 unmodified lines
17861874 case AV_PIX_FMT_GBRPF16LE:
17871875 *readChrPlanar = planar_rgbf16le_to_uv;
17881876 break;
1877+ case AV_PIX_FMT_GBRP10MSBLE:
1878+ *readChrPlanar = msb_planar_rgb10le_to_uv;
1879+ break;
1880+ case AV_PIX_FMT_GBRP12MSBLE:
1881+ *readChrPlanar = msb_planar_rgb12le_to_uv;
1882+ break;
17891883 case AV_PIX_FMT_GBRP9BE:
17901884 *readChrPlanar = planar_rgb9be_to_uv;
17911885 break;
@@ -1813,6 +1907,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 21 unmodified lines
18131907 case AV_PIX_FMT_GBRPF16BE:
18141908 *readChrPlanar = planar_rgbf16be_to_uv;
18151909 break;
1910+ case AV_PIX_FMT_GBRP10MSBBE:
1911+ *readChrPlanar = msb_planar_rgb10be_to_uv;
1912+ break;
1913+ case AV_PIX_FMT_GBRP12MSBBE:
1914+ *readChrPlanar = msb_planar_rgb12be_to_uv;
1915+ break;
18161916 case AV_PIX_FMT_GBRAP:
18171917 case AV_PIX_FMT_GBRP:
18181918 *readChrPlanar = planar_rgb_to_uv;
@@ -1882,6 +1982,18 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 63 unmodified lines
18821982 *chrToYV12 = bswap16UV_c;
18831983 break;
18841984 #endif
1985+ case AV_PIX_FMT_YUV444P10MSBLE:
1986+ *chrToYV12 = shf16_10LEToUV_c;
1987+ break;
1988+ case AV_PIX_FMT_YUV444P12MSBLE:
1989+ *chrToYV12 = shf16_12LEToUV_c;
1990+ break;
1991+ case AV_PIX_FMT_YUV444P10MSBBE:
1992+ *chrToYV12 = shf16_10BEToUV_c;
1993+ break;
1994+ case AV_PIX_FMT_YUV444P12MSBBE:
1995+ *chrToYV12 = shf16_12BEToUV_c;
1996+ break;
18851997 case AV_PIX_FMT_VUYA:
18861998 case AV_PIX_FMT_VUYX:
18871999 *chrToYV12 = read_vuyx_UV_c;
@@ -2208,6 +2320,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 320 unmodified lines
22082320 case AV_PIX_FMT_GBRPF16LE:
22092321 *readLumPlanar = planar_rgbf16le_to_y;
22102322 break;
2323+ case AV_PIX_FMT_GBRP10MSBLE:
2324+ *readLumPlanar = msb_planar_rgb10le_to_y;
2325+ break;
2326+ case AV_PIX_FMT_GBRP12MSBLE:
2327+ *readLumPlanar = msb_planar_rgb12le_to_y;
2328+ break;
22112329 case AV_PIX_FMT_GBRP9BE:
22122330 *readLumPlanar = planar_rgb9be_to_y;
22132331 break;
@@ -2241,6 +2359,12 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 27 unmodified lines
22412359 case AV_PIX_FMT_GBRPF16BE:
22422360 *readLumPlanar = planar_rgbf16be_to_y;
22432361 break;
2362+ case AV_PIX_FMT_GBRP10MSBBE:
2363+ *readLumPlanar = msb_planar_rgb10be_to_y;
2364+ break;
2365+ case AV_PIX_FMT_GBRP12MSBBE:
2366+ *readLumPlanar = msb_planar_rgb12be_to_y;
2367+ break;
22442368 case AV_PIX_FMT_GBRAP:
22452369 *readAlpPlanar = planar_rgb_to_a;
22462370 case AV_PIX_FMT_GBRP:
@@ -2335,6 +2459,18 @@ av_cold void ff_sws_init_input_funcs(SwsInternal *c, · 88 unmodified lines
23352459 *alpToYV12 = bswap16Y_c;
23362460 break;
23372461 #endif
2462+ case AV_PIX_FMT_YUV444P10MSBLE:
2463+ *lumToYV12 = shf16_10LEToY_c;
2464+ break;
2465+ case AV_PIX_FMT_YUV444P12MSBLE:
2466+ *lumToYV12 = shf16_12LEToY_c;
2467+ break;
2468+ case AV_PIX_FMT_YUV444P10MSBBE:
2469+ *lumToYV12 = shf16_10BEToY_c;
2470+ break;
2471+ case AV_PIX_FMT_YUV444P12MSBBE:
2472+ *lumToYV12 = shf16_12BEToY_c;
2473+ break;
23382474 case AV_PIX_FMT_YA16LE:
23392475 *lumToYV12 = read_ya16le_gray_c;
23402476 break;
libswscale/loongarch/output_lasx.c+1−0
@@ -1768,6 +1768,7 @@ av_cold void ff_sws_init_output_lasx(SwsInternal *c, · 1767 unmodified lines
17681768 /* Add initialization once optimized */
17691769 if (isSemiPlanarYUV(dstFormat) && isDataInHighBits(dstFormat)) {
17701770 } else if (is16BPS(dstFormat)) {
1771+ } else if (isNBPS(dstFormat) && isDataInHighBits(dstFormat)) {
17711772 } else if (isNBPS(dstFormat)) {
17721773 } else if (dstFormat == AV_PIX_FMT_GRAYF32BE) {
17731774 } else if (dstFormat == AV_PIX_FMT_GRAYF32LE) {
libswscale/loongarch/output_lsx.c+1−0
@@ -1623,6 +1623,7 @@ av_cold void ff_sws_init_output_lsx(SwsInternal *c, · 1622 unmodified lines
16231623 /* Add initialization once optimized */
16241624 if (isSemiPlanarYUV(dstFormat) && isDataInHighBits(dstFormat)) {
16251625 } else if (is16BPS(dstFormat)) {
1626+ } else if (isNBPS(dstFormat) && isDataInHighBits(dstFormat)) {
16261627 } else if (isNBPS(dstFormat)) {
16271628 } else if (dstFormat == AV_PIX_FMT_GRAYF32BE) {
16281629 } else if (dstFormat == AV_PIX_FMT_GRAYF32LE) {
libswscale/output.c+117−0
@@ -386,6 +386,68 @@ yuv2NBPS(14, LE, 0, 10, int16_t) · 385 unmodified lines
386386 yuv2NBPS(16, BE, 1, 16, int32_t)
387387 yuv2NBPS(16, LE, 0, 16, int32_t)
388388
389+#define output_pixel(pos, val) \
390+ if (big_endian) { \
391+ AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \
392+ } else { \
393+ AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits) << (16 - output_bits)); \
394+ }
395+
396+static av_always_inline void
397+yuv2msbplane1_10_c_template(const int16_t *src, uint16_t *dest, int dstW,
398+ int big_endian, int output_bits)
399+{
400+ int i;
401+ int shift = 15 - output_bits;
402+
403+ for (i = 0; i < dstW; i++) {
404+ int val = src[i] + (1 << (shift - 1));
405+ output_pixel(&dest[i], val);
406+ }
407+}
408+
409+static av_always_inline void
410+yuv2msbplaneX_10_c_template(const int16_t *filter, int filterSize,
411+ const int16_t **src, uint16_t *dest, int dstW,
412+ int big_endian, int output_bits)
413+{
414+ int i;
415+ int shift = 11 + 16 - output_bits;
416+
417+ for (i = 0; i < dstW; i++) {
418+ int val = 1 << (shift - 1);
419+ int j;
420+
421+ for (j = 0; j < filterSize; j++)
422+ val += src[j][i] * filter[j];
423+
424+ output_pixel(&dest[i], val);
425+ }
426+}
427+
428+#define yuv2MSBNBPS(bits, BE_LE, is_be, template_size, typeX_t) \
429+static void yuv2msbplane1_ ## bits ## BE_LE ## _c(const int16_t *src, \
430+ uint8_t *dest, int dstW, \
431+ const uint8_t *dither, int offset)\
432+{ \
433+ yuv2msbplane1_ ## template_size ## _c_template((const typeX_t *) src, \
434+ (uint16_t *) dest, dstW, is_be, bits); \
435+}\
436+static void yuv2msbplaneX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \
437+ const int16_t **src, uint8_t *dest, int dstW, \
438+ const uint8_t *dither, int offset)\
439+{ \
440+ yuv2msbplaneX_## template_size ## _c_template(filter, \
441+ filterSize, (const typeX_t **) src, \
442+ (uint16_t *) dest, dstW, is_be, bits); \
443+}
444+
445+yuv2MSBNBPS(10, BE, 1, 10, int16_t)
446+yuv2MSBNBPS(10, LE, 0, 10, int16_t)
447+yuv2MSBNBPS(12, BE, 1, 10, int16_t)
448+yuv2MSBNBPS(12, LE, 0, 10, int16_t)
449+
450+#undef output_pixel
389451
390452 static void yuv2nv12cX_16LE_c(enum AVPixelFormat dstFormat, const uint8_t *chrDither,
391453 const int16_t *chrFilter, int chrFilterSize,
@@ -2352,6 +2414,46 @@ yuv2gbrp_full_X_c(SwsInternal *c, const int16_t *lumFilter, · 1960 unmodified lines
23522414 }
23532415 }
23542416
2417+static void
2418+yuv2gbrpmsb_full_X_c(SwsInternal *c, const int16_t *lumFilter,
2419+ const int16_t **lumSrc, int lumFilterSize,
2420+ const int16_t *chrFilter, const int16_t **chrUSrc,
2421+ const int16_t **chrVSrc, int chrFilterSize,
2422+ const int16_t **alpSrc, uint8_t **dest,
2423+ int dstW, int y)
2424+{
2425+ const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->opts.dst_format);
2426+ int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrc;
2427+ uint16_t **dest16 = (uint16_t**)dest;
2428+ int shift = 16 - desc->comp[0].depth;
2429+ int i;
2430+
2431+ yuv2gbrp_full_X_c(c, lumFilter, lumSrc, lumFilterSize,
2432+ chrFilter, chrUSrc, chrVSrc, chrFilterSize,
2433+ alpSrc, dest, dstW, y);
2434+
2435+ if (desc->comp[0].depth <= 8)
2436+ return;
2437+
2438+ if ((!isBE(c->opts.dst_format)) != (!HAVE_BIGENDIAN)) {
2439+ for (i = 0; i < dstW; i++) {
2440+ dest16[0][i] = av_bswap16(av_bswap16(dest16[0][i]) << shift);
2441+ dest16[1][i] = av_bswap16(av_bswap16(dest16[1][i]) << shift);
2442+ dest16[2][i] = av_bswap16(av_bswap16(dest16[2][i]) << shift);
2443+ if (hasAlpha)
2444+ dest16[3][i] = av_bswap16(av_bswap16(dest16[3][i]) << shift);
2445+ }
2446+ } else {
2447+ for (i = 0; i < dstW; i++) {
2448+ dest16[0][i] = dest16[0][i] << shift;
2449+ dest16[1][i] = dest16[1][i] << shift;
2450+ dest16[2][i] = dest16[2][i] << shift;
2451+ if (hasAlpha)
2452+ dest16[3][i] = dest16[3][i] << shift;
2453+ }
2454+ }
2455+}
2456+
23552457 static void
23562458 yuv2gbrp16_full_X_c(SwsInternal *c, const int16_t *lumFilter,
23572459 const int16_t **lumSrcx, int lumFilterSize,
@@ -3215,6 +3317,15 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c, · 857 unmodified lines
32153317 if (isSemiPlanarYUV(dstFormat)) {
32163318 *yuv2nv12cX = isBE(dstFormat) ? yuv2nv12cX_16BE_c : yuv2nv12cX_16LE_c;
32173319 }
3320+ } else if (isDataInHighBits(dstFormat) && isNBPS(dstFormat)) {
3321+ if (desc->comp[0].depth == 10) {
3322+ *yuv2planeX = isBE(dstFormat) ? yuv2msbplaneX_10BE_c : yuv2msbplaneX_10LE_c;
3323+ *yuv2plane1 = isBE(dstFormat) ? yuv2msbplane1_10BE_c : yuv2msbplane1_10LE_c;
3324+ } else if (desc->comp[0].depth == 12) {
3325+ *yuv2planeX = isBE(dstFormat) ? yuv2msbplaneX_12BE_c : yuv2msbplaneX_12LE_c;
3326+ *yuv2plane1 = isBE(dstFormat) ? yuv2msbplane1_12BE_c : yuv2msbplane1_12LE_c;
3327+ } else
3328+ av_assert0(0);
32183329 } else if (isNBPS(dstFormat)) {
32193330 if (desc->comp[0].depth == 9) {
32203331 *yuv2planeX = isBE(dstFormat) ? yuv2planeX_9BE_c : yuv2planeX_9LE_c;
@@ -3460,6 +3571,12 @@ av_cold void ff_sws_init_output_funcs(SwsInternal *c, · 239 unmodified lines
34603571 case AV_PIX_FMT_GBRAP14LE:
34613572 *yuv2anyX = yuv2gbrp_full_X_c;
34623573 break;
3574+ case AV_PIX_FMT_GBRP10MSBBE:
3575+ case AV_PIX_FMT_GBRP10MSBLE:
3576+ case AV_PIX_FMT_GBRP12MSBBE:
3577+ case AV_PIX_FMT_GBRP12MSBLE:
3578+ *yuv2anyX = yuv2gbrpmsb_full_X_c;
3579+ break;
34633580 case AV_PIX_FMT_GBRP16BE:
34643581 case AV_PIX_FMT_GBRP16LE:
34653582 case AV_PIX_FMT_GBRAP16BE:
libswscale/ppc/swscale_altivec.c+1−1
@@ -242,7 +242,7 @@ av_cold void ff_sws_init_swscale_ppc(SwsInternal *c) · 241 unmodified lines
242242 if (c->srcBpc == 8 && c->dstBpc <= 14) {
243243 c->hyScale = c->hcScale = hScale_real_altivec;
244244 }
245− if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) &&
245+ if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && !isDataInHighBits(dstFormat) &&
246246 dstFormat != AV_PIX_FMT_GRAYF32BE && dstFormat != AV_PIX_FMT_GRAYF32LE &&
247247 !c->needAlpha) {
248248 c->yuv2planeX = yuv2planeX_altivec;
libswscale/ppc/swscale_vsx.c+1−1
@@ -2041,7 +2041,7 @@ av_cold void ff_sws_init_swscale_vsx(SwsInternal *c) · 2040 unmodified lines
20412041 : hScale16To15_vsx;
20422042 }
20432043 }
2044− if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) &&
2044+ if (!is16BPS(dstFormat) && !isNBPS(dstFormat) && !isSemiPlanarYUV(dstFormat) && !isDataInHighBits(dstFormat) &&
20452045 dstFormat != AV_PIX_FMT_GRAYF32BE && dstFormat != AV_PIX_FMT_GRAYF32LE &&
20462046 !c->needAlpha) {
20472047 c->yuv2planeX = yuv2planeX_vsx;
libswscale/swscale_unscaled.c+5−1
@@ -2567,6 +2567,8 @@ void ff_get_unscaled_swscale(SwsInternal *c) · 2566 unmodified lines
25672567 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP12) ||
25682568 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP14) ||
25692569 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP16) ||
2570+ IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP10MSB) ||
2571+ IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRP12MSB) ||
25702572 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP10) ||
25712573 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP12) ||
25722574 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_GBRAP14) ||
@@ -2595,7 +2597,9 @@ void ff_get_unscaled_swscale(SwsInternal *c) · 22 unmodified lines
25952597 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P10) ||
25962598 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P12) ||
25972599 IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P14) ||
2598− IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P16))
2600+ IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P16) ||
2601+ IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P10MSB) ||
2602+ IS_DIFFERENT_ENDIANESS(srcFormat, dstFormat, AV_PIX_FMT_YUV444P12MSB))
25992603 c->convert_unscaled = bswap_16bpc;
26002604
26012605 /* bswap 32 bits per pixel/component formats */
libswscale/tests/floatimg_cmp.c+2−0
@@ -42,6 +42,7 @@ static const enum AVPixelFormat pix_fmts[] = { · 41 unmodified lines
4242 AV_PIX_FMT_YUV444P,
4343 AV_PIX_FMT_YUV444P9LE, AV_PIX_FMT_YUV444P10LE,
4444 AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_YUV444P14LE,
45+ AV_PIX_FMT_YUV444P10MSBLE, AV_PIX_FMT_YUV444P12MSBLE,
4546 AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
4647 AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
4748 AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR,
@@ -52,6 +53,7 @@ static const enum AVPixelFormat pix_fmts[] = { · 4 unmodified lines
5253 AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
5354 AV_PIX_FMT_GBRP9LE,
5455 AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRAP10LE,
56+ AV_PIX_FMT_GBRP10MSBLE, AV_PIX_FMT_GBRP12MSBLE,
5557 AV_PIX_FMT_GBRP12LE, AV_PIX_FMT_GBRAP12LE,
5658 AV_PIX_FMT_GBRP14LE,
5759 AV_PIX_FMT_GBRP16LE, AV_PIX_FMT_GBRAP16LE
libswscale/utils.c+2−0
@@ -1334,8 +1334,10 @@ av_cold int ff_sws_init_single_context(SwsContext *sws, SwsFilter *srcFilter, · 1333 unmodified lines
13341334 srcFormat != AV_PIX_FMT_RGB4_BYTE && srcFormat != AV_PIX_FMT_BGR4_BYTE &&
13351335 srcFormat != AV_PIX_FMT_GBRP9BE && srcFormat != AV_PIX_FMT_GBRP9LE &&
13361336 srcFormat != AV_PIX_FMT_GBRP10BE && srcFormat != AV_PIX_FMT_GBRP10LE &&
1337+ srcFormat != AV_PIX_FMT_GBRP10MSBBE && srcFormat != AV_PIX_FMT_GBRP10MSBLE &&
13371338 srcFormat != AV_PIX_FMT_GBRAP10BE && srcFormat != AV_PIX_FMT_GBRAP10LE &&
13381339 srcFormat != AV_PIX_FMT_GBRP12BE && srcFormat != AV_PIX_FMT_GBRP12LE &&
1340+ srcFormat != AV_PIX_FMT_GBRP12MSBBE && srcFormat != AV_PIX_FMT_GBRP12MSBLE &&
13391341 srcFormat != AV_PIX_FMT_GBRAP12BE && srcFormat != AV_PIX_FMT_GBRAP12LE &&
13401342 srcFormat != AV_PIX_FMT_GBRAP14BE && srcFormat != AV_PIX_FMT_GBRAP14LE &&
13411343 srcFormat != AV_PIX_FMT_GBRP14BE && srcFormat != AV_PIX_FMT_GBRP14LE &&
libswscale/x86/swscale.c+2−2
@@ -543,14 +543,14 @@ av_cold void ff_sws_init_swscale_x86(SwsInternal *c) · 542 unmodified lines
543543 #define ASSIGN_VSCALEX_FUNC(vscalefn, opt, do_16_case, condition_8bit) \
544544 switch(c->dstBpc){ \
545545 case 16: do_16_case; break; \
546− case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format)) vscalefn = ff_yuv2planeX_10_ ## opt; break; \
546+ case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format) && !isDataInHighBits(c->opts.dst_format)) vscalefn = ff_yuv2planeX_10_ ## opt; break; \
547547 case 9: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2planeX_9_ ## opt; break; \
548548 case 8: if ((condition_8bit) && !c->use_mmx_vfilter) vscalefn = ff_yuv2planeX_8_ ## opt; break; \
549549 }
550550 #define ASSIGN_VSCALE_FUNC(vscalefn, opt) \
551551 switch(c->dstBpc){ \
552552 case 16: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2plane1_16_ ## opt; break; \
553− case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format)) vscalefn = ff_yuv2plane1_10_ ## opt; break; \
553+ case 10: if (!isBE(c->opts.dst_format) && !isSemiPlanarYUV(c->opts.dst_format) && !isDataInHighBits(c->opts.dst_format)) vscalefn = ff_yuv2plane1_10_ ## opt; break; \
554554 case 9: if (!isBE(c->opts.dst_format)) vscalefn = ff_yuv2plane1_9_ ## opt; break; \
555555 case 8: vscalefn = ff_yuv2plane1_8_ ## opt; break; \
556556 default: av_assert0(c->dstBpc>8); \
tests/ref/fate/filter-pixdesc-gbrp10msbbe+1−0
@@ -0,0 +1 @@
1+pixdesc-gbrp10msbbe fc1a397ca61a80383b134d902cd4ae24
tests/ref/fate/filter-pixdesc-gbrp10msble+1−0
@@ -0,0 +1 @@
1+pixdesc-gbrp10msble 1acc24b493137f465be216a4d3eee77a
tests/ref/fate/filter-pixdesc-gbrp12msbbe+1−0
@@ -0,0 +1 @@
1+pixdesc-gbrp12msbbe 6bd47ffb08879dcd69c0ee86bee3600a
tests/ref/fate/filter-pixdesc-gbrp12msble+1−0
@@ -0,0 +1 @@
1+pixdesc-gbrp12msble 9ba8fe8131c643f49c5522a56449a40b
tests/ref/fate/filter-pixdesc-yuv444p10msbbe+1−0
@@ -0,0 +1 @@
1+pixdesc-yuv444p10msbbeff1c8fa25341156ee539790dc8c34efd
tests/ref/fate/filter-pixdesc-yuv444p10msble+1−0
@@ -0,0 +1 @@
1+pixdesc-yuv444p10msbled250ae9fc413980fbbd846460bb8d616
tests/ref/fate/filter-pixdesc-yuv444p12msbbe+1−0
@@ -0,0 +1 @@
1+pixdesc-yuv444p12msbbe7a306f73ba8c35c04405c5568219e87b
tests/ref/fate/filter-pixdesc-yuv444p12msble+1−0
@@ -0,0 +1 @@
1+pixdesc-yuv444p12msble618b9bafd6bf66ffd1265b1d611380b7
tests/ref/fate/filter-pixfmts-copy+8−0
@@ -34,8 +34,12 @@ gbrapf32le 1ac76b9418062a95e5c62da3ba1c8c5a · 33 unmodified lines
3434 gbrp 5fbc319e30110d19d539f5b274eddb6d
3535 gbrp10be 703a17591a2a5c236675c5101c349bcc
3636 gbrp10le ee014153f55c011918df5b2394815780
37+gbrp10msbbe 2fcce5d0a33eb93bc1065a46b77696ee
38+gbrp10msble eb68e8a797a8aa8d69d3b896013e1290
3739 gbrp12be 527d337eb5813ebba7cf969ee660d423
3840 gbrp12le fd192920b171a0cf88d61e8310e95d81
41+gbrp12msbbe 73ea99e86472f0c047dce85fa76dd428
42+gbrp12msble 102df5b20bb722c391dd1ab6ec9953a3
3943 gbrp14be 46d502db6dc5eb7e9da3c60016b2df91
4044 gbrp14le 1607f5c8f13360b53b8186f523996b1b
4145 gbrp16be 7b6764a504c853b09f5c7d0b2223c5a4
@@ -153,8 +157,12 @@ yuv440p12le 2fff7746ae7c07d407075c0e372baf46 · 111 unmodified lines
153157 yuv444p 8f90fb3a757878c545a8bfe5d19a9bab
154158 yuv444p10be 6683d5cb82c708d5f3a2a89d0311f7a4
155159 yuv444p10le 6d736fa464ff2de2b07e0a56af8444b7
160+yuv444p10msbbe 9542f394ed36ff084bbcc09883d24cac
161+yuv444p10msble bf8b831e6d6bf8bc5c2e9609fa98b01e
156162 yuv444p12be 04320ad158450ee158f84a27c6325702
157163 yuv444p12le 08a81b2ea9c7c8b447e40ef8f4a46a4a
164+yuv444p12msbbe 5bd7623158e0bc62edb900821ce2df72
165+yuv444p12msble 425731663df58c875319a0b02f4ab4cc
158166 yuv444p14be ea3057d469d0c49c24e844256ef7871e
159167 yuv444p14le 940f5908ccf06e01411f0a7bddb45c6a
160168 yuv444p16be aee24ab2e9a4656f889399f1b0d98639
tests/ref/fate/filter-pixfmts-crop+8−0
@@ -34,8 +34,12 @@ gbrapf32le 34875869f093bddf94f14c8542eca9f0 · 33 unmodified lines
3434 gbrp ec671f573c2105072ab68a1933c58fee
3535 gbrp10be 6f0130a41f01e58593d3840446dd94b7
3636 gbrp10le 9c152b7dfb7ad7bc477518d97316d04f
37+gbrp10msbbe 2bdde24ebec8d80aafa08352965cdf6d
38+gbrp10msble f500f798cc5469b9ba30fb48e584b51a
3739 gbrp12be 561516202a6e37dd19543f9bb3af339f
3840 gbrp12le 3e7f87d834748844ab326e22eb2b7487
41+gbrp12msbbe 1fe5466eb3de5186d5cad87a30666dbf
42+gbrp12msble 2c0d510341e757861f3a85899f04e52c
3943 gbrp14be 057232bca98c472a003cc46b3fd939e4
4044 gbrp14le d4764dba3c3efd1263c2c8e0f5ac9f6a
4145 gbrp16be 59e4c27ee33520e23dbceafbec27aa9b
@@ -147,8 +151,12 @@ yuv440p12le 33c5cae9acde262b194efdf78ad44258 · 105 unmodified lines
147151 yuv444p 28166fdead6f87f57f4c77156dce0466
148152 yuv444p10be 2c9b7f39c006b68d6b53791472ade1d5
149153 yuv444p10le 8427e65a1608ff8c5c88492f4926f6c1
154+yuv444p10msbbe bc2c25584af692ea8a43a931bb1afddb
155+yuv444p10msble 6ec78c600f77619c2b9c3b5ab365be26
150156 yuv444p12be 6e1f91ed1c6fc42fbc912d7d3aed0aca
151157 yuv444p12le 6a674498003ca57c8c2700b7d0ecb290
158+yuv444p12msbbe 96df9462a4b5ac0c9d428f3be4932723
159+yuv444p12msble 65cbf6aae7b3124643655e2305150b08
152160 yuv444p14be bb07382a868b35875b771b37dd234605
153161 yuv444p14le f8f6e6124bae7e95d0061b95bd64be66
154162 yuv444p16be 25b9244db531ccab7095a44b3115032d
tests/ref/fate/filter-pixfmts-field+8−0
@@ -34,8 +34,12 @@ gbrapf32le 401239fe76ef69d945f1d2c8efd116e9 · 33 unmodified lines
3434 gbrp 838025a3062f7f31e99196ce66961ad7
3535 gbrp10be f63c2555ea19fc78b00fd5b3e2b48e8c
3636 gbrp10le be64c374ab318235d912372e99a0516a
37+gbrp10msbbe e7a069412732d633b104b6c2d93469f9
38+gbrp10msble 36f3476db6bb05fd8cdce9ef84a2f58c
3739 gbrp12be ef164a1c062dc3572c61b9ef10897ca1
3840 gbrp12le 0527fdb6f75b1cb0d380809eb7a7589a
41+gbrp12msbbe 1e92a3cbeec6bd487a7d7577baf36756
42+gbrp12msble 38762c94d7e55c6010e93794f14ff332
3943 gbrp14be 6aff3ad388e2ed97d59b71a75029746d
4044 gbrp14le ed9ccbc7a4f3e269a2ec37d210359fd8
4145 gbrp16be 020eff1626415ea726c55b23162ce59a
@@ -153,8 +157,12 @@ yuv440p12le a529385f94a4d46fa339746693975d99 · 111 unmodified lines
153157 yuv444p 389eda40a7a3bd5d3b280b448e99f27e
154158 yuv444p10be 80b1cf057149a1f7dfae1da061e00523
155159 yuv444p10le cdd8ba90dfc7689e0771dc36a70db433
160+yuv444p10msbbe b0a75c6c59d96707a41ce4990314f36f
161+yuv444p10msble e306771f12f7885907689e63ba29a5c2
156162 yuv444p12be caaa959ed39a74dcec478f23690f5ffc
157163 yuv444p12le a7965a51a2e45723f650d1313f2aa356
164+yuv444p12msbbe 31ec6c32401562a8c9aaf168a6b37e1b
165+yuv444p12msble d947a1e44481ea0ce7be8b30ae653497
158166 yuv444p14be 18a46dde1fafcc7bbc6ebb3fd6681e7c
159167 yuv444p14le 90058811cf9c35a4ddfab367bea40c51
160168 yuv444p16be 1ff6ee64bcc33be585712e86359430d5
tests/ref/fate/filter-pixfmts-fieldorder+8−0
@@ -34,8 +34,12 @@ gbrapf32le f1c3079716d6ce7b629511ec1fcb98ad · 33 unmodified lines
3434 gbrp 506dea2fe492e985a396d1b11ccd8db3
3535 gbrp10be 55bbfe2d472780dcbadf3027778caa0e
3636 gbrp10le 13a39077ab1b2c3b49afd3e250b84a77
37+gbrp10msbbe 04a34ae25a510f4fcbd4aac80d332928
38+gbrp10msble fe465d4e28c90f7bcf9670dbeec1be1f
3739 gbrp12be f1b59334c687a39ba076fe47e6ee9515
3840 gbrp12le e64ab4d290eb10476db165054720173f
41+gbrp12msbbe c68b09fd30cb609750c4f269bbd14433
42+gbrp12msble 176a3655df3fd7cd7b4b89d579eaaee4
3943 gbrp14be b3806ade527ef7452c29106054946cd1
4044 gbrp14le b01b1a05d8de36f51a133d25102fe1f3
4145 gbrp16be f82e4bda468275f51becf70f3880be52
@@ -125,8 +129,12 @@ yuv422p9le c9faffe2fcb2e30be5d792412b3550b0 · 83 unmodified lines
125129 yuv444p 1483374f69c4bbaf9252ce255fc84feb
126130 yuv444p10be 2e5caee508692869141bd9649cc17f64
127131 yuv444p10le c0ceb41ad4c2ddc454f3fdb9cda2d8ad
132+yuv444p10msbbe 9517db7eca363b4cfe19010026e9aca4
133+yuv444p10msble b9fabe62f70e204da80ad182a6571b08
128134 yuv444p12be 8729565c21a9d8f1e7a87d81d0aa4a54
129135 yuv444p12le d4786cb4b1e79b2af1493e01d685282f
136+yuv444p12msbbe ab6d3fe75b4bebb61ef8b3ee98e4c928
137+yuv444p12msble 6db968972c964ad59e18572f1f983fdf
130138 yuv444p14be 33f1cf5233f57582618390ea337e83c6
131139 yuv444p14le 7d9fc358232488f671d663d27875f3c1
132140 yuv444p16be 779ea70979e735d3074fef0466792681
tests/ref/fate/filter-pixfmts-hflip+8−0
@@ -34,8 +34,12 @@ gbrapf32le 7312701852fbceaeb53efce523bc75c0 · 33 unmodified lines
3434 gbrp 0ecfeca171ba3a1a2ff4e92f572b71cf
3535 gbrp10be 774398c2f81757a536c094f16cfc541a
3636 gbrp10le e9a6434d691be541f789f850963da181
37+gbrp10msbbe e47a8437b5e8f706a0c3cb466ff6c514
38+gbrp10msble 0238594ce7f88b52fc8e44af623269e9
3739 gbrp12be 13d819d869f8e84aadca57e21883030e
3840 gbrp12le 22046339442c155fbb9b02ceff5e1c15
41+gbrp12msbbe 275a9cb088db06bb0446891d5bc1bc80
42+gbrp12msble cd0b0fe250e9555e42ac00b94eda58c2
3943 gbrp14be 7e1d2f9d9bb7cc90d88540f36998acd6
4044 gbrp14le 91bb636f4e1f5d50312b136c185542e9
4145 gbrp16be 46cf9473646a4b9dbcb05661ade658ec
@@ -147,8 +151,12 @@ yuv440p12le 7aecbe06b7cd8c84d98af8cf3bb971e8 · 105 unmodified lines
147151 yuv444p 0bd726440d90438ad357172fe1fac9b3
148152 yuv444p10be c2e452fbe45f23c70525919154f4b81f
149153 yuv444p10le 90140d5f930fb2ff750fe18df990d0f3
154+yuv444p10msbbe f0f0e5ce513a34ff231b1a1607206ea5
155+yuv444p10msble ceebcb2a4299b26b3518d2bdee2028ed
150156 yuv444p12be f858a8f0c55192ab69d356b97e0449bb
151157 yuv444p12le 22f099dbae63e6564f06e1cc32683a4e
158+yuv444p12msbbe 0f0acd39267d784e8a020886ac152369
159+yuv444p12msble d9edd2a6b6ed3f5b8aba985eee895d09
152160 yuv444p14be be4727c283bb3af3327f7b9dc57e51b8
153161 yuv444p14le 289f4d6a3d60ba654e8280683825ee9a
154162 yuv444p16be acb6b001d445a628d1d0a2dfbeed078c
tests/ref/fate/filter-pixfmts-il+8−0
@@ -34,8 +34,12 @@ gbrapf32le a606da084e300d0e827a4d24ce18567b · 33 unmodified lines
3434 gbrp dc06edb62e70024a216c8e303b79b328
3535 gbrp10be 321e7f061d8b9b5801221b6cf3c99666
3636 gbrp10le 799ed3afca01076439a0b6785b3dc4bb
37+gbrp10msbbe 0855479c918946f8755f25593612a74d
38+gbrp10msble 92db82d585eb495d4cabc033ffdd2a59
3739 gbrp12be 7ca179ad8f7b018de48a48bdb0776965
3840 gbrp12le c69843651e7e60e85c5e8a2fe4ecb290
41+gbrp12msbbe f499ec2f96f5d0d271371d4d2a94e3d8
42+gbrp12msble 7e9f8e72a773c9098e6019f8bcd22e36
3943 gbrp14be 5dc5e8131c25125347758e03d15b69e6
4044 gbrp14le bf3d5dec9b58cecd4ca1c5d3a4d57c31
4145 gbrp16be c8c95027703c680ed8f8f91c725db40a
@@ -152,8 +156,12 @@ yuv440p12le 6f47a23742f5763f3240982e1892e4dc · 110 unmodified lines
152156 yuv444p bbd70cde098f24097c4cdcd3ad22d9ce
153157 yuv444p10be b0de51e143a5bd490c424dc836becfa8
154158 yuv444p10le 4435dca19253b88dc7cd553928467e79
159+yuv444p10msbbe a59dd07cb8a2785d2c92778ed12b1467
160+yuv444p10msble 4212954799563435093093dcc68c97e4
155161 yuv444p12be 23f0ce3a810138df7849d4f6b5e50211
156162 yuv444p12le 0394aeef391e2cc09722ee8e7244f1c3
163+yuv444p12msbbe a8aa386b03e70ef376700a0e564be018
164+yuv444p12msble c5cbe5f8ff3cc7b354d1c47e51716de9
157165 yuv444p14be c712cf9dbf8571fbd31fa747e58993ec
158166 yuv444p14le 3a0e361e5998f8590dd8ca8ce896cea1
159167 yuv444p16be 929c50756bfe8cab7c416f56095fbb82
tests/ref/fate/filter-pixfmts-null+8−0
@@ -34,8 +34,12 @@ gbrapf32le 1ac76b9418062a95e5c62da3ba1c8c5a · 33 unmodified lines
3434 gbrp 5fbc319e30110d19d539f5b274eddb6d
3535 gbrp10be 703a17591a2a5c236675c5101c349bcc
3636 gbrp10le ee014153f55c011918df5b2394815780
37+gbrp10msbbe 2fcce5d0a33eb93bc1065a46b77696ee
38+gbrp10msble eb68e8a797a8aa8d69d3b896013e1290
3739 gbrp12be 527d337eb5813ebba7cf969ee660d423
3840 gbrp12le fd192920b171a0cf88d61e8310e95d81
41+gbrp12msbbe 73ea99e86472f0c047dce85fa76dd428
42+gbrp12msble 102df5b20bb722c391dd1ab6ec9953a3
3943 gbrp14be 46d502db6dc5eb7e9da3c60016b2df91
4044 gbrp14le 1607f5c8f13360b53b8186f523996b1b
4145 gbrp16be 7b6764a504c853b09f5c7d0b2223c5a4
@@ -153,8 +157,12 @@ yuv440p12le 2fff7746ae7c07d407075c0e372baf46 · 111 unmodified lines
153157 yuv444p 8f90fb3a757878c545a8bfe5d19a9bab
154158 yuv444p10be 6683d5cb82c708d5f3a2a89d0311f7a4
155159 yuv444p10le 6d736fa464ff2de2b07e0a56af8444b7
160+yuv444p10msbbe 9542f394ed36ff084bbcc09883d24cac
161+yuv444p10msble bf8b831e6d6bf8bc5c2e9609fa98b01e
156162 yuv444p12be 04320ad158450ee158f84a27c6325702
157163 yuv444p12le 08a81b2ea9c7c8b447e40ef8f4a46a4a
164+yuv444p12msbbe 5bd7623158e0bc62edb900821ce2df72
165+yuv444p12msble 425731663df58c875319a0b02f4ab4cc
158166 yuv444p14be ea3057d469d0c49c24e844256ef7871e
159167 yuv444p14le 940f5908ccf06e01411f0a7bddb45c6a
160168 yuv444p16be aee24ab2e9a4656f889399f1b0d98639
tests/ref/fate/filter-pixfmts-pad+4−0
@@ -14,7 +14,9 @@ gbrap14le 4c8b549942e66f442de0f5c1d21e9b8e · 13 unmodified lines
1414 gbrap16le d0f6fc33cb75588327aec1b5ad6ab4f0
1515 gbrp 3c94d39256db2409015df913fd330a90
1616 gbrp10le 5b356737cd8a396f39bbdadb7cb35e06
17+gbrp10msble 1eaff99273dcf52c7329b50dc3ef2d5a
1718 gbrp12le 91fdad0d1edf7bfa2805e2041e8da3cd
19+gbrp12msble c91d235f99d54bdd819e1e9218287ae3
1820 gbrp14le deb2c3af6b48faa52f6a1f6590a0cdf7
1921 gbrp16le a6156d1a37e05ee621b2a343fb158bd6
2022 gbrp9le 9e827f438e081d334a6cae7e282698b0
@@ -68,7 +70,9 @@ yuv440p10le 55787c7260462e50e96f316856adf9dc · 47 unmodified lines
6870 yuv440p12le 869d3d9e0e12df253b79949d2b2c0561
6971 yuv444p 6bfd89286dc36f2789b77d747ed8fa22
7072 yuv444p10le ac3142be3d7b0ec4c1e4450cb8c376ef
73+yuv444p10msble 438ae33282dca61f5bab0386271519fb
7174 yuv444p12le 4c7f29501e46f4d041222536697941d0
75+yuv444p12msble 0de8b60a01aeee8df55ec3f0f4285219
7276 yuv444p14le 13631aa3ecc332aee3b3360db45011c9
7377 yuv444p16le 613ec343b593dda43af15f015c193d0a
7478 yuv444p9le 96fa344943468b5cd36be92b1c05f17f
tests/ref/fate/filter-pixfmts-scale+8−0
@@ -34,8 +34,12 @@ gbrapf32le 9e32cc5fc7b487ea94b9f440d645040d · 33 unmodified lines
3434 gbrp dc3387f925f972c61aae7eb23cdc19f0
3535 gbrp10be a318ea42e53a7b80a55aa7c19c9a0ab5
3636 gbrp10le 994e8fc6a1e5b230f4c55893fd7618d6
37+gbrp10msbbe 045c5f8af6dafc1ceb06cfe3181c3ee9
38+gbrp10msble 8c74e50b03a0cb475145e83d0d15110b
3739 gbrp12be bfbd419dd18c0a5677d4bce55ab24e2e
3840 gbrp12le 95af1f8495b2a7a7ad67802e3e8bca01
41+gbrp12msbbe 69c01758aa175918b27e3de5b488b2ee
42+gbrp12msble 907712bd8af9e3e39b1881b26273b7d1
3943 gbrp14be 9d8113c9a5182c02dbe4576509f59a96
4044 gbrp14le 952f39881e500ed684c8b216185f4b80
4145 gbrp16be 5241eee3465096efa111b86b30c3aaaa
@@ -153,8 +157,12 @@ yuv440p12le bb9ffc3033fe32b9ce3233524ed5ab70 · 111 unmodified lines
153157 yuv444p 098f01e6790e1e6beff8d604120c2664
154158 yuv444p10be 024ee33cac7b5b7b225d7acb9dc59da3
155159 yuv444p10le a085fff2fb81d76753da689aee365b55
160+yuv444p10msbbe 39e20d08b28c3c3a63978e427d7567fe
161+yuv444p10msble e49af28d1827e757d725433c4c8bf571
156162 yuv444p12be a181627b93bd9c4c384b83e17d373a7c
157163 yuv444p12le 97e47326ff0efe89c295fd9ddb0ca854
164+yuv444p12msbbe 0fa425c7d9f5a7f7fe4933f4fe89dd6b
165+yuv444p12msble 9439ab6089e6ad3102b878124f1de98e
158166 yuv444p14be 3eac31f0d4969210640de74914faf86d
159167 yuv444p14le 2c362c4cf167b7e2d83f4eb0dfaeb2b9
160168 yuv444p16be a60c674411d64cc4b9fbf17039afffb3
tests/ref/fate/filter-pixfmts-transpose+8−0
@@ -34,8 +34,12 @@ gbrapf32le d6589fe7935cbb69d8253f8b8c4ffba8 · 33 unmodified lines
3434 gbrp 7b4b6a2f1cdc51455b25515c3ecea944
3535 gbrp10be d7401725699b2ddf954caa16a0878a1e
3636 gbrp10le 6036711969eae1979be6358f688bd9c8
37+gbrp10msbbe 7190df78d1e5e6566e2a74c079b01166
38+gbrp10msble 449752ca51481baf440e425b1f0d3b63
3739 gbrp12be ec7d6e69fc579619b53d57a76c20480d
3840 gbrp12le bf7478185274486c3f7dd4db1da8f7d0
41+gbrp12msbbe 592e689e057d8cdc3c628fd4242dc8e7
42+gbrp12msble 51b3ebaed490b7fafdcc7801854d05e5
3943 gbrp14be 9b66f22e4315aaa878a430ae3f44ab57
4044 gbrp14le 16f30349b42dca007b37b8522d3018df
4145 gbrp16be 0d003b88d4f446ae9ba12cab1cbb359a
@@ -120,8 +124,12 @@ yuv420p9le c735c3c8424c70d822ab4a1fe1f504e2 · 78 unmodified lines
120124 yuv444p eb755977ca464baac5f03771858080ae
121125 yuv444p10be 866b59a23dff3dc1cb6bf7bd7da26da4
122126 yuv444p10le 417d62f15abf4777c4ec5e0d00796a9e
127+yuv444p10msbbe 4a6927682c82ccfeca7110b844b71dbd
128+yuv444p10msble c408c6cfbd6426e048a2cd07376667d8
123129 yuv444p12be c1da110f0ee898fbcd4b45afb5aed58b
124130 yuv444p12le dc18bddd7b6bb9fdb2e0c7e7476375fa
131+yuv444p12msbbe 5344c6d57563cec818fd5219c6867393
132+yuv444p12msble b63edb22546b649550ae5cfd99a0acaf
125133 yuv444p14be 2f181fa3403e7911b233d3d976abea73
126134 yuv444p14le ac718343878786a25b9a50924f9aabca
127135 yuv444p16be 128214efef6fffe3293db513ae700d4a
tests/ref/fate/filter-pixfmts-vflip+8−0
@@ -34,8 +34,12 @@ gbrapf32le 463ffd7ce416d476816e080f971c42ba · 33 unmodified lines
3434 gbrp 413b0f6ea51588d4be5f0c76d43d8796
3535 gbrp10be d02bd50db83213667808f5bacefe667c
3636 gbrp10le 2d4a5ebc773ffc3d857a6ef24afbe10e
37+gbrp10msbbe 362763bdeea3eafbbc82c3ded025f7fd
38+gbrp10msble 46917c0a92e63c39f1d6b17622c0fcc3
3739 gbrp12be a668b7dba68817736501386ffe9f3adc
3840 gbrp12le 299695016c22a4947d94b16f0975536b
41+gbrp12msbbe 458871692a07fd2df3b6213fd2c7dced
42+gbrp12msble b1dae2c7003d628deb1cc988090a0686
3943 gbrp14be eeebacfb19c970dd76ad044ef85e8fe5
4044 gbrp14le 6e93b87047e433995111eb5397751c3f
4145 gbrp16be 3fef87fe67bf1fd0e2f5056dc0db2ef4
@@ -153,8 +157,12 @@ yuv440p12le 2a3adb4692391171c506cc0899d27511 · 111 unmodified lines
153157 yuv444p 7c8c5d138d732f4ca7d864b9ffef3047
154158 yuv444p10be faa81f737d465afcacef351818d34772
155159 yuv444p10le bfc5036e4ab0ab6da1416df4a462db74
160+yuv444p10msbbe 730ba8d36068b509b32df698c1344aa0
161+yuv444p10msble 89d73ff2b95deea904fc1de5884869d7
156162 yuv444p12be 6706d8807b9dd14d331a7e9572fd9c5d
157163 yuv444p12le 9bba33b2c0dd09f653a4c22d201142c5
164+yuv444p12msbbe 01f581dcf9b97f67cf8ea177e27eaf48
165+yuv444p12msble 5dafe4e293007c2721ad107edc1dbf96
158166 yuv444p14be cf181f44988d3ddf4cc32b87ca473251
159167 yuv444p14le 086322cb9a98eb91825c9bb2ad00eac7
160168 yuv444p16be ee0721d7fda4a67bc6270a78fa361140
tests/ref/fate/sws-floatimg-cmp+16−0
@@ -22,6 +22,14 @@ gbrpf32le -> yuv444p14le -> gbrpf32le · 21 unmodified lines
2222 avg diff: 0.000127
2323 min diff: 0.000000
2424 max diff: 0.000524
25+gbrpf32le -> yuv444p10msble -> gbrpf32le
26+avg diff: 0.000467
27+min diff: 0.000000
28+max diff: 0.001912
29+gbrpf32le -> yuv444p12msble -> gbrpf32le
30+avg diff: 0.000166
31+min diff: 0.000000
32+max diff: 0.000802
2533 gbrpf32le -> rgb24 -> gbrpf32le
2634 avg diff: 0.001011
2735 min diff: 0.000000
@@ -98,6 +106,14 @@ gbrpf32le -> gbrap10le -> gbrpf32le · 70 unmodified lines
98106 avg diff: 0.000350
99107 min diff: 0.000000
100108 max diff: 0.001475
109+gbrpf32le -> gbrp10msble -> gbrpf32le
110+avg diff: 0.000350
111+min diff: 0.000000
112+max diff: 0.001475
113+gbrpf32le -> gbrp12msble -> gbrpf32le
114+avg diff: 0.000260
115+min diff: 0.000000
116+max diff: 0.001135
101117 gbrpf32le -> gbrp12le -> gbrpf32le
102118 avg diff: 0.000260
103119 min diff: 0.000000

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