My To-Do List

Please note that the order here is arbitrary and does not denote relative priority.

  1. Need a good ghost removal filter as in TMPGE.

  2. Add the same options that Smart Deinterlacer has to Smart Bob.

  3. Rebuild all filters as Multithreaded DLL to reduce executable sizes.

  4. Enhance all appropriate filters to specify a frame range over which the filter is to be applied.

  5. Experiment with relative thresholds versus absolute ones. "The other thing that occurred to me is that there may be yet a better way to handle our thresholding. Instead of comparing pixel differences with a threshold, compare them with a percentage. The thinking is that differences within darker colors seem to be more visible than in the brighter realm. I have noticed that when applying both of my filters, the only visible video noise is in the solid, dark colors. (Actual blacks seem fine since I use the levels filter to make sure to remove black noise in letterboxed sources.) What do you think?" [Jim Casaburi]

  6. Look at funny behavior in the hue filter. High saturation values w/hue change cause weird results.

  7. Logo filter: "So, I set the encode range to start at #300, and end at #400 in VirtualDub. But, if I set it this way 'TITLE !' won't get rendered, because your filter would take the encode range start (which is frame #300) and ADD logo.vdf's starting frame to it (making the logo to appear at #600). This won't be a problem with single events, but if you use the logo.vdf for multiple sequences that are frame-accurate..."

  8. More Logo filter: "After typing start, duration, loop data, the end frame should be displayed for users too lazy to pull out the calculator."

  9. Possible UI enhancements for Logo: "Input file (untouched, except possibly adding another file selection for use in what we discussed).

    Transparent Color (untouched).

    Space and time coordinates, while at first glance it seems easier that it's a track-bar, in actuality it's more complex. You usually have to use a calculator to position the logo exactly as you want it, and the return is a number, so you have to play around with the track-bar to find the right position, instead of simply typing it in.

    Alpha blending (untouched, possibly using 255 as default value).

    Fade. Ok, this is the most perplexing, you should simply remove the "out end" field. You already have the starting frame and duration, so you should only need to type the fade-in and fade-out frames. If the duration is infinite and the fade-out is bigger than 0, then you simply begin fade-out right before the end of the video, according to the number of frames used, or even not fade at all (if someone does a fadeout on an infinite duration, it stands to reason he doesn't know what he's doing, and he could always set a duration for it to kick in)." [Yaron Gur]

  10. Enhance Smart to make it useful as a IVTC post-processor (i.e., so it doesn't touch good progressive frames but cleans up any interlaced ones that slipped through).

  11. Need a general color reduction filter. [Thomas Fowler]

  12. Need a general purpose color correction filter as seen in high-end software packages.

  13. Sharpen only in the horizontal direction for Unsharp?

  14. Add a "surrender" threshold to Telecide, such that for a given frame if the threshold is exceeded (indicating that the best match is very bad), that frame is output by doing cubic interpolate on one field, thereby avoiding passing through interlacing for frames whose progressive original cannot be recovered.

  15. Integrate Decimate into Telecide. The idea is to avoid the large intermediate file between the two. It might also be possible to have Telecide simply write a clever Avisynth script that Decimate could read. [Luke]

    Also: "What I'm wondering is. Would it be possible to convert the Decimate filter into a frame serving application that would read a telecide-output AVI file frame served by VirtualDub and then decimate the AVI and in turn frame serve it to another instance of VirtualDub (or any other program for that matter), thus allowing for IVTC to be done in one step." [Yaron Gur]

  16. Smart Smoother to affect only a defined range of hues (for example, to smooth just people's flesh).

  17. Speed improvement for Smart Smoother: "The thresholding selection used by smart smoother is a symmetric one, that is, if pixel B is sufficiently close to pixel A for B to affect A's output result, then the converse is true and A will be included in B's result. Given that we scan the bitmap in a fixed order, this means we can cut the complexity of the filter in half by doing half of the kernel in reverse. Right now, smart smoother uses a reverse mapping -- pixels are mapped backwards from the source area designed by the kernel onto the destination pixel. Split the kernel in half vertically; the part ahead of the desired point will be done as usual, except that we will also add a reverse map: for every pixel B that matches, we also add pixel A to B's accumulator. The result is that by the time we get to processing pixel B, all of the previously processed pixels A above it within the accept threshold will have already been added to the B accumulator, and again we need only consider the lower half.

    Now, there are some tricks to pulling this off, the least of which that the accumulators have to be 64-bit, and have to be distinct from the source pixels. I suspect that the filter is already thrashing the L1 cache by accessing 5+ rows simultaneously, so I'm not sure whether it would be slower or faster than the current implementation, given that it requires 2.5x the memory bandwidth. There is also the option of doing two or four pixels in parallel in the horizontal direction, although that is a low-level optimization rather than an algorithmic one, and only works well for large kernels.

    Also, can try other speedup tricks, such as using fixed window array." [Avery Lee]

  18. Configurable/savable defaults for Smart Resize.

  19. Need some good rank-order filters, e.g., structure-preserving median filter.

  20. More research on field-mode differencing.

  21. Need a filter to fix line dropouts, static noise, etc.

  22. Make a general-purpose noise generation filter. The main purpose is to create controlled noisy clips for testing denoising filters.

  23. Rebase Antiflicker filter's moving average at scene changes to avoid lightening or darkening the frames following a scene change.

  24. Spruce up my web site!