SHOW:
|
|
- or go back to the newest paste.
| 1 | ################################################################################################ | |
| 2 | ### ### | |
| 3 | ### LimitedSharpenFaster MOD : function LSFmod() ### | |
| 4 | ### ### | |
| 5 | ### Modded Version by LaTo INV. ### | |
| 6 | ### ### | |
| 7 | ### v1.9 - 05 October 2009 ### | |
| 8 | ### ### | |
| 9 | ### another Modded Version by A.SONY. ### | |
| 10 | ### ### | |
| 11 | - | ### v2.15 - 19 February 2019 ### |
| 11 | + | ### v2.16 - 20 July 2019 ### |
| 12 | ### ### | |
| 13 | ################################################################################################ | |
| 14 | ### | |
| 15 | ### +-----------+ | |
| 16 | ### | CHANGELOG | | |
| 17 | ### +-----------+ | |
| 18 | ### | |
| 19 | ### v2.12 : - HBD in avs+ | |
| 20 | ### - some fixes | |
| 21 | ### | |
| 22 | ### v1.9 : - tweaked settings | |
| 23 | ### - default preset is now defaults="fast" /!\ | |
| 24 | ### | |
| 25 | ### v1.8 : - changed preblur to allow more tweaking (bool->string) | |
| 26 | ### - tweaked settings | |
| 27 | ### - cleaned the code | |
| 28 | ### - updated documentation | |
| 29 | ### | |
| 30 | ### v1.7 : - changed Smethod=4 to "source" | |
| 31 | ### | |
| 32 | ### v1.6 : - added preblur option | |
| 33 | ### - added new Smethod=4 | |
| 34 | ### | |
| 35 | ### v1.5 : - fixed LUT expression (thanks to Didée) | |
| 36 | ### - changed Smethod to Smethod+secure | |
| 37 | ### | |
| 38 | ### v1.4 : - changed defaults="new" to defaults="slow" & defaults="fast" | |
| 39 | ### - added show parameter | |
| 40 | ### - cleaned a little the code | |
| 41 | ### | |
| 42 | ### v1.3 : - changed a little Smethod=3&5 (same effect, but more precise) | |
| 43 | ### - added new calculation for soft (soft=-2) [default on] | |
| 44 | ### - added warning about bad settings (no more silent) | |
| 45 | ### - updated the documentation | |
| 46 | ### | |
| 47 | ### v1.2 : - added new Lmode<0 (limit with repair) | |
| 48 | ### - added 2 new Smode (unsharp masking) | |
| 49 | ### - changed Smode order: now old Smode3-4 is new Smode3-4 to avoid mistake | |
| 50 | ### | |
| 51 | ### v1.1 : - fixed a bug with dest_x!=ox or dest_y!=oy | |
| 52 | ### - replaced Lfactor by over/undershoot2 | |
| 53 | ### | |
| 54 | ### v1.0 : - deleted old Smode(1-4), added new Smode(1-3) & Smethod(1-5) | |
| 55 | ### - added parameters for nonlinear sharpening (S2zp,S2pwr,S2dmpLo,S2dmpHi) | |
| 56 | ### - corrected the nonlinear formula | |
| 57 | ### - added new Lmode 2 & 4 + fixed Lmode 0 | |
| 58 | ### - added faster edgemask | |
| 59 | ### - added soothe temporal stabilization, 2 parameters: soothe & keep | |
| 60 | ### - replaced lanczosresize by spline36resize | |
| 61 | ### - moved "strength" parameter (first place) | |
| 62 | ### - deleted wide, special and exborder | |
| 63 | ### - changed some code (cosmetic) | |
| 64 | ### - added "defaults" parameter (to switch between original and modded version) | |
| 65 | ### - added documentation | |
| 66 | ### | |
| 67 | ### | |
| 68 | ### | |
| 69 | ### +--------------+ | |
| 70 | ### | DEPENDENCIES | | |
| 71 | ### +--------------+ | |
| 72 | ### | |
| 73 | ### -> Masktools (v2.2.15 or up) | |
| 74 | ### -> Removegrain (v1.0pre or up) | |
| 75 | ### -> Warpsharp (2003.11.03 or up) [for Smode=1] | |
| 76 | ### -> Variableblur (v0.30 or up) [for Smode=2] | |
| 77 | ### -> if you use avs+ then make sure it's it the last one | |
| 78 | ### | |
| 79 | ### | |
| 80 | ### | |
| 81 | ### | |
| 82 | ### +-------+ | |
| 83 | ### | USAGE | | |
| 84 | ### +-------+ | |
| 85 | ### | |
| 86 | ### LSFmod( strength, Smode, Smethod, kernel, | |
| 87 | ### preblur, secure, source, | |
| 88 | ### Szrp, Spwr, SdmpLo, SdmpHi, | |
| 89 | ### Lmode, overshoot, undershoot, overshoot2, undershoot2, | |
| 90 | ### soft, soothe, keep, | |
| 91 | ### edgemode, edgemaskHQ, | |
| 92 | ### ss_x, ss_y, dest_x, dest_y, | |
| 93 | ### show, screenW, screenH, | |
| 94 | ### defaults ) | |
| 95 | ### | |
| 96 | ### | |
| 97 | ### | |
| 98 | ### +---------+ | |
| 99 | ### | GENERAL | | |
| 100 | ### +---------+ | |
| 101 | ### | |
| 102 | ### strength [int] | |
| 103 | ### -------------- | |
| 104 | ### Strength of the sharpening | |
| 105 | ### | |
| 106 | ### Smode [int: 1,2,3,4,5] | |
| 107 | ### ---------------------- | |
| 108 | ### Sharpen mode: | |
| 109 | ### =1 : Unsharp masking (from warpsharp) | |
| 110 | ### =2 : Unsharp masking (from variableblur) | |
| 111 | ### =3 : Range sharpening | |
| 112 | ### =4 : Nonlinear sharpening (original version) | |
| 113 | ### =5 : Nonlinear sharpening (corrected version) | |
| 114 | ### | |
| 115 | ### Smethod [int: 1,2,3] | |
| 116 | ### -------------------- | |
| 117 | ### Sharpen method: (only used in Smode=3,4,5) | |
| 118 | ### =1 : 3x3 kernel | |
| 119 | ### =2 : Min/Max | |
| 120 | ### =3 : Min/Max + 3x3 kernel | |
| 121 | ### | |
| 122 | ### kernel [int: 11,12,19,20] | |
| 123 | ### ------------------------- | |
| 124 | ### Kernel used in Smethod=1&3 | |
| 125 | ### In strength order: + 19 > 12 >> 20 > 11 - | |
| 126 | ### | |
| 127 | ### | |
| 128 | ### | |
| 129 | ### +---------+ | |
| 130 | ### | SPECIAL | | |
| 131 | ### +---------+ | |
| 132 | ### | |
| 133 | ### preblur [string: "ON","OFF",...] | |
| 134 | ### -------------------------------- | |
| 135 | ### Mode to avoid noise sharpening & ringing (only used in Smode=3,4,5) | |
| 136 | ### "ON" is sufficient to prevent ringing, but to prevent noise sharpening you should set your own denoiser | |
| 137 | ### Usage: LSFmod(preblur="YourFavoriteDenoiser()") | |
| 138 | ### Example: LSFmod(preblur="FFT3Dfilter(sigma=4,plane=0)") | |
| 139 | ### | |
| 140 | ### | |
| 141 | ### secure [bool] | |
| 142 | ### ------------- | |
| 143 | ### Mode to avoid banding & oil painting (or face wax) effect of sharpening | |
| 144 | ### (only used in Smode=3,4,5) | |
| 145 | ### | |
| 146 | ### source [clip] | |
| 147 | ### ------------- | |
| 148 | ### If source is defined, LSFmod doesn't sharp more a denoised clip than this source clip | |
| 149 | ### In this mode, you can safely set Lmode=0 & PP=off | |
| 150 | ### Usage: denoised.LSFmod(source=source) | |
| 151 | ### Example: last.FFT3Dfilter().LSFmod(source=last,Lmode=0,soft=0) | |
| 152 | ### | |
| 153 | ### | |
| 154 | ### | |
| 155 | ### +----------------------+ | |
| 156 | ### | NONLINEAR SHARPENING | | |
| 157 | ### +----------------------+ | |
| 158 | ### | |
| 159 | ### Szrp [int] | |
| 160 | ### ---------- | |
| 161 | ### Zero Point: | |
| 162 | ### - differences below Szrp are amplified (overdrive sharpening) | |
| 163 | ### - differences above Szrp are reduced (reduced sharpening) | |
| 164 | ### | |
| 165 | ### Spwr [int] | |
| 166 | ### ---------- | |
| 167 | ### Power: exponent for sharpener | |
| 168 | ### | |
| 169 | ### SdmpLo [int] | |
| 170 | ### ------------ | |
| 171 | ### Damp Low: reduce sharpening for small changes [0:disable] | |
| 172 | ### | |
| 173 | ### SdmpHi [int] | |
| 174 | ### ------------ | |
| 175 | ### Damp High: reduce sharpening for big changes [0:disable] | |
| 176 | ### | |
| 177 | ### | |
| 178 | ### | |
| 179 | ### +----------+ | |
| 180 | ### | LIMITING | | |
| 181 | ### +----------+ | |
| 182 | ### | |
| 183 | ### Lmode [int: ...,0,1,2,3,4] | |
| 184 | ### -------------------------- | |
| 185 | ### Limit mode: | |
| 186 | ### <0 : Limit with repair (ex: Lmode=-1 --> repair(1), Lmode=-5 --> repair(5)...) | |
| 187 | ### =0 : No limit | |
| 188 | ### =1 : Limit to over/undershoot | |
| 189 | ### =2 : Limit to over/undershoot on edges and no limit on not-edges | |
| 190 | ### =3 : Limit to zero on edges and to over/undershoot on not-edges | |
| 191 | ### =4 : Limit to over/undershoot on edges and to over/undershoot2 on not-edges | |
| 192 | ### | |
| 193 | ### overshoot [int] | |
| 194 | ### --------------- | |
| 195 | ### Limit for pixels that get brighter during sharpening | |
| 196 | ### | |
| 197 | ### undershoot [int] | |
| 198 | ### ---------------- | |
| 199 | ### Limit for pixels that get darker during sharpening | |
| 200 | ### | |
| 201 | ### overshoot2 [int] | |
| 202 | ### ---------------- | |
| 203 | ### Same as overshoot, only for Lmode=4 | |
| 204 | ### | |
| 205 | ### undershoot2 [int] | |
| 206 | ### ----------------- | |
| 207 | ### Same as undershoot, only for Lmode=4 | |
| 208 | ### | |
| 209 | ### | |
| 210 | ### | |
| 211 | ### +-----------------+ | |
| 212 | ### | POST-PROCESSING | | |
| 213 | ### +-----------------+ | |
| 214 | ### | |
| 215 | ### soft [int: -2,-1,0...100] | |
| 216 | ### ------------------------- | |
| 217 | ### Soft the sharpening effect (-1 = old autocalculate, -2 = new autocalculate) | |
| 218 | ### | |
| 219 | ### soothe [bool] | |
| 220 | ### ------------- | |
| 221 | ### =true : Enable soothe temporal stabilization | |
| 222 | ### =false : Disable soothe temporal stabilization | |
| 223 | ### | |
| 224 | ### keep [int: 0...100] | |
| 225 | ### ------------------- | |
| 226 | ### Minimum percent of the original sharpening to keep (only with soothe=true) | |
| 227 | ### | |
| 228 | ### | |
| 229 | ### | |
| 230 | ### +-------+ | |
| 231 | ### | EDGES | | |
| 232 | ### +-------+ | |
| 233 | ### | |
| 234 | ### edgemode [int: -1,0,1,2] | |
| 235 | ### ------------------------ | |
| 236 | ### =-1 : Show edgemask | |
| 237 | ### = 0 : Sharpening all | |
| 238 | ### = 1 : Sharpening only edges | |
| 239 | ### = 2 : Sharpening only not-edges | |
| 240 | ### | |
| 241 | ### edgemaskHQ [bool] | |
| 242 | ### ----------------- | |
| 243 | ### =true : Original edgemask | |
| 244 | ### =false : Faster edgemask | |
| 245 | ### | |
| 246 | ### | |
| 247 | ### | |
| 248 | ### +------------+ | |
| 249 | ### | UPSAMPLING | | |
| 250 | ### +------------+ | |
| 251 | ### | |
| 252 | ### ss_x ; ss_y [float] | |
| 253 | ### ------------------- | |
| 254 | ### Supersampling factor (reduce aliasing on edges) | |
| 255 | ### | |
| 256 | ### dest_x ; dest_y [int] | |
| 257 | ### --------------------- | |
| 258 | ### Output resolution after sharpening (avoid a resizing step) | |
| 259 | ### | |
| 260 | ### | |
| 261 | ### | |
| 262 | ### +-------+ | |
| 263 | ### | DEBUG | | |
| 264 | ### +-------+ | |
| 265 | ### | |
| 266 | ### show [bool] | |
| 267 | ### ----------- | |
| 268 | ### Show debug clip & informations | |
| 269 | ### | |
| 270 | ### screenW ; screenH [int] | |
| 271 | ### ----------------------- | |
| 272 | ### Screen resolution (for show clip) | |
| 273 | ### | |
| 274 | ### | |
| 275 | ### | |
| 276 | ### +----------+ | |
| 277 | ### | SETTINGS | | |
| 278 | ### +----------+ | |
| 279 | ### | |
| 280 | ### defaults [string: "old" or "slow" or "fast"] | |
| 281 | ### -------------------------------------------- | |
| 282 | ### = "old" : Reset settings to original version (output will be THE SAME AS LSF) | |
| 283 | ### = "slow" : Enable SLOW modded version settings | |
| 284 | ### = "fast" : Enable FAST modded version settings | |
| 285 | ### --> /!\ [default:"fast"] | |
| 286 | ### | |
| 287 | ### | |
| 288 | ### defaults="old" : - strength = 100 | |
| 289 | ### ---------------- - Smode = 3 | |
| 290 | ### - Smethod = Smode==3?2:1 | |
| 291 | ### - kernel = 11 | |
| 292 | ### | |
| 293 | ### - preblur = "OFF" | |
| 294 | ### - secure = false | |
| 295 | ### - source = undefined | |
| 296 | ### | |
| 297 | ### - Szrp = 16 | |
| 298 | ### - Spwr = 2 | |
| 299 | ### - SdmpLo = strength/25 | |
| 300 | ### - SdmpHi = 0 | |
| 301 | ### | |
| 302 | ### - Lmode = 1 | |
| 303 | ### - overshoot = 1 | |
| 304 | ### - undershoot = overshoot | |
| 305 | ### - overshoot2 = overshoot*2 | |
| 306 | ### - undershoot2 = overshoot2 | |
| 307 | ### | |
| 308 | ### - soft = 0 | |
| 309 | ### - soothe = false | |
| 310 | ### - keep = 25 | |
| 311 | ### | |
| 312 | ### - edgemode = 0 | |
| 313 | ### - edgemaskHQ = true | |
| 314 | ### | |
| 315 | ### - ss_x = Smode==3?1.50:1.25 | |
| 316 | ### - ss_y = ss_x | |
| 317 | ### - dest_x = ox | |
| 318 | ### - dest_y = oy | |
| 319 | ### | |
| 320 | ### - show = false | |
| 321 | ### - screenW = 1280 | |
| 322 | ### - screenH = 1024 | |
| 323 | ### | |
| 324 | ### | |
| 325 | ### defaults="slow" : - strength = 100 | |
| 326 | ### ----------------- - Smode = 5 | |
| 327 | ### - Smethod = 3 | |
| 328 | ### - kernel = 11 | |
| 329 | ### | |
| 330 | ### - preblur = "OFF" | |
| 331 | ### - secure = true | |
| 332 | ### - source = undefined | |
| 333 | ### | |
| 334 | ### - Szrp = 16 | |
| 335 | ### - Spwr = 4 | |
| 336 | ### - SdmpLo = 4 | |
| 337 | ### - SdmpHi = 48 | |
| 338 | ### | |
| 339 | ### - Lmode = 4 | |
| 340 | ### - overshoot = strength/100 | |
| 341 | ### - undershoot = overshoot | |
| 342 | ### - overshoot2 = overshoot*2 | |
| 343 | ### - undershoot2 = overshoot2 | |
| 344 | ### | |
| 345 | ### - soft = -2 | |
| 346 | ### - soothe = true | |
| 347 | ### - keep = 20 | |
| 348 | ### | |
| 349 | ### - edgemode = 0 | |
| 350 | ### - edgemaskHQ = true | |
| 351 | ### | |
| 352 | ### - ss_x = 1.50 | |
| 353 | ### - ss_y = ss_x | |
| 354 | ### - dest_x = ox | |
| 355 | ### - dest_y = oy | |
| 356 | ### | |
| 357 | ### - show = false | |
| 358 | ### - screenW = 1280 | |
| 359 | ### - screenH = 1024 | |
| 360 | ### | |
| 361 | ### | |
| 362 | ### defaults="fast" : - strength = 100 | |
| 363 | ### ----------------- - Smode = 3 | |
| 364 | ### - Smethod = 2 | |
| 365 | ### - kernel = 11 | |
| 366 | ### | |
| 367 | ### - preblur = "OFF" | |
| 368 | ### - secure = true | |
| 369 | ### - source = undefined | |
| 370 | ### | |
| 371 | ### - Szrp = 16 | |
| 372 | ### - Spwr = 4 | |
| 373 | ### - SdmpLo = 4 | |
| 374 | ### - SdmpHi = 48 | |
| 375 | ### | |
| 376 | ### - Lmode = 1 | |
| 377 | ### - overshoot = strength/100 | |
| 378 | ### - undershoot = overshoot | |
| 379 | ### - overshoot2 = overshoot*2 | |
| 380 | ### - undershoot2 = overshoot2 | |
| 381 | ### | |
| 382 | ### - soft = 0 | |
| 383 | ### - soothe = true | |
| 384 | ### - keep = 20 | |
| 385 | ### | |
| 386 | ### - edgemode = 0 | |
| 387 | ### - edgemaskHQ = false | |
| 388 | ### | |
| 389 | ### - ss_x = 1.25 | |
| 390 | ### - ss_y = ss_x | |
| 391 | ### - dest_x = ox | |
| 392 | ### - dest_y = oy | |
| 393 | ### | |
| 394 | ### - show = false | |
| 395 | ### - screenW = 1280 | |
| 396 | ### - screenH = 1024 | |
| 397 | ### | |
| 398 | ################################################################################################ | |
| 399 | ||
| 400 | function LSFmod( clip inclip, float "strength", int "Smode", int "Smethod", int "kernel", | |
| 401 | \ string "preblur", bool "secure", clip "source", | |
| 402 | \ int "Szrp", int "Spwr", float "SdmpLo", float "SdmpHi", | |
| 403 | \ int "Lmode", int "overshoot", int "undershoot", int "overshoot2", int "undershoot2", | |
| 404 | \ int "soft", bool "soothe", int "keep", | |
| 405 | \ int "edgemode", bool "edgemaskHQ", | |
| 406 | \ float "ss_x", float "ss_y", int "dest_x", int "dest_y", | |
| 407 | \ bool "show", int "screenW", int "screenH", | |
| 408 | \ string "defaults" ) | |
| 409 | {
| |
| 410 | ||
| 411 | sisphbd = AvsPlusVersionNumber > 2294 | |
| 412 | ||
| 413 | sislumaonly = sisphbd ? inclip.isy() : VersionNumber() < 2.6 ? true : inclip.isy8() | |
| 414 | ||
| 415 | input = sislumaonly ? inclip : sisphbd ? inclip.converttoy() : inclip.converttoy8() | |
| 416 | ||
| 417 | input = defined(source) ? input.pointresize(width(input),height(input)+8,0,-4,width(input),height(input)+8.0001) : input | |
| 418 | ||
| 419 | source = defined(source) ? sislumaonly ? source : sisphbd ? source.converttoy() : source.converttoy8() : source | |
| 420 | ||
| 421 | source = defined(source) ? source.pointresize(width(source),height(source)+8,0,-4,width(source),height(source)+8.0001) : source | |
| 422 | ||
| 423 | ### DEFAULTS | |
| 424 | version = "v2.1" | |
| 425 | defaults = default(defaults,"fast") | |
| 426 | num = defaults=="old" ? 0 : defaults=="slow" ? 1 : defaults=="fast" ? 2 : 3 | |
| 427 | ||
| 428 | ox = input.width | |
| 429 | oy = input.height | |
| 430 | ||
| 431 | Assert(!isYUY2(input), chr(10) + "not work with an YUY2 clip !" + chr(10)) | |
| 432 | Assert(num != 3 ? true : false, chr(10) + """Defaults must be "old" or "slow" or "fast" !""" + chr(10)) | |
| 433 | ||
| 434 | strength = default( strength, Select(num, 100 , 100 , 100 ) ) | |
| 435 | Smode = default( Smode, Select(num, 3 , 5 , 3 ) ) | |
| 436 | Smethod = default( Smethod, Select(num, Smode==3?2:1 , 3 , 2 ) ) | |
| 437 | kernel = default( kernel, Select(num, 11 , 11 , 11 ) ) | |
| 438 | ||
| 439 | preblur = default( preblur, Select(num, "OFF" , "OFF" , "OFF" ) ) | |
| 440 | secure = default( secure, Select(num, false , true , true ) ) | |
| 441 | ||
| 442 | Szrp = default( Szrp, Select(num, 16 , 16 , 16 ) ) | |
| 443 | Spwr = default( Spwr, Select(num, 2 , 4 , 4 ) ) | |
| 444 | SdmpLo = default( SdmpLo, Select(num, strength/25 , 4 , 4 ) ) | |
| 445 | SdmpHi = default( SdmpHi, Select(num, 0 , 48 , 48 ) ) | |
| 446 | ||
| 447 | Lmode = default( Lmode, Select(num, 1 , 4 , 1 ) ) | |
| 448 | overshoot = default( overshoot, Select(num, 1 , strength/100 , strength/100 ) ) | |
| 449 | undershoot = default( undershoot, Select(num, overshoot , overshoot , overshoot ) ) | |
| 450 | overshoot2 = default( overshoot2, Select(num, overshoot*2 , overshoot*2 , overshoot*2 ) ) | |
| 451 | undershoot2 = default( undershoot2, Select(num, overshoot2 , overshoot2 , overshoot2 ) ) | |
| 452 | ||
| 453 | soft = default( soft, Select(num, 0 , -2 , 0 ) ) | |
| 454 | soothe = default( soothe, Select(num, false , true , true ) ) | |
| 455 | keep = default( keep, Select(num, 25 , 20 , 20 ) ) | |
| 456 | ||
| 457 | edgemode = default( edgemode, Select(num, 0 , 0 , 0 ) ) | |
| 458 | edgemaskHQ = default( edgemaskHQ, Select(num, true , true , false ) ) | |
| 459 | ||
| 460 | ss_x = default( ss_x, Select(num, Smode==3?1.50:1.25 , 1.50 , 1.25 ) ) | |
| 461 | ss_y = default( ss_y, Select(num, ss_x , ss_x , ss_x ) ) | |
| 462 | dest_x = default( dest_x, Select(num, ox , ox , ox ) ) | |
| 463 | dest_y = default( dest_y, Select(num, oy , oy , oy ) ) | |
| 464 | ||
| 465 | show = default( show, Select(num, false , false , false ) ) | |
| 466 | screenW = default( screenW, Select(num, 1280 , 1280 , 1280 ) ) | |
| 467 | screenH = default( screenH, Select(num, 1024 , 1024 , 1024 ) ) | |
| 468 | ||
| 469 | Assert( ( strength >= 0 ) ? true : false, chr(10) + "'strength' have not a correct value! [>=0]" + chr(10)) | |
| 470 | Assert( ( Smode >= 1 && Smode <= 5 ) ? true : false, chr(10) + "'Smode' have not a correct value! [1,2,3,4,5]" + chr(10)) | |
| 471 | Assert( ( Smethod >= 1 && Smethod <= 4 ) ? true : false, chr(10) + "'Smethod' have not a correct value! [1,2,3,4]" + chr(10)) | |
| 472 | Assert( ( kernel == 19 || kernel == 20 || kernel == 11 || kernel == 12 ) ? true : false, chr(10) + "'kernel' have not a correct value! [19,20,11,12]" + chr(10)) | |
| 473 | Assert( ( Szrp >= 1 && Szrp <= 255 ) ? true : false, chr(10) + "'Szrp' have not a correct value! [1...255]" + chr(10)) | |
| 474 | Assert( ( Spwr >= 1 ) ? true : false, chr(10) + "'Spwr' have not a correct value! [>=1]" + chr(10)) | |
| 475 | Assert( ( SdmpLo >= 0 && SdmpLo <= 255 ) ? true : false, chr(10) + "'SdmpLo' have not a correct value! [0...255]" + chr(10)) | |
| 476 | Assert( ( SdmpHi >= 0 && SdmpHi <= 255 ) ? true : false, chr(10) + "'SdmpHi' have not a correct value! [0...255]" + chr(10)) | |
| 477 | Assert( ( Lmode <= 4 ) ? true : false, chr(10) + "'Lmode' have not a correct value! [...-1,0,1,2,3,4]" + chr(10)) | |
| 478 | Assert( ( overshoot >= 0 && overshoot <= 255 ) ? true : false, chr(10) + "'overshoot' have not a correct value! [0...255]" + chr(10)) | |
| 479 | Assert( ( undershoot >= 0 && undershoot <= 255 ) ? true : false, chr(10) + "'undershoot' have not a correct value! [0...255]" + chr(10)) | |
| 480 | Assert( ( overshoot2 >= 0 && overshoot2 <= 255 ) ? true : false, chr(10) + "'overshoot2' have not a correct value! [0...255]" + chr(10)) | |
| 481 | Assert( ( undershoot2 >= 0 && undershoot2 <= 255 ) ? true : false, chr(10) + "'undershoot2' have not a correct value! [0...255]" + chr(10)) | |
| 482 | Assert( ( soft >= -2 && soft <= 100 ) ? true : false, chr(10) + "'soft' have not a correct value! [-2,-1,0,1...100]" + chr(10)) | |
| 483 | Assert( ( keep >= 0 && keep <= 100 ) ? true : false, chr(10) + "'keep' have not a correct value! [0...100]" + chr(10)) | |
| 484 | Assert( ( edgemode >= -1 && edgemode <= 2 ) ? true : false, chr(10) + "'edgemode' have not a correct value! [-1,0,1,2]" + chr(10)) | |
| 485 | Assert( ( ss_x >= 1.0 ) ? true : false, chr(10) + "'ss_x' have not a correct value! [>=1.0]" + chr(10)) | |
| 486 | Assert( ( ss_y >= 1.0 ) ? true : false, chr(10) + "'ss_y' have not a correct value! [>=1.0]" + chr(10)) | |
| 487 | ||
| 488 | soft = soft!=-1 ? soft : sqrt( (((ss_x+ss_y)/2.0-1.0)*100.0) ) * 10 | |
| 489 | soft = soft!=-2 ? soft : int( (1.0+(2.0/(ss_x+ss_y))) * sqrt(strength) ) | |
| 490 | soft = soft<=100 ? soft : 100 | |
| 491 | ||
| 492 | xxs = round(ox*ss_x/8)*8 | |
| 493 | yys = round(oy*ss_y/8)*8 | |
| 494 | ||
| 495 | str = float(strength)/100.0 | |
| 496 | ||
| 497 | ||
| 498 | ### SHARP | |
| 499 | tmp = ss_x > 1.0 || ss_y > 1.0 ? input.spline36resize(xxs,yys) : input | |
| 500 | pre = preblur=="OFF" ? tmp | |
| 501 | \ : preblur=="ON" ? VersionNumber() < 2.6 ? tmp.mt_makediff( mt_lutxy(mt_makediff(tmp,tmp.removegrain(11,-1),U=1,V=1) | |
| 502 | \ ,mt_makediff(tmp,tmp.removegrain(4,-1),U=1,V=1) | |
| 503 | \ ,"x 128 - y 128 - * 0 < 128 x 128 - abs y 128 - abs < x y ? ?",U=1,V=1) ,U=1,V=1) \ | |
| 504 | : tmp.mt_makediff( mt_lutxy(mt_makediff(tmp,tmp.removegrain(11,-1),U=1,V=1) | |
| 505 | \ ,mt_makediff(tmp,tmp.removegrain(4,-1),U=1,V=1) | |
| 506 | \ ,"x range_half - y range_half - * 0 < range_half x range_half - abs y range_half - abs < x y ? ?",use_expr=2,U=1,V=1) ,U=1,V=1) | |
| 507 | \ : eval("tmp."+preblur)
| |
| 508 | ||
| 509 | dark_limit = pre.mt_inpand(U=1,V=1) | |
| 510 | bright_limit = pre.mt_expand(U=1,V=1) | |
| 511 | minmaxavg = mt_average(dark_limit,bright_limit,U=1,V=1) | |
| 512 | ||
| 513 | method = Smethod==1 ? pre.removegrain(kernel,-1) | |
| 514 | \ : Smethod==2 ? minmaxavg | |
| 515 | \ : minmaxavg.removegrain(kernel,-1) | |
| 516 | ||
| 517 | method = secure==true ? VersionNumber() < 2.6 ? method.mt_lutxy(pre,"x y < x 1 + x y > x 1 - x ? ?",U=1,V=1) \ | |
| 518 | : method.mt_lutxy(pre,"x y < x 1 scalef + x y > x 1 scalef - x ? ?",use_expr=2,U=1,V=1) | |
| 519 | \ : method | |
| 520 | ||
| 521 | method = preblur=="OFF" ? method : tmp.mt_makediff(mt_makediff(pre,method,U=1,V=1),U=1,V=1) | |
| 522 | ||
| 523 | normsharp = Smode==1 ? tmp.unsharpmask(strength=int(str*100),radius=round(1.0+((ss_x+ss_y)/2.0)),threshold=0) | |
| 524 | \ : Smode==2 ? tmp.unsharp(strength=str,vary=((ss_x+ss_y)/2.0),varc=1,border=3,U=1,V=1) | |
| 525 | \ : Smode==3 ? VersionNumber() < 2.6 ? mt_lutxy(tmp, method, yexpr="x x y - "+string(str)+" * +",U=1,V=1) \ | |
| 526 | - | : mt_lutxy(tmp, method, yexpr="x x y - "+string(str)+" * +",use_expr=2,scale_inputs="floatf",U=1,V=1) |
| 526 | + | : mt_lutxy(tmp, method, yexpr="x x y - "+string(str)+" * +",use_expr=2,clamp_float=true,U=1,V=1) |
| 527 | \ : Smode==4 ? VersionNumber() < 2.6 ? mt_lutxy(tmp, method, yexpr="x y == x x x y - abs "+string(Szrp)+" / 1 "+string(Spwr)+" / ^ "+string(Szrp)+" * "+string(str)+" * x y - 2 ^ x y - 2 ^ " | |
| 528 | \ +string(SdmpLo)+" + / * x y - x y - abs / * 1 "+string(SdmpHi)+" 0 == 0 x y - abs "+string(SdmpHi)+" / 4 ^ ? + / + ?",U=1,V=1) \ | |
| 529 | : mt_lutxy(tmp, method, yexpr="x y == x x x y - abs "+string(Szrp) +" scalef / 1 "+string(Spwr)+" / ^ "+string(Szrp) +" scalef * "+string(str)+" * x y - 2 ^ x y - 2 ^ " | |
| 530 | \ +string(SdmpLo)+" scalef scalef + / * x y - x y - abs / * 1 "+string(SdmpHi)+" scalef 0 == 0 x y - abs "+string(SdmpHi)+" scalef / 4 ^ ? + / + ?",use_expr=2,U=1,V=1) | |
| 531 | \ : VersionNumber() < 2.6 ? mt_lutxy(tmp, method, yexpr="x y == x x x y - abs "+string(Szrp)+" / 1 "+string(Spwr)+" / ^ "+string(Szrp)+" * "+string(str)+" * x y - x y - abs / * x y - 2 ^ " | |
| 532 | \ +string(Szrp)+" 2 ^ "+string(SdmpLo)+" + * x y - 2 ^ "+string(SdmpLo)+" + "+string(Szrp)+" 2 ^ * / * 1 " | |
| 533 | \ +string(SdmpHi)+" 0 == 0 "+string(Szrp)+" "+string(SdmpHi)+" / 4 ^ ? + 1 "+string(SdmpHi)+" 0 == 0 x y - abs "+string(SdmpHi)+" / 4 ^ ? + / * + ?",U=1,V=1) \ | |
| 534 | : mt_lutxy(tmp, method, yexpr="x y == x x x y - abs "+string(Szrp)+" / 1 "+string(Spwr)+" / ^ "+string(Szrp)+" * "+string(str)+" * x y - x y - abs / * x y - 2 ^ " | |
| 535 | \ +string(Szrp)+" 2 ^ "+string(SdmpLo)+" + * x y - 2 ^ "+string(SdmpLo)+" + "+string(Szrp)+" 2 ^ * / * 1 " | |
| 536 | \ +string(SdmpHi)+" 0 == 0 "+string(Szrp)+" "+string(SdmpHi)+" / 4 ^ ? + 1 "+string(SdmpHi)+" 0 == 0 x y - abs "+string(SdmpHi)+" / 4 ^ ? + / * + ?",U=1,V=1,use_expr=2,scale_inputs="allf") | |
| 537 | ||
| 538 | ||
| 539 | ### LIMIT | |
| 540 | normal = mt_clamp(normsharp, bright_limit, dark_limit, overshoot, undershoot, U=1, V=1) | |
| 541 | second = mt_clamp(normsharp, bright_limit, dark_limit, overshoot2, undershoot2, U=1, V=1) | |
| 542 | zero = mt_clamp(normsharp, bright_limit, dark_limit, 0, 0, U=1, V=1) | |
| 543 | ||
| 544 | edge = edgemaskHQ ? mt_logic( tmp.mt_edge(thY1=0,thY2=255,"8 16 8 0 0 0 -8 -16 -8 4",U=1,V=1) | |
| 545 | \ ,tmp.mt_edge(thY1=0,thY2=255,"8 0 -8 16 0 -16 8 0 -8 4",U=1,V=1) | |
| 546 | \ ,"max",U=1,V=1) | |
| 547 | \ : tmp.mt_edge(thY1=0,thY2=255,mode="min/max",U=1,V=1) | |
| 548 | ||
| 549 | edge = edgemaskHQ ? VersionNumber() < 2.6 ? edge.mt_lut("x 128 / 0.86 ^ 255 *",U=1,V=1) \
| |
| 550 | : edge.mt_lut("x range_half / 0.86 ^ range_max *",use_expr=2,scale_inputs="floatf",U=1,V=1)
| |
| 551 | \ : VersionNumber() < 2.6 ? edge.mt_lut("x 32 / 0.86 ^ range_max *",U=1,V=1) \
| |
| 552 | : edge.mt_lut("x 32 scalef / 0.86 ^ range_max *",use_expr=2,scale_inputs="floatf",U=1,V=1)
| |
| 553 | ||
| 554 | limit1 = Lmode<0 ? normsharp.repair(tmp,abs(Lmode),-1) | |
| 555 | \ : Lmode==0 ? normsharp | |
| 556 | \ : Lmode==1 ? normal | |
| 557 | \ : Lmode==2 ? mt_merge(normsharp, normal, edge.mt_inflate(U=1,V=1), U=1, V=1) | |
| 558 | \ : Lmode==3 ? mt_merge(normal, zero, edge.mt_inflate(U=1,V=1), U=1, V=1) | |
| 559 | \ : mt_merge(second, normal, edge.mt_inflate(U=1,V=1), U=1, V=1) | |
| 560 | ||
| 561 | limit2 = edgemode==0 ? limit1 | |
| 562 | \ : edgemode==1 ? mt_merge(tmp,limit1,edge.mt_inflate(U=1,V=1).mt_inflate(U=1,V=1).removegrain(11,-1),U=1,V=1) | |
| 563 | \ : mt_merge(limit1,tmp,edge.mt_inflate(U=1,V=1).mt_inflate(U=1,V=1).removegrain(11,-1),U=1,V=1) | |
| 564 | ||
| 565 | ||
| 566 | ### SOFT | |
| 567 | sharpdiff = mt_makediff(tmp,limit2,U=1,V=1) | |
| 568 | sharpdiff = VersionNumber() < 2.6 ? mt_lutxy(sharpdiff,sharpdiff.removegrain(19,-1), | |
| 569 | \ "x 128 - abs y 128 - abs > y "+string(soft)+" * x "+string(100-soft)+" * + 100 / x ?",U=1,V=1) \ | |
| 570 | : mt_lutxy(sharpdiff,sharpdiff.removegrain(19,-1), | |
| 571 | - | \ "x range_half - abs y range_half - abs > y "+string(soft)+" * x "+string(100-soft)+" * + 100 / x ?",use_expr=2,scale_inputs="floatf",U=1,V=1) |
| 571 | + | \ "x range_half - abs y range_half - abs > y "+string(soft)+" * x "+string(100-soft)+" * + 100 / x ?",use_expr=2,clamp_float=true,U=1,V=1) |
| 572 | ||
| 573 | PP1 = soft==0 ? limit2 : mt_makediff(tmp,sharpdiff,U=1,V=1) | |
| 574 | ||
| 575 | ||
| 576 | ### SOOTHE | |
| 577 | diff = mt_makediff(tmp,PP1,U=1,V=1) | |
| 578 | diff2 = diff.temporalsoften(1,255,0,32,2) | |
| 579 | diff3 = VersionNumber() < 2.6 ? mt_lutxy(diff,diff2,"x 128 - y 128 - * 0 < x 128 - 100 / "+string(keep)+ | |
| 580 | \ " * 128 + x 128 - abs y 128 - abs > x "+string(keep)+" * y 100 "+string(keep)+" - * + 100 / x ? ?",U=1,V=1) \ | |
| 581 | : mt_lutxy(diff,diff2,"x range_half - y range_half - * 0 < x range_half - 100 / "+string(keep)+ | |
| 582 | - | \ " * range_half + x range_half - abs y range_half - abs > x "+string(keep)+" * y 100 "+string(keep)+" - * + 100 / x ? ?",use_expr=2,scale_inputs="floatf",U=1,V=1) |
| 582 | + | \ " * range_half + x range_half - abs y range_half - abs > x "+string(keep)+" * y 100 "+string(keep)+" - * + 100 / x ? ?",use_expr=2,clamp_float=true,U=1,V=1) |
| 583 | ||
| 584 | PP2 = soothe ? mt_makediff(tmp,diff3,U=1,V=1) : PP1 | |
| 585 | ||
| 586 | ||
| 587 | ### OUTPUT | |
| 588 | out = (dest_x != ox || dest_y != oy) ? tmp.mergeluma(PP2).spline36resize(dest_x,dest_y) | |
| 589 | \ : (ss_x > 1.0 || ss_y > 1.0) ? input.mergeluma(PP2.spline36resize(dest_x,dest_y)) | |
| 590 | \ : input.mergeluma(PP2) | |
| 591 | ||
| 592 | src = defined(source)==false ? blankclip | |
| 593 | \ : (dest_x != ox || dest_y != oy) ? source.spline36resize(dest_x,dest_y) | |
| 594 | \ : source | |
| 595 | in = (dest_x != ox || dest_y != oy) ? input.spline36resize(dest_x,dest_y) | |
| 596 | \ : input | |
| 597 | ||
| 598 | shrpD = mt_makediff(in,out,U=1,V=1) | |
| 599 | shrpL = VersionNumber() < 2.6 ? shrpD.repair(mt_makediff(in,src,U=1,V=1),1,-1,-1).mt_lutxy(shrpD,"x 128 - abs y 128 - abs < x y ?",U=1,V=1) \ | |
| 600 | : shrpD.repair(mt_makediff(in,src,U=1,V=1),1,-1,-1).mt_lutxy(shrpD,"x range_half - abs y range_half - abs < x y ?",use_expr=1,U=1,V=1) | |
| 601 | output = defined(source) ? mt_makediff(in,shrpL,U=2,V=2) | |
| 602 | \ : out | |
| 603 | ||
| 604 | output = edgemode!=-1 ? output | |
| 605 | \ : edge.spline36resize(dest_x,dest_y).greyscale() | |
| 606 | ||
| 607 | ||
| 608 | ### SHOW | |
| 609 | function LSFM_Show(clip input, clip output, string "version", string "defaults", | |
| 610 | \ float "strength", int "Smode", int "Smethod", int "kernel", | |
| 611 | \ string "preblur", bool "secure", string "source", | |
| 612 | \ int "Szrp", int "Spwr", float "SdmpLo", float "SdmpHi", | |
| 613 | \ int "Lmode", int "overshoot", int "undershoot", int "overshoot2", int "undershoot2", | |
| 614 | \ int "soft", bool "soothe", int "keep", | |
| 615 | \ int "edgemode", bool "edgemaskHQ", | |
| 616 | \ float "ss_x", float "ss_y", int "dest_x", int "dest_y", | |
| 617 | \ bool "show", int "screenW", int "screenH") | |
| 618 | {
| |
| 619 | resoW = screenW - 384 | |
| 620 | resoH = screenH | |
| 621 | ||
| 622 | inW = input.width() | |
| 623 | inH = input.height() | |
| 624 | outW = round( resoW / 4 ) * 4 | |
| 625 | outH = round( (outW * inH) / (4 * inW) ) * 4 | |
| 626 | scale = resoH - ( 2 * outH ) | |
| 627 | ||
| 628 | i = input.spline36resize(outW,outH) | |
| 629 | i = scale > 0 ? i.addborders(0,scale/4,0,scale/4) : i | |
| 630 | i = scale < 0 ? i.crop(0,-scale/4,0,scale/4) : i | |
| 631 | ||
| 632 | o = output.spline36resize(outW,outH) | |
| 633 | o = scale > 0 ? o.addborders(0,scale/4,0,scale/4) : o | |
| 634 | o = scale < 0 ? o.crop(0,-scale/4,0,scale/4) : o | |
| 635 | ||
| 636 | e = blankclip(input, width=384, height=resoH) | |
| 637 | e = e.SubTitle("LSFmod " + string(version) ,text_color=$FFFFFF,font="COURIER NEW",size=24,x=40,y=40)
| |
| 638 | e = e.SubTitle("DEFAULTS = " + string(defaults) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=100)
| |
| 639 | ||
| 640 | e = e.SubTitle("GENERAL:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=150)
| |
| 641 | e = e.SubTitle("--------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=160)
| |
| 642 | e = e.SubTitle("strength = " + string(strength) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=180)
| |
| 643 | e = e.SubTitle("Smode = " + string(Smode) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=190)
| |
| 644 | e = e.SubTitle("Smethod = " + string(Smethod) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=200)
| |
| 645 | e = e.SubTitle("kernel = " + string(kernel) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=210)
| |
| 646 | ||
| 647 | e = e.SubTitle("SPECIAL:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=250)
| |
| 648 | e = e.SubTitle("--------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=260)
| |
| 649 | e = e.SubTitle("preblur = " + string(preblur) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=280)
| |
| 650 | e = e.SubTitle("secure = " + string(secure) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=290)
| |
| 651 | e = e.SubTitle("source = " + string(source) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=300)
| |
| 652 | ||
| 653 | e = e.SubTitle("NONLINEAR SHARPENING:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=340)
| |
| 654 | e = e.SubTitle("---------------------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=350)
| |
| 655 | e = e.SubTitle("Szrp = " + string(Szrp) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=370)
| |
| 656 | e = e.SubTitle("Spwr = " + string(Spwr) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=380)
| |
| 657 | e = e.SubTitle("SdmpLo = " + string(SdmpLo) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=390)
| |
| 658 | e = e.SubTitle("SdmpHi = " + string(SdmpHi) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=400)
| |
| 659 | ||
| 660 | e = e.SubTitle("LIMITING:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=440)
| |
| 661 | e = e.SubTitle("---------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=450)
| |
| 662 | e = e.SubTitle("Lmode = " + string(Lmode) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=470)
| |
| 663 | e = e.SubTitle("overshoot = " + string(overshoot) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=480)
| |
| 664 | e = e.SubTitle("undershoot = " + string(undershoot) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=490)
| |
| 665 | e = e.SubTitle("overshoot2 = " + string(overshoot2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=500)
| |
| 666 | e = e.SubTitle("undershoot2 = " + string(undershoot2) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=510)
| |
| 667 | ||
| 668 | e = e.SubTitle("POST-PROCESSING:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=550)
| |
| 669 | e = e.SubTitle("----------------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=560)
| |
| 670 | e = e.SubTitle("soft = " + string(soft) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=580)
| |
| 671 | e = e.SubTitle("soothe = " + string(soothe) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=590)
| |
| 672 | e = e.SubTitle("keep = " + string(keep) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=600)
| |
| 673 | ||
| 674 | e = e.SubTitle("EDGES:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=640)
| |
| 675 | e = e.SubTitle("------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=650)
| |
| 676 | e = e.SubTitle("edgemode = " + string(edgemode) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=670)
| |
| 677 | e = e.SubTitle("edgemaskHQ = " + string(edgemaskHQ) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=680)
| |
| 678 | ||
| 679 | e = e.SubTitle("UPSAMPLING:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=720)
| |
| 680 | e = e.SubTitle("-----------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=730)
| |
| 681 | e = e.SubTitle("ss_x = " + string(ss_x) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=750)
| |
| 682 | e = e.SubTitle("ss_y = " + string(ss_y) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=760)
| |
| 683 | e = e.SubTitle("dest_x = " + string(dest_x) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=770)
| |
| 684 | e = e.SubTitle("dest_y = " + string(dest_y) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=780)
| |
| 685 | ||
| 686 | e = e.SubTitle("DEBUG:" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=820)
| |
| 687 | e = e.SubTitle("------" ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=830)
| |
| 688 | e = e.SubTitle("show = " + string(show) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=850)
| |
| 689 | e = e.SubTitle("screenW = " + string(screenW) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=860)
| |
| 690 | e = e.SubTitle("screenH = " + string(screenH) ,text_color=$FFFFFF,font="COURIER NEW",size=12,x=40,y=870)
| |
| 691 | ||
| 692 | debug = stackhorizontal( e , | |
| 693 | \ stackvertical( i.subtitle("Input",text_color=$FFFFFF,size=20,x=40,y=20) ,
| |
| 694 | \ o.subtitle("Output",text_color=$FFFFFF,size=20,x=40,y=20) )
| |
| 695 | \ ) | |
| 696 | ||
| 697 | return debug | |
| 698 | } | |
| 699 | ||
| 700 | output = defined(source) ? output.crop(0,4,-0,-4) : output | |
| 701 | ||
| 702 | output = sislumaonly ? output : sisphbd ? CombinePlanes(output,inclip,planes="YUV",sample_clip=inclip) : ytouv(inclip.utoy8(),inclip.vtoy8(),output) | |
| 703 | ||
| 704 | output = show==false ? output | |
| 705 | \ : LSFM_Show(inclip, output, version, defaults, | |
| 706 | \ strength, Smode, Smethod, kernel, | |
| 707 | \ preblur, secure, defined(source)?"defined":"undefined", | |
| 708 | \ Szrp, Spwr, SdmpLo, SdmpHi, | |
| 709 | \ Lmode, overshoot, undershoot, overshoot2, undershoot2, | |
| 710 | \ soft, soothe, keep, | |
| 711 | \ edgemode, edgemaskHQ, | |
| 712 | \ ss_x, ss_y, dest_x, dest_y, | |
| 713 | \ show, screenW, screenH) | |
| 714 | ||
| 715 | return output | |
| 716 | } |