## SubPixel v0.1 ## ## Prelude to QPXSharpen (QuarterPel precision XSharpen), ## this function was written as an initial proof of concept ## for subpixel processing without supersampling. ## Any filter that produces (or is prone to produce) aliasing ## will be anti-aliased. ## ## Example: SubPixel("Levels(127, 1, 128, 0, 255)") ## Requires: MaskTools151, BlendMulti. function SubPixel(clip input, string expression, string "precision") { precision = Default(precision, "qpel") hpel = (precision == "hpel") qpel = (precision == "qpel") Assert((hpel || qpel), "Supported precision: hpel or qpel") # Note: Eval() b0rks out on OOP notation, so YV12Convolution.Eval # won't work. Seems to be an AVISynth bug, so go devs. input YV12Convolution("0 -1 9 9 -1", "0 -1 9 9 -1") Eval(expression) leftuph = last input YV12Convolution("1 -10 60 18 -5", "1 -10 60 18 -5") Eval(expression) leftupq = last input YV12Convolution("0 -1 9 9 -1", "0 0 1 0 0") Eval(expression) lefth = last input YV12Convolution("1 -10 60 18 -5", "0 0 1 0 0") Eval(expression) leftq = last input YV12Convolution("0 -1 9 9 -1", "-1 9 9 -1 0") Eval(expression) leftdownh = last input YV12Convolution("1 -10 60 18 -5", "-5 18 60 -10 1") Eval(expression) leftdownq = last input YV12Convolution("0 0 1 0 0", "0 -1 9 9 -1") Eval(expression) uph = last input YV12Convolution("0 0 1 0 0", "1 -10 60 18 -5") Eval(expression) upq = last input Eval(expression) center = last input YV12Convolution("0 0 1 0 0", "-1 9 9 -1 0") Eval(expression) downh = last input YV12Convolution("0 0 1 0 0", "-5 18 60 -10 1") Eval(expression) downq = last input YV12Convolution("-1 9 9 -1 0", "0 -1 9 9 -1") Eval(expression) rightuph = last input YV12Convolution("-5 18 60 -10 1", "1 -10 60 18 -5") Eval(expression) rightupq = last input YV12Convolution("-1 9 9 -1 0", "0 0 1 0 0") Eval(expression) righth = last input YV12Convolution("-5 18 60 -10 1", "0 0 1 0 0") Eval(expression) rightq = last input YV12Convolution("-1 9 9 -1 0", "-1 9 9 -1 0") Eval(expression) rightdownh = last input YV12Convolution("-5 18 60 -10 1", "-5 18 60 -10 1") Eval(expression) rightdownq = last BlendMulti(leftuph, uph, rightuph, lefth, center, righth, \ leftdownh, downh, rightdownh) outputh = last BlendMulti(leftuph, leftupq, uph, upq, rightuph, rightupq, \ lefth, leftq, center, righth, rightq, leftdownh, leftdownq, \ downh, downq, rightdownh, rightdownq) outputq = last qpel ? outputq : outputh }