[PR] Fixing EXR and Alpha (PR #23928)
michaelni via ffmpeg-devel <[email protected]> Mon, 27 Jul 2026 17:20:44 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178517346698.51.10233398291599127446@29965ddac10e> |
PR #23928 opened by michaelni URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23928 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23928.patch Fixing EXR and some alpha improvments Co-Authored-by: Claude (Opus 5) >From 730c957fa856fca891dd7e5acc0d86df422a87a5 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 1/8] avfilter/vf_premultiply: support half float formats gbrapf16le is what the EXR decoder outputs, and EXR is premultiplied, so it is the format premultiply_dynamic is the most likely to be asked to convert. Not supporting it meant a scale filter had to be inserted to convert the pixel format first, which loses precision and, since swscale can read but not write half float, can leave the format negotiation with no solution at all. Co-Authored-by: Opus 5 --- libavfilter/vf_premultiply.c | 143 ++++++++++++++++++++++++++++++++++- 1 file changed, 141 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_premultiply.c b/libavfilter/vf_premultiply.c index 1cea3cab7f..9fca2d842a 100644 --- a/libavfilter/vf_premultiply.c +++ b/libavfilter/vf_premultiply.c @@ -20,9 +20,12 @@ #include "config_components.h" +#include "libavutil/float2half.h" +#include "libavutil/half2float.h" #include "libavutil/imgutils.h" #include "libavutil/pixdesc.h" #include "libavutil/opt.h" +#include "libavutil/thread.h" #include "avfilter.h" #include "filters.h" #include "formats.h" @@ -33,6 +36,25 @@ typedef struct ThreadData { AVFrame *m, *a, *d; } ThreadData; +static Half2FloatTables h2f_tables; +static Float2HalfTables f2h_tables; + +static av_cold void init_half_tables(void) +{ + ff_init_half2float_tables(&h2f_tables); + ff_init_float2half_tables(&f2h_tables); +} + +static av_always_inline float h2f(uint16_t h) +{ + return av_int2float(half2float(h, &h2f_tables)); +} + +static av_always_inline uint16_t f2h(float f) +{ + return float2half(av_float2int(f), &f2h_tables); +} + typedef struct PreMultiplyContext { const AVClass *class; int width[AV_VIDEO_MAX_PLANES], height[AV_VIDEO_MAX_PLANES]; @@ -78,7 +100,7 @@ static int query_formats(const AVFilterContext *ctx, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV444P16, AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, - AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRPF32, + AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRPF16, AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16, AV_PIX_FMT_NONE }; @@ -87,7 +109,7 @@ static int query_formats(const AVFilterContext *ctx, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12, AV_PIX_FMT_YUVA444P16, AV_PIX_FMT_GBRAP, - AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16, AV_PIX_FMT_GBRAPF32, + AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16, AV_PIX_FMT_GBRAPF16, AV_PIX_FMT_GBRAPF32, AV_PIX_FMT_NONE }; @@ -294,6 +316,54 @@ static void premultiplyf32offset(const uint8_t *mmsrc, const uint8_t *aasrc, } } +static void premultiplyf16(const uint8_t *mmsrc, const uint8_t *aasrc, + uint8_t *ddst, + ptrdiff_t mlinesize, ptrdiff_t alinesize, + ptrdiff_t dlinesize, + int w, int h, + int half, int shift, int offset) +{ + const uint16_t *msrc = (const uint16_t *)mmsrc; + const uint16_t *asrc = (const uint16_t *)aasrc; + uint16_t *dst = (uint16_t *)ddst; + int x, y; + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + dst[x] = f2h(h2f(msrc[x]) * h2f(asrc[x])); + } + + dst += dlinesize / 2; + msrc += mlinesize / 2; + asrc += alinesize / 2; + } +} + +static void premultiplyf16offset(const uint8_t *mmsrc, const uint8_t *aasrc, + uint8_t *ddst, + ptrdiff_t mlinesize, ptrdiff_t alinesize, + ptrdiff_t dlinesize, + int w, int h, + int half, int shift, int offset) +{ + const uint16_t *msrc = (const uint16_t *)mmsrc; + const uint16_t *asrc = (const uint16_t *)aasrc; + uint16_t *dst = (uint16_t *)ddst; + int x, y; + + float offsetf = offset / 65535.0f; + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + dst[x] = f2h(((h2f(msrc[x]) - offsetf) * h2f(asrc[x])) + offsetf); + } + + dst += dlinesize / 2; + msrc += mlinesize / 2; + asrc += alinesize / 2; + } +} + static void unpremultiply8(const uint8_t *msrc, const uint8_t *asrc, uint8_t *dst, ptrdiff_t mlinesize, ptrdiff_t alinesize, @@ -497,6 +567,64 @@ static void unpremultiplyf32offset(const uint8_t *mmsrc, const uint8_t *aasrc, } } +static void unpremultiplyf16(const uint8_t *mmsrc, const uint8_t *aasrc, + uint8_t *ddst, + ptrdiff_t mlinesize, ptrdiff_t alinesize, + ptrdiff_t dlinesize, + int w, int h, + int half, int max, int offset) +{ + const uint16_t *msrc = (const uint16_t *)mmsrc; + const uint16_t *asrc = (const uint16_t *)aasrc; + uint16_t *dst = (uint16_t *)ddst; + int x, y; + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + float a = h2f(asrc[x]); + + if (a > 0.0f) + dst[x] = f2h(h2f(msrc[x]) / a); + else + dst[x] = msrc[x]; + } + + dst += dlinesize / 2; + msrc += mlinesize / 2; + asrc += alinesize / 2; + } +} + +static void unpremultiplyf16offset(const uint8_t *mmsrc, const uint8_t *aasrc, + uint8_t *ddst, + ptrdiff_t mlinesize, ptrdiff_t alinesize, + ptrdiff_t dlinesize, + int w, int h, + int half, int max, int offset) +{ + const uint16_t *msrc = (const uint16_t *)mmsrc; + const uint16_t *asrc = (const uint16_t *)aasrc; + uint16_t *dst = (uint16_t *)ddst; + int x, y; + + float offsetf = offset / 65535.0f; + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + float a = h2f(asrc[x]); + + if (a > 0.0f) + dst[x] = f2h((h2f(msrc[x]) - offsetf) / a + offsetf); + else + dst[x] = msrc[x]; + } + + dst += dlinesize / 2; + msrc += mlinesize / 2; + asrc += alinesize / 2; + } +} + static int premultiply_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) { PreMultiplyContext *s = ctx->priv; @@ -592,6 +720,10 @@ static int filter_frame(AVFilterContext *ctx, case AV_PIX_FMT_GBRAP16: s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? unpremultiply16offset : unpremultiply16; break; + case AV_PIX_FMT_GBRPF16: + case AV_PIX_FMT_GBRAPF16: + s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? unpremultiplyf16offset : unpremultiplyf16; + break; case AV_PIX_FMT_GBRPF32: case AV_PIX_FMT_GBRAPF32: s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? unpremultiplyf32offset : unpremultiplyf32; @@ -644,6 +776,10 @@ static int filter_frame(AVFilterContext *ctx, case AV_PIX_FMT_GBRAP16: s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? premultiply16offset : premultiply16; break; + case AV_PIX_FMT_GBRPF16: + case AV_PIX_FMT_GBRAPF16: + s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? premultiplyf16offset: premultiplyf16; + break; case AV_PIX_FMT_GBRPF32: case AV_PIX_FMT_GBRAPF32: s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? premultiplyf32offset: premultiplyf32; @@ -809,10 +945,13 @@ static int activate(AVFilterContext *ctx) static av_cold int init(AVFilterContext *ctx) { + static AVOnce half_tables_once = AV_ONCE_INIT; PreMultiplyContext *s = ctx->priv; AVFilterPad pad = { 0 }; int ret; + ff_thread_once(&half_tables_once, init_half_tables); + if (!strcmp(ctx->filter->name, "premultiply_dynamic")) { s->dynamic = s->inplace = 1; return 0; -- 2.52.0 >From 4550c33ac87248fae249d60b2f3a2e0ec9ab7f45 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 2/8] avfilter/avfiltergraph: redo a round after inserting a conversion filter Inserting an auto conversion filter replaces the link that was being worked on by two new links, and only the mergers that triggered the insertion are settled on them. The other properties of those links are left unmerged, and since the original link no longer exists it is not revisited in the current round. If nothing else in the graph is delayed, query_formats() returns success with those links still unmerged, and the filters on both ends end up disagreeing on the format. Do another round whenever a conversion filter was inserted, not only when there was more than one of them. Co-Authored-by: Opus 5 --- libavfilter/avfiltergraph.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index f1abcc80b4..06fcf8107e 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -701,10 +701,9 @@ retry: } } - /* if there is more than one auto filter, we may need another round - * to fully settle formats due to possible cross-incompatibilities - * between the auto filters themselves */ - if (num_conv > 1) + /* the new links are only settled for the mergers that triggered + * the insertion, and the link we were on is gone */ + if (num_conv) goto retry; } } -- 2.52.0 >From 9d27358f69e444c1c6b00ce1cffc4119a28d3b0c Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 3/8] avfilter/vf_scale: accept all alpha modes swscale does not change the alpha mode, it only carries it over, and scaling premultiplied alpha is valid, so there is no reason to reject it. Since f3431169daab3f1ca26638de6d4f6fca0f090c15 the default of straight alpha applied here instead, which made the scale filter unusable in a premultiplied chain. That is fatal because scale is the conversion filter for pixel formats: converting the alpha mode of a frame whose pixel format is not supported by premultiply_dynamic requires inserting a scale filter, which in turn required converting the alpha mode, and the negotiation kept inserting filters forever. This happened for example with ffmpeg -i premultiplied.exr out.jpg where the gbrapf16le frames of the EXR decoder are not supported by premultiply_dynamic. Co-Authored-by: Opus 5 --- libavfilter/vf_scale.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index f2d3021080..7511e8c9ea 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -526,7 +526,8 @@ static int query_formats(const AVFilterContext *ctx, return ret; } - return 0; + /* swscale only carries the alpha mode over */ + return ff_set_common_all_alpha_modes2(ctx, cfg_in, cfg_out); } static int scale_eval_dimensions(AVFilterContext *ctx) -- 2.52.0 >From 867146f257d1340553eb43011f49e627a34c51ce Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 4/8] avfilter/formats: allow premultiplied alpha for metadata-only filters AVFILTER_FLAG_METADATA_ONLY guarantees that the data of the frames a filter outputs is exactly the data it received, so such a filter does no color arithmetic at all and premultiplied alpha is safe for it. Keeping the straight alpha default of f3431169daab3f1ca26638de6d4f6fca0f090c15 for them requires a conversion for filters that do not even look at the frame data, such as format or null. Co-Authored-by: Opus 5 --- libavfilter/formats.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libavfilter/formats.c b/libavfilter/formats.c index 2076beda0d..13bf02268f 100644 --- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -1228,7 +1228,10 @@ int ff_default_query_formats(AVFilterContext *ctx) ret = ff_set_common_all_color_ranges(ctx); if (ret < 0) return ret; - ret = ff_set_common_alpha_mode_straight(ctx); + /* metadata-only filters do no color arithmetic at all */ + ret = ctx->filter->flags & AVFILTER_FLAG_METADATA_ONLY ? + ff_set_common_all_alpha_modes(ctx) : + ff_set_common_alpha_mode_straight(ctx); if (ret < 0) return ret; } -- 2.52.0 >From 149af79adc9624eba7e65d9be91ee4a091ec0da2 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 5/8] avfilter/buffersink: accept all alpha modes unless told otherwise The sink does not process the frames, it hands them over to the caller as they are, alpha mode included, and the caller can look at the alpha mode of the frame it gets. Requesting straight alpha by default forces a conversion that nobody asked for. Co-Authored-by: Opus 5 --- libavfilter/buffersink.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index e829007557..ef94981109 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -318,6 +318,11 @@ static int vsink_query_formats(const AVFilterContext *ctx, ret = ff_set_common_alpha_modes_from_list2(ctx, cfg_in, cfg_out, buf->alphamodes); if (ret < 0) return ret; + } else { + /* the frames are handed over as they are, alpha mode included */ + ret = ff_set_common_all_alpha_modes2(ctx, cfg_in, cfg_out); + if (ret < 0) + return ret; } return 0; -- 2.52.0 >From d6b559d2b4494e053788016c9d2a1975780f7d45 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 6/8] avfilter/buffersrc: accept all alpha modes if there is no alpha Without an alpha component the alpha mode is meaningless, so pinning it to the default instead of leaving it free requires a pointless conversion when the rest of the graph settles on premultiplied alpha, for example when encoding to EXR. Co-Authored-by: Opus 5 --- libavfilter/buffersrc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 16efa6e6c8..a798c3c8d1 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -524,6 +524,10 @@ static int query_formats(const AVFilterContext *ctx, } if ((ret = ff_set_common_alpha_modes2(ctx, cfg_in, cfg_out, alpha_modes)) < 0) return ret; + } else { + /* without alpha the alpha mode is meaningless, leave it free */ + if ((ret = ff_set_common_all_alpha_modes2(ctx, cfg_in, cfg_out)) < 0) + return ret; } break; } -- 2.52.0 >From 3645a20bf0079641b182c68c14712b63332691b9 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 7/8] fate/filter-video: test automatic conversion of premultiplied alpha Before the previous commits this hung, endlessly inserting scale and premultiply_dynamic filters into each other. Co-Authored-by: Opus 5 --- tests/fate/filter-video.mak | 5 +++++ tests/ref/fate/filter-alpha-mode-autoconv | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 tests/ref/fate/filter-alpha-mode-autoconv diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak index e3a3be2753..80ad2d943b 100644 --- a/tests/fate/filter-video.mak +++ b/tests/fate/filter-video.mak @@ -96,6 +96,11 @@ fate-filter-lavd-testsrc: CMD = framecrc -f lavfi -i testsrc=r=7:n=2:d=10 FATE_FILTER-$(call FILTERFRAMECRC, TESTSRC2) += $(addprefix fate-filter-testsrc2-, yuv420p yuv444p rgb24 rgba) fate-filter-testsrc2-%: CMD = framecrc -lavfi testsrc2=r=7:d=10 -pix_fmt $(word 4, $(subst -, ,$(@))) +# alpha mode and pixel format both need converting, rgba not being supported by +# premultiply_dynamic +FATE_FILTER-$(call FILTERFRAMECRC, TESTSRC2 FORMAT SETPARAMS PREMULTIPLY_DYNAMIC SCALE) += fate-filter-alpha-mode-autoconv +fate-filter-alpha-mode-autoconv: CMD = framecrc -auto_conversion_filters -lavfi testsrc2=s=32x32:d=1:r=1,format=rgba,setparams=alpha_mode=premultiplied,format=alpha_modes=straight + FATE_FILTER-$(call FILTERFRAMECRC, ALLRGB) += fate-filter-allrgb fate-filter-allrgb: CMD = framecrc -lavfi allrgb=rate=5:duration=1 -pix_fmt rgb24 diff --git a/tests/ref/fate/filter-alpha-mode-autoconv b/tests/ref/fate/filter-alpha-mode-autoconv new file mode 100644 index 0000000000..e0f3fde60b --- /dev/null +++ b/tests/ref/fate/filter-alpha-mode-autoconv @@ -0,0 +1,6 @@ +#tb 0: 1/1 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 32x32 +#sar 0: 1/1 +0, 0, 0, 1, 4096, 0xa1138274 -- 2.52.0 >From 4e2de160e12f1a3aa9f7059ba75d37a58344dab8 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer <[email protected]> Date: Mon, 27 Jul 2026 18:55:00 +0200 Subject: [PATCH 8/8] Revert "fate: disable tests that depend on premultipled conversion" Automatic conversion of premultiplied alpha works again, the tests pass unchanged. This reverts commit 336b175c9f5d1194f4377f34aacfe4a85ca628b6. Co-Authored-by: Opus 5 --- tests/fate/image.mak | 58 +++++++++++++++++++-------------------- tests/fate/lavf-image.mak | 24 ++++++++-------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/tests/fate/image.mak b/tests/fate/image.mak index 4b1afa10cc..e9fe059ead 100644 --- a/tests/fate/image.mak +++ b/tests/fate/image.mak @@ -103,16 +103,16 @@ fate-dpxparser: CMD = framecrc -f image2pipe -i $(TARGET_SAMPLES)/dpx/lena_4x_co FATE_IMAGE_PROBE-$(call DEMDEC, IMAGE2, DPX) += fate-dpx-probe fate-dpx-probe: CMD = probeframes -show_entries frame=color_transfer,color_range,color_space,color_primaries,sample_aspect_ratio $(TARGET_SAMPLES)/dpx/cyan.dpx -#FATE_EXR += fate-exr-slice-raw +FATE_EXR += fate-exr-slice-raw fate-exr-slice-raw: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_slice_raw.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-slice-rle +FATE_EXR += fate-exr-slice-rle fate-exr-slice-rle: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_slice_rle.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-slice-zip1 +FATE_EXR += fate-exr-slice-zip1 fate-exr-slice-zip1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_slice_zip1.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-slice-zip16 +FATE_EXR += fate-exr-slice-zip16 fate-exr-slice-zip16: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_slice_zip16.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-slice-pxr24 @@ -121,7 +121,7 @@ fate-exr-slice-pxr24: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_slice_pxr24.ex FATE_EXR += fate-exr-rgb-scanline-pxr24-float-12x8 fate-exr-rgb-scanline-pxr24-float-12x8: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_pxr24_float_12x8.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgba-multiscanline-half-b44 +FATE_EXR += fate-exr-rgba-multiscanline-half-b44 fate-exr-rgba-multiscanline-half-b44: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_multiscanline_half_b44.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-float-b44 @@ -142,88 +142,88 @@ fate-exr-rgb-tile-float-raw-150x130: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb FATE_EXR += fate-exr-rgb-tile-half-raw-12x8 fate-exr-rgb-tile-half-raw-12x8: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_half_raw_12x8.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44-13x9-l1 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44-13x9-l1 fate-exr-rgba-scanline-float-half-b44-13x9-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44_13x9.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44-13x9-l2 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44-13x9-l2 fate-exr-rgba-scanline-float-half-b44-13x9-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44_13x9.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44-12x8-l1 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44-12x8-l1 fate-exr-rgba-scanline-float-half-b44-12x8-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44_12x8.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44-12x8-l2 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44-12x8-l2 fate-exr-rgba-scanline-float-half-b44-12x8-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44_12x8.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-12x8-l1 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-12x8-l1 fate-exr-rgba-scanline-float-half-b44a-12x8-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44a_12x8.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-12x8-l2 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-12x8-l2 fate-exr-rgba-scanline-float-half-b44a-12x8-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44a_12x8.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-13x9-l1 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-13x9-l1 fate-exr-rgba-scanline-float-half-b44a-13x9-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44a_13x9.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-13x9-l2 +FATE_EXR += fate-exr-rgba-scanline-float-half-b44a-13x9-l2 fate-exr-rgba-scanline-float-half-b44a-13x9-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgba_scanline_float_half_b44a_13x9.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-pxr24-float-half-l1 fate-exr-rgb-tile-pxr24-float-half-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_pxr24_float_half.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-pxr24-float-half-l2 +FATE_EXR += fate-exr-rgb-tile-pxr24-float-half-l2 fate-exr-rgb-tile-pxr24-float-half-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_pxr24_float_half.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-pxr24-half-float-l1 fate-exr-rgb-tile-pxr24-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_pxr24_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-pxr24-half-float-l2 +FATE_EXR += fate-exr-rgb-tile-pxr24-half-float-l2 fate-exr-rgb-tile-pxr24-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_pxr24_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-half-float-b44-12x8-l1 fate-exr-rgb-tile-half-float-b44-12x8-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_half_float_b44_12x8.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-half-float-b44-12x8-l2 +FATE_EXR += fate-exr-rgb-tile-half-float-b44-12x8-l2 fate-exr-rgb-tile-half-float-b44-12x8-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_half_float_b44_12x8.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-zip-half-float-l1 fate-exr-rgb-tile-zip-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_zip_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-zip-half-float-l2 +FATE_EXR += fate-exr-rgb-tile-zip-half-float-l2 fate-exr-rgb-tile-zip-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_zip_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-zip1-half-float-l1 fate-exr-rgb-tile-zip1-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_zip1_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-zip1-half-float-l2 +FATE_EXR += fate-exr-rgb-tile-zip1-half-float-l2 fate-exr-rgb-tile-zip1-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_zip1_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-rle-half-float-l1 fate-exr-rgb-tile-rle-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_rle_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-rle-half-float-l2 +FATE_EXR += fate-exr-rgb-tile-rle-half-float-l2 fate-exr-rgb-tile-rle-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_rle_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-raw-half-float-l1 fate-exr-rgb-tile-raw-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_tile_raw_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-tile-raw-half-float-l2 +FATE_EXR += fate-exr-rgb-tile-raw-half-float-l2 fate-exr-rgb-tile-raw-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_tile_raw_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-b44-half-float-12x8-l1 fate-exr-rgb-scanline-b44-half-float-12x8-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_b44_half_float_12x8.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-b44-half-float-12x8-l2 +FATE_EXR += fate-exr-rgb-scanline-b44-half-float-12x8-l2 fate-exr-rgb-scanline-b44-half-float-12x8-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_b44_half_float_12x8.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-pxr24-half-float-l1 fate-exr-rgb-scanline-pxr24-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_pxr24_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-pxr24-half-float-l2 +FATE_EXR += fate-exr-rgb-scanline-pxr24-half-float-l2 fate-exr-rgb-scanline-pxr24-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_pxr24_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-pxr24-float-half-l1 fate-exr-rgb-scanline-pxr24-float-half-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_pxr24_float_half.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-pxr24-float-half-l2 +FATE_EXR += fate-exr-rgb-scanline-pxr24-float-half-l2 fate-exr-rgb-scanline-pxr24-float-half-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_pxr24_float_half.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-pxr24-half-uint32-13x9 @@ -232,25 +232,25 @@ fate-exr-rgb-scanline-pxr24-half-uint32-13x9: CMD = framecrc -layer "VRaySampler FATE_EXR += fate-exr-rgb-scanline-zip-half-float-l1 fate-exr-rgb-scanline-zip-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-zip-half-float-l2 +FATE_EXR += fate-exr-rgb-scanline-zip-half-float-l2 fate-exr-rgb-scanline-zip-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-zip1-half-float-l1 fate-exr-rgb-scanline-zip1-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip1_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-zip1-half-float-l2 +FATE_EXR += fate-exr-rgb-scanline-zip1-half-float-l2 fate-exr-rgb-scanline-zip1-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_zip1_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-rle-half-float-l1 fate-exr-rgb-scanline-rle-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_rle_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-rle-half-float-l2 +FATE_EXR += fate-exr-rgb-scanline-rle-half-float-l2 fate-exr-rgb-scanline-rle-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_rle_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-raw-half-float-l1 fate-exr-rgb-scanline-raw-half-float-l1: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_raw_half_float.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgb-scanline-raw-half-float-l2 +FATE_EXR += fate-exr-rgb-scanline-raw-half-float-l2 fate-exr-rgb-scanline-raw-half-float-l2: CMD = framecrc -layer "VRaySamplerInfo" -i $(TARGET_SAMPLES)/exr/rgb_scanline_raw_half_float.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-scanline-b44-uint32 @@ -290,10 +290,10 @@ fate-exr-y-scanline-zip-half-12x8: CMD = framecrc -i $(TARGET_SAMPLES)/exr/y_sca FATE_EXR += fate-exr-rgb-scanline-half-piz-dw-t08 fate-exr-rgb-scanline-half-piz-dw-t08: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgb_scanline_half_piz_dw_t08.exr -vf scale -pix_fmt gbrpf32le -#FATE_EXR += fate-exr-rgba-zip16-16x32-flag4 +FATE_EXR += fate-exr-rgba-zip16-16x32-flag4 fate-exr-rgba-zip16-16x32-flag4: CMD = framecrc -i $(TARGET_SAMPLES)/exr/rgba_zip16_16x32_flag4.exr -vf scale -pix_fmt gbrapf32le -#FATE_EXR += fate-exr-ya-scanline-zip-half-12x8 +FATE_EXR += fate-exr-ya-scanline-zip-half-12x8 fate-exr-ya-scanline-zip-half-12x8: CMD = framecrc -i $(TARGET_SAMPLES)/exr/ya_scanline_zip_half_12x8.exr -vf scale -pix_fmt gbrapf32le FATE_EXR += fate-exr-rgb-tile-half-zip diff --git a/tests/fate/lavf-image.mak b/tests/fate/lavf-image.mak index 19eaae6c3e..4177e091b3 100644 --- a/tests/fate/lavf-image.mak +++ b/tests/fate/lavf-image.mak @@ -9,18 +9,18 @@ FATE_LAVF_IMAGES-$(call LAVF_IMAGES, DPX) += gbrp12le.dpx FATE_LAVF_IMAGES-$(call LAVF_IMAGES, DPX) += rgb48le.dpx FATE_LAVF_IMAGES-$(call LAVF_IMAGES, DPX) += rgb48le_10.dpx FATE_LAVF_IMAGES-$(call LAVF_IMAGES, DPX) += rgba64le.dpx -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.grayf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.gbrpf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.gbrapf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.grayf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.gbrpf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.gbrapf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.grayf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.gbrpf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.gbrapf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.grayf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.gbrpf32le.exr -#FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.gbrapf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.grayf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.gbrpf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += none.gbrapf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.grayf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.gbrpf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += rle.gbrapf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.grayf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.gbrpf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip1.gbrapf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.grayf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.gbrpf32le.exr +FATE_LAVF_IMAGES-$(call LAVF_IMAGES, EXR) += zip16.gbrapf32le.exr FATE_LAVF_IMAGES-$(call LAVF_IMAGES, MJPEG) += jpg FATE_LAVF_IMAGES-$(call LAVF_IMAGES, PAM) += pam FATE_LAVF_IMAGES-$(call LAVF_IMAGES, PAM) += rgba.pam -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]