View Full Version : PostProcessing :: DXVA vs. ffdshow
CiNcH
11th September 2007, 16:29
Hi Doom9 community,
I have got a GeForce 8600 and its pixelshader postprocessors when using DXVA are pretty impressive.
Still I have taken another look at ffdshow to see how this pure software postprocessor compares to those pixelshaders.
I have tested with interlaced DVB broadcasts (576i) with the following ffdshow settings:
Greedy 2 Frame Deinterlacer (DScaler Plugin)
Resize to 1440 x 1152 with Lanczos 2-tap filter (1.25 luma sharpening)
Those two filters do an amazing job. The only clearly visible artifact is the aliasing effect giving me a lot of "jaggies".
Does anybody have an idea on how to get rid of those jaggies? I want to do all this in realtime with a C2D CPU at 2.67 GHz so I am not really looking for an AviSynth script which performs at 1 fps. But AviSynth plugins/scripts of course are welcome as well if they solve the aliasing problem...
Thanks.
nm
11th September 2007, 20:03
Use yadif instead of Greedy2Frame. I don't know how it is done with ffdshow, but if yadif is not included in the package by default, it can be used through the AviSynth interface.
Or with MPlayer:
mplayer -vf yadif=1,scale=-2:1152 -sws 9 DVBCAP.ts
Yadif doesn't eliminate all jaggies, but it is quite good compared to other realtime software filters.
CiNcH
11th September 2007, 20:43
Thanks man, I have included the following AviSynth script into ffdshow to replace Greedy 2 Frame and placed it in front of the resizer:
LoadCplugin("C:\avisynth\yadif.dll")
Yadif(mode=1, order=1)
So chain is now Yadif -> Lanczos.
Image quality and especially deinterlacing seem perfect at first sight. As for jaggies, I will comment on that when I have some experience with different content.
Thanks so far. Would still be cool to have some further opinions or experiences on the topic.
CruNcher
11th September 2007, 21:30
@CiNcH
Yadif is not the same quality level that Nvidia/Ati new Motion Adaptive Deinterlacing (G8x/R600) takes place in (Geforce 7 PV1 allready was Yadif Quality in Realtime), it's not bad but can't beat the Hardware part of those 2 chips @ the moment in Speed and Quality. And the next Generation coming in November and beginning 2008 should be another step ahead so allready 2 Generations further then Yadif by then. Unfortunately we can't yet make use of this Hardware Deinterlacing @ all for the moment on the Encoding side, the're ways but those need alot of power (cpu) and are quiet useless for the target of Realtime Deinterlacing.
CiNcH
11th September 2007, 21:37
If I look at the result of a GeForce 8600's so-called "Advanced spatial-temporal de-interlacing", I really can't imagine how this job can be done any better...
Would be nice if there were some deinterlacers implemented as pixelshaders. The deinterlacers in current GPU's are also nothing but ordinary pixelshaders...
CruNcher
11th September 2007, 21:47
If I look at the result of a GeForce 8600's so-called "Advanced spatial-temporal de-interlacing", I really can't imagine how this job can be done any better...
Would be nice if there were some deinterlacers implemented as pixelshaders. The deinterlacers in current GPU's are also nothing but ordinary pixelshaders...
I couldn't test this Deinterlacing myselve yet so my results are based on the various HQV tests (SD/HD) and my Nvidia driver (Video based comparsion (internal) ) and so i know how (most probably) the Geforce 8 deinterlacing looks like as it was implemented allready as it seems as test for the Geforce 7 in 1 driver revision but was taken out later as it was to slow for older not so powerfull cards as the Geforce 7600 GS (mine) and the fast Deinterlacer Shader (PV1) has the Quality of Yadif and is Realtime in HD 60 fps, so i assumed based on this that Geforce 8 (PV2) is more advanced and Geforce 9 (PV3 rumor) might be even 1 step ahead of the Geforce 8 Shader implementation as their are still thinks for sure that can be improved, im gonna wait for Geforce 9 before moving to a new Generation either 8 or 9 so i can't supply any tests but i can for sure show results based on Geforce 7 vs Yadif and the Experimental Deinterlacer (most probably the one working in Geforce 8 now and might be the same in Geforce 9).
Sure it's Shader based but the Shader need power and not every Card has this (raw pixelshader power) so it's most unlikely that Nvidia will bring back the Geforce 8 Deinterlacer to the Geforce 7 series especialy not for low power cards as my Geforce 7600 GS, as it was allready to slow for that in Full SD resolution. And if the new Deinterlacer they might Develop on by now is coming for the Geforce 9 (is based on the Pure Video 3 rumors that floating arround) it won't be released for the (old) Geforce 8 cards (blocked by the driver) because of complexity concerns on the shader speed that different clocked cards offer or simply just by the fact that it's a PV3 feature and not PV2 (it's in Nvidias hand to decide this then, because PV2 is not PV3 and they don't need to supply the better Shader with a PV2 based product, that's also the reason i wait for the Geforce 9 and the first HQV tests ;) but it seems as the difference between Geforce 8 and 9 (based on the release time) are not as big as between Geforce 7 and 8 it could be quiet possible that a newer optimized Pixelshader based Motion Adaptive Deinterlacer would be available backwards for the Geforce 8 (but as i said if Nvidia plans PV3 and this New Deinterlacer then as a new feature it's most unlikely this gonna happen) but im 100% sure never ever for the Geforce 7 (PV1).
CiNcH
11th September 2007, 22:17
Is the GeForce 8 deinterlacer really so much ahead of the GeForce 7 deinterlacer? Would be interesting to see how much load they put on current shader units within the GPU's. How do these two compare in HQV?
CruNcher
11th September 2007, 22:52
Geforce 8 results are based on what seems to be an experimental Driver revision, where the Geforce 8 Deinterlacer seems to work (slow) for the Geforce 7
Test Pattern 1 (Diagonal filter) SD
Geforce 7 (PV1) = 30° pass 20° pass 10° fail
Yadif = 30° pass 20° pass 10° fail
Geforce 8 (PV2) = 30° pass 20° pass 10° pass
Flag Test (it's not possible to tell what are 100% so i give them numbers higher number means better quality, PV3 could be even better but based on the 3 only it looks like this @ the moment)
Geforce 7 (PV1) = 1
Yadif = 1
Geforce 8 (PV2) = 2
CiNcH
11th September 2007, 23:21
Great CruNcher, those are exactly the numbers I was looking for, very interesting, thanks. Seems Yadif is still a pretty nice compromise.
I just gave Greedy 2 Frame a try and it completely fails the HQV jaggies tests...
foxyshadis
12th September 2007, 02:47
Greedy comes from 2000 and requires a 500 mhz or so to use, you can't really expect too much. The main reason to use it is that it doubles as a deinterlacer and IVTC, which almost no other deinterlacer will bother with, so it's a set-and-forget filter. As you found, quality's somewhere just above a dumb bob on deinterlace.
I reeeeally wish there was an API to call out to the graphics card to do the post-processing. :(
Btw, try spline or 3/4-tap lanczos for somewhat sharper sizing, though 4 starts to get pronounced ringing. Someone needs to implement mp4 guy's or tritical's tools in a shader. ='D
Stebet
12th September 2007, 18:09
I reeeeally wish there was an API to call out to the graphics card to do the post-processing. :(
Is it possible somehow to actually use DXVA and grab it's output?
Something like DXVASource("videofile.avi")...
It'd certainly create some interesting opportunities if it was possible.
KoD
12th September 2007, 22:05
DXVA acceleration is only available when used for presentation on screen. In other words, your configuration is: video decoder that can use dxva -> video renderer for which your graphic card's driver supports dxva. You cannot pass frames to dxva and then request them back. You can use dxva acceleration only when the next stage is presentation on overaly and vmr renderers (and now evr).
This is also and explanation on what happens when you place another filter between your video decoder and the video renderer (ffdshow in raw processing mode or a subtitle filter like vsfilter): dxva can not be used in this case as the decoder does not pass frames directly to the video renderer.
Dxva calls are in fact implemented in your graphic card's drivers/hardware, and allowed only when you pass frames to the video driver for screen presentation.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.