--- On Wed, 19/1/11, Niko Mikkilä nm@phnet.fi wrote:
From: Niko Mikkilä nm@phnet.fi Subject: Re: [vdr] Deinterlace video (was: Replacing aging VDR for DVB-S2) To: "VDR Mailing List" vdr@linuxtv.org Date: Wednesday, 19 January, 2011, 10:48 ke, 2011-01-19 kello 10:18 +0000, Stuart Morris kirjoitti:
My experience with an nVidia GT220 has been less than
perfect. It can
perform temporal+spatial+inverse_telecine on HD video
fast enough, but
my PC gets hot and it truly sucks at 2:2 pulldown
detection. The
result of this is when viewing progressive video
encoded as interlaced
field pairs (2:2 pulldown), deinterlacing keeps
cutting in and out
every second or so, ruining the picture quality.
I think VDPAU's inverse telecine is only meant for non-even cadences like 3:2. Motion-adaptive deinterlacing handles 2:2 pullup perfectly well, so try without IVTC.
IMHO the best way to go for a low power HTPC is to
decode in hardware
e.g. VDPAU, VAAPI, but output interlaced video to your
TV and let the
TV sort out deinterlacing and inverse telecine.
Well, flat panel TVs have similar deinterlacing algorithms as what VDPAU provides, but it would certainly be a nice alternative.
These are the key requirements to achieve interlaced
output:
Get the right modelines for your video card and TV.
Draw interlaced
fields to your frame buffer at field rate and in the
correct order
(top field first or bottom field first). When drawing
the field to the
frame buffer, do not overwrite the previous field
still in the frame
buffer. Maintain 1:1 vertical scaling (no vertical
scaling), so you
will need to switch video output to match the source
video height
(480i, 576i or 1080i). Display the frame buffer at
field rate and
synchronised to the graphics card vertical sync.
Finally, there is NO
requirement to synchronise fields, fields are always
displayed in the
same order they are written to the frame buffer, even
if occasionally
fields are dropped.
Interesting. Could you perhaps write full instructions to some suitable wiki and post the code that you used to do this? I'm sure others would like to try it too.
I can provide the simple bit of source code I have used to demonstrate the basic principle. Please see attached.