Quote:
Originally Posted by DTL
If there were any table of the HDR colorbars (of some exact type) in PQ and HLG (of some exact white/black and other variables) it can be compared in the release 4:2:2 10bit files for total code value error. But I think non of official tables still exist. Having perfect decoded levels accuracy is sort of 'nice to have' feature for now I think.
|
Vapoursynth colorbars are exact, because they are synthetically generated according to SMPTE RP 219-1, 219-2 and ITU-R BT.2111-0 . The diagram and exact 10,12 bit code values are listed in the later for PQ narrow/full and HLG
https://github.com/ifb/vapoursynth-colorbars
You can import vpy scripts in to avs for many pixel types with VSImport("script.vpy")
Quote:
"maybe the sinc implmentation is not the same"
Yes - there at least 2 ways possible:
1. anti-ringing pre-filtering before sinc (not clear sinc so it will show fading of frequency responce at highest valid frequencies and a bit less sharpness)
2. it really do not scale in the input HDR-transfer but perform converting to linear inside. Though it need to know the current transfer-domain of the input content to perform converting to linear and back.
" without the large ringing seen avisynth."
Avisynth sinc mostly probably do not perform non-requested conversions to linear domain (and back) and not perform pre-filtering so if input content is not anti-ringing conditioned it will expose full ringing.
|
It does not look like they do, taking a quick look at the code. But I might have missed something
If you replace internal SincResize with
fmtc_resample(w=last.width*4, h=last.height*4, kernel="sinc", taps=16)
it does not exhibit the large ringing patterns either
avs internal code I think is this
https://github.com/AviSynth/AviSynth..._functions.cpp
Code:
]
/***********************
*** Sinc filter ***
***********************/
SincFilter::SincFilter(int _taps) {
taps = (double)clamp(_taps, 1, 20);
}
double SincFilter::f(double value) {
value = fabs(value);
if (value > 0.000001) {
value *= M_PI;
return sin(value)/value;
} else {
return 1.0;
}
}