Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
![]() |
#1 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
minsharp
so I just wrote my very first plugin, like, a simple one that can do a simple 3x3 blurring (linear or non-linear) or sharpening, designed for easy use
https://github.com/IFeelBloated/minsrp binary: https://github.com/IFeelBloated/minsrp/releases/tag/r4 supported formats: colorspace: YUV 4:4:4, Gray or RGB, subsampled stuff are not supported bitdepth: 8-16bits fixed point, 32bits floating point, half precision is not supported interlaced vids are not supported parameters: str, array that takes up to 3 elements, filtering strength of each plane, positive value = sharpening, negative value = blurring, default = 1.0 mode, filtering mode for each plane, 0 = no filtering 1 = gaussian filter (linear) 2 = median filter (non-linear) 3 = hybrid, picking the result of either gaussian or median, whichever has the smaller difference compared to the input clip default = 3 sigh, python scripting is 100000000 times easier than c++ filter writing.. LOG: r4: speed boost yet again, did some insane and incomprehensible opts, the expensive cost of frequent memory allocation is now gone. r3: code opt, speed boost r2: new parameter linear, linearity of sharpening amplification for each plane default = False r1 amplifies the sharpening/blurring difference linearly, and just looks dumb to me, the cheesy algorithm tends to over sharpen/blur stuff like.. whatever with linear = False, sharpening/blurring gets much smarter, it only filters where actually needs filtering with variable strength. set linear=True if you wanna linear amplification. non-linear amplification algorithm (shamelessly) copied from http://forum.doom9.org/showthread.ph...17#post1547017 Last edited by feisty2; 30th March 2016 at 16:43. |
![]() |
![]() |
![]() |
#2 | Link |
I'm Siri
Join Date: Oct 2012
Location: void
Posts: 2,633
|
r2:
new parameter linear, linearity of sharpening amplification for each plane default = False r1 amplifies the sharpening/blurring difference linearly, and just looks dumb to me, the cheesy algorithm tends to over sharpen/blur stuff like.. whatever with linear = False, sharpening/blurring gets much smarter, it only filters where actually needs filtering with variable strength. set linear=True if you wanna linear amplification. non-linear amplification algorithm (shamelessly) copied from http://forum.doom9.org/showthread.ph...17#post1547017 Last edited by feisty2; 24th March 2016 at 16:49. |
![]() |
![]() |
![]() |
#3 | Link |
Professional Code Monkey
Join Date: Jun 2003
Location: Kinnarps Chair
Posts: 2,503
|
Since you asked in the other thread. You code is basically written in the simplest way possible which is horrible for cpus to actually execute. All those small loads every pixel quickly adds up. You're also creating and destroying a vector every pixel. That also adds up.
For example: https://github.com/IFeelBloated/mins...Kernel.hpp#L92 You should use a fixed size 9 element array here. std::vector is just slow if you have a small fixed size allocation. The rest mostly comes down to the fact that you're doing many small loads. That's costly. For example see the recreated removegrains for examples on how to do things in a speedier way: https://github.com/vapoursynth/vapou...rainvs.cpp#L39 That code is a bit convoluted with macros and stuff but hopefully you'll get the idea.
__________________
VapourSynth - proving that scripting languages and video processing isn't dead yet |
![]() |
![]() |
![]() |
Thread Tools | Search this Thread |
Display Modes | |
|
|