Metadata filter output is passed through an Awk script comparing floats against reference values with specified "fuzz" tolerance to account for architectural differences (e.g. x86-32 vs. x86-64). Signed-off-by: Tobias Rapp <t.rapp@noa-archive.com>tags/n3.4
@@ -234,6 +234,15 @@ lavftest(){ | |||||
${base}/lavf-regression.sh $t lavf tests/vsynth1 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags" "$target_samples" | ${base}/lavf-regression.sh $t lavf tests/vsynth1 "$target_exec" "$target_path" "$threads" "$thread_type" "$cpuflags" "$target_samples" | ||||
} | } | ||||
refcmp_metadata(){ | |||||
refcmp=$1 | |||||
pixfmt=$2 | |||||
fuzz=${3:-0.001} | |||||
ffmpeg $FLAGS $ENC_OPTS \ | |||||
-lavfi "testsrc2=size=300x200:rate=1:duration=5,format=${pixfmt},split[ref][tmp];[tmp]avgblur=4[enc];[enc][ref]${refcmp},metadata=print:file=-" \ | |||||
-f null /dev/null | awk -v ref=${ref} -v fuzz=${fuzz} -f ${base}/refcmp-metadata.awk - | |||||
} | |||||
video_filter(){ | video_filter(){ | ||||
filters=$1 | filters=$1 | ||||
shift | shift | ||||
@@ -747,6 +747,20 @@ FATE_FILTER_SAMPLES-$(call ALLYES, MOV_DEMUXER H264_DECODER AAC_FIXED_DECODER PC | |||||
fate-filter-meta-4560-rotate0: tests/data/file4560-override2rotate0.mov | fate-filter-meta-4560-rotate0: tests/data/file4560-override2rotate0.mov | ||||
fate-filter-meta-4560-rotate0: CMD = framecrc -flags +bitexact -c:a aac_fixed -i $(TARGET_PATH)/tests/data/file4560-override2rotate0.mov | fate-filter-meta-4560-rotate0: CMD = framecrc -flags +bitexact -c:a aac_fixed -i $(TARGET_PATH)/tests/data/file4560-override2rotate0.mov | ||||
REFCMP_DEPS = FFMPEG LAVFI_INDEV TESTSRC2_FILTER AVGBLUR_FILTER METADATA_FILTER | |||||
FATE_FILTER_SAMPLES-$(call ALLYES, $(REFCMP_DEPS) PSNR_FILTER) += fate-filter-refcmp-psnr-rgb | |||||
fate-filter-refcmp-psnr-rgb: CMD = refcmp_metadata psnr rgb24 | |||||
FATE_FILTER_SAMPLES-$(call ALLYES, $(REFCMP_DEPS) PSNR_FILTER) += fate-filter-refcmp-psnr-yuv | |||||
fate-filter-refcmp-psnr-yuv: CMD = refcmp_metadata psnr yuv422p | |||||
FATE_FILTER_SAMPLES-$(call ALLYES, $(REFCMP_DEPS) SSIM_FILTER) += fate-filter-refcmp-ssim-rgb | |||||
fate-filter-refcmp-ssim-rgb: CMD = refcmp_metadata ssim rgb24 | |||||
FATE_FILTER_SAMPLES-$(call ALLYES, $(REFCMP_DEPS) SSIM_FILTER) += fate-filter-refcmp-ssim-yuv | |||||
fate-filter-refcmp-ssim-yuv: CMD = refcmp_metadata ssim yuv422p | |||||
FATE_SAMPLES_FFPROBE += $(FATE_METADATA_FILTER-yes) | FATE_SAMPLES_FFPROBE += $(FATE_METADATA_FILTER-yes) | ||||
FATE_SAMPLES_FFMPEG += $(FATE_FILTER_SAMPLES-yes) | FATE_SAMPLES_FFMPEG += $(FATE_FILTER_SAMPLES-yes) | ||||
FATE_FFMPEG += $(FATE_FILTER-yes) | FATE_FFMPEG += $(FATE_FILTER-yes) | ||||
@@ -0,0 +1,45 @@ | |||||
frame:0 pts:0 pts_time:0 | |||||
lavfi.psnr.mse.r=1381.80 | |||||
lavfi.psnr.psnr.r=16.73 | |||||
lavfi.psnr.mse.g=896.00 | |||||
lavfi.psnr.psnr.g=18.61 | |||||
lavfi.psnr.mse.b=277.38 | |||||
lavfi.psnr.psnr.b=23.70 | |||||
lavfi.psnr.mse_avg=851.73 | |||||
lavfi.psnr.psnr_avg=18.83 | |||||
frame:1 pts:1 pts_time:1 | |||||
lavfi.psnr.mse.r=1380.37 | |||||
lavfi.psnr.psnr.r=16.73 | |||||
lavfi.psnr.mse.g=975.91 | |||||
lavfi.psnr.psnr.g=18.24 | |||||
lavfi.psnr.mse.b=435.72 | |||||
lavfi.psnr.psnr.b=21.74 | |||||
lavfi.psnr.mse_avg=930.67 | |||||
lavfi.psnr.psnr_avg=18.44 | |||||
frame:2 pts:2 pts_time:2 | |||||
lavfi.psnr.mse.r=1403.20 | |||||
lavfi.psnr.psnr.r=16.66 | |||||
lavfi.psnr.mse.g=954.05 | |||||
lavfi.psnr.psnr.g=18.34 | |||||
lavfi.psnr.mse.b=494.22 | |||||
lavfi.psnr.psnr.b=21.19 | |||||
lavfi.psnr.mse_avg=950.49 | |||||
lavfi.psnr.psnr_avg=18.35 | |||||
frame:3 pts:3 pts_time:3 | |||||
lavfi.psnr.mse.r=1452.80 | |||||
lavfi.psnr.psnr.r=16.51 | |||||
lavfi.psnr.mse.g=1001.02 | |||||
lavfi.psnr.psnr.g=18.13 | |||||
lavfi.psnr.mse.b=557.39 | |||||
lavfi.psnr.psnr.b=20.67 | |||||
lavfi.psnr.mse_avg=1003.74 | |||||
lavfi.psnr.psnr_avg=18.11 | |||||
frame:4 pts:4 pts_time:4 | |||||
lavfi.psnr.mse.r=1401.25 | |||||
lavfi.psnr.psnr.r=16.67 | |||||
lavfi.psnr.mse.g=1009.80 | |||||
lavfi.psnr.psnr.g=18.09 | |||||
lavfi.psnr.mse.b=602.42 | |||||
lavfi.psnr.psnr.b=20.33 | |||||
lavfi.psnr.mse_avg=1004.49 | |||||
lavfi.psnr.psnr_avg=18.11 |
@@ -0,0 +1,45 @@ | |||||
frame:0 pts:0 pts_time:0 | |||||
lavfi.psnr.mse.y=222.06 | |||||
lavfi.psnr.psnr.y=24.67 | |||||
lavfi.psnr.mse.u=339.38 | |||||
lavfi.psnr.psnr.u=22.82 | |||||
lavfi.psnr.mse.v=705.41 | |||||
lavfi.psnr.psnr.v=19.65 | |||||
lavfi.psnr.mse_avg=372.23 | |||||
lavfi.psnr.psnr_avg=22.42 | |||||
frame:1 pts:1 pts_time:1 | |||||
lavfi.psnr.mse.y=236.74 | |||||
lavfi.psnr.psnr.y=24.39 | |||||
lavfi.psnr.mse.u=416.17 | |||||
lavfi.psnr.psnr.u=21.94 | |||||
lavfi.psnr.mse.v=704.98 | |||||
lavfi.psnr.psnr.v=19.65 | |||||
lavfi.psnr.mse_avg=398.66 | |||||
lavfi.psnr.psnr_avg=22.12 | |||||
frame:2 pts:2 pts_time:2 | |||||
lavfi.psnr.mse.y=234.79 | |||||
lavfi.psnr.psnr.y=24.42 | |||||
lavfi.psnr.mse.u=435.72 | |||||
lavfi.psnr.psnr.u=21.74 | |||||
lavfi.psnr.mse.v=699.60 | |||||
lavfi.psnr.psnr.v=19.68 | |||||
lavfi.psnr.mse_avg=401.23 | |||||
lavfi.psnr.psnr_avg=22.10 | |||||
frame:3 pts:3 pts_time:3 | |||||
lavfi.psnr.mse.y=250.88 | |||||
lavfi.psnr.psnr.y=24.14 | |||||
lavfi.psnr.mse.u=479.73 | |||||
lavfi.psnr.psnr.u=21.32 | |||||
lavfi.psnr.mse.v=707.55 | |||||
lavfi.psnr.psnr.v=19.63 | |||||
lavfi.psnr.mse_avg=422.26 | |||||
lavfi.psnr.psnr_avg=21.88 | |||||
frame:4 pts:4 pts_time:4 | |||||
lavfi.psnr.mse.y=241.05 | |||||
lavfi.psnr.psnr.y=24.31 | |||||
lavfi.psnr.mse.u=505.04 | |||||
lavfi.psnr.psnr.u=21.10 | |||||
lavfi.psnr.mse.v=716.00 | |||||
lavfi.psnr.psnr.v=19.58 | |||||
lavfi.psnr.mse_avg=425.79 | |||||
lavfi.psnr.psnr_avg=21.84 |
@@ -0,0 +1,30 @@ | |||||
frame:0 pts:0 pts_time:0 | |||||
lavfi.ssim.R=0.72 | |||||
lavfi.ssim.G=0.76 | |||||
lavfi.ssim.B=0.89 | |||||
lavfi.ssim.All=0.79 | |||||
lavfi.ssim.dB=6.74 | |||||
frame:1 pts:1 pts_time:1 | |||||
lavfi.ssim.R=0.70 | |||||
lavfi.ssim.G=0.74 | |||||
lavfi.ssim.B=0.85 | |||||
lavfi.ssim.All=0.77 | |||||
lavfi.ssim.dB=6.31 | |||||
frame:2 pts:2 pts_time:2 | |||||
lavfi.ssim.R=0.71 | |||||
lavfi.ssim.G=0.75 | |||||
lavfi.ssim.B=0.84 | |||||
lavfi.ssim.All=0.76 | |||||
lavfi.ssim.dB=6.29 | |||||
frame:3 pts:3 pts_time:3 | |||||
lavfi.ssim.R=0.70 | |||||
lavfi.ssim.G=0.73 | |||||
lavfi.ssim.B=0.83 | |||||
lavfi.ssim.All=0.76 | |||||
lavfi.ssim.dB=6.11 | |||||
frame:4 pts:4 pts_time:4 | |||||
lavfi.ssim.R=0.71 | |||||
lavfi.ssim.G=0.74 | |||||
lavfi.ssim.B=0.80 | |||||
lavfi.ssim.All=0.75 | |||||
lavfi.ssim.dB=6.05 |
@@ -0,0 +1,30 @@ | |||||
frame:0 pts:0 pts_time:0 | |||||
lavfi.ssim.Y=0.80 | |||||
lavfi.ssim.U=0.76 | |||||
lavfi.ssim.V=0.69 | |||||
lavfi.ssim.All=0.76 | |||||
lavfi.ssim.dB=6.25 | |||||
frame:1 pts:1 pts_time:1 | |||||
lavfi.ssim.Y=0.80 | |||||
lavfi.ssim.U=0.73 | |||||
lavfi.ssim.V=0.68 | |||||
lavfi.ssim.All=0.75 | |||||
lavfi.ssim.dB=6.08 | |||||
frame:2 pts:2 pts_time:2 | |||||
lavfi.ssim.Y=0.80 | |||||
lavfi.ssim.U=0.73 | |||||
lavfi.ssim.V=0.68 | |||||
lavfi.ssim.All=0.75 | |||||
lavfi.ssim.dB=6.10 | |||||
frame:3 pts:3 pts_time:3 | |||||
lavfi.ssim.Y=0.79 | |||||
lavfi.ssim.U=0.72 | |||||
lavfi.ssim.V=0.68 | |||||
lavfi.ssim.All=0.75 | |||||
lavfi.ssim.dB=5.94 | |||||
frame:4 pts:4 pts_time:4 | |||||
lavfi.ssim.Y=0.80 | |||||
lavfi.ssim.U=0.72 | |||||
lavfi.ssim.V=0.68 | |||||
lavfi.ssim.All=0.75 | |||||
lavfi.ssim.dB=5.97 |
@@ -0,0 +1,64 @@ | |||||
# Compare metadata filter output containing float value strings to reference | |||||
# output data. Returns the whole reference data if delta of each value is below | |||||
# threshold, else returns the whole input data. | |||||
function abs(val) { | |||||
return ((val < 0.0) ? -val : val); | |||||
} | |||||
function max(val1, val2) { | |||||
return ((val1 >= val2) ? val1 : val2); | |||||
} | |||||
function is_numeric_str(str) { | |||||
return (str ~ /^[+-]?[0-9]*\.?[0-9]+$/); | |||||
} | |||||
BEGIN { | |||||
FS = "="; | |||||
# check for "fuzz" (threshold) program parameter, else use default | |||||
if (fuzz <= 0.0) { | |||||
fuzz = 0.1; | |||||
} | |||||
# check for "ref" (reference file) program parameter | |||||
if (ref) { | |||||
ref_nr = 0; | |||||
while ((getline line < ref) > 0) { | |||||
ref_nr++; | |||||
ref_lines[ref_nr] = line; | |||||
if (split(line, fields) == 2 && is_numeric_str(fields[2])) { | |||||
ref_keys[ref_nr] = fields[1]; | |||||
ref_vals[ref_nr] = fields[2] + 0; # convert to number | |||||
} | |||||
} | |||||
close(ref); | |||||
} | |||||
delta_max = 0; | |||||
result = (ref ? 1 : 0); | |||||
} | |||||
{ | |||||
cmp_lines[NR] = $0; | |||||
if (NF == 2 && is_numeric_str($2) && ref_vals[NR]) { | |||||
val = $2 + 0; # convert to number | |||||
delta = abs((val / ref_vals[NR]) - 1); | |||||
delta_max = max(delta_max, delta); | |||||
result = result && ($1 == ref_keys[NR]) && (delta <= fuzz); | |||||
} else { | |||||
result = result && ($0 == ref_lines[NR]); | |||||
} | |||||
} | |||||
END { | |||||
if (result) { | |||||
for (i = 1; i <= ref_nr; i++) | |||||
print ref_lines[i]; | |||||
} else { | |||||
for (i = 1; i <= NR; i++) | |||||
print cmp_lines[i]; | |||||
if (NR != ref_nr) | |||||
print "[refcmp] lines: " NR " != " ref_nr > "/dev/stderr"; | |||||
if (delta_max >= fuzz) | |||||
print "[refcmp] delta_max: " delta_max " >= " fuzz > "/dev/stderr"; | |||||
} | |||||
} |