Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#6266 closed defect (invalid)

bug in vdpau advanced deinterlacing

Reported by: Andy Cohen Owned by: markk
Priority: minor Milestone: 0.22
Component: MythTV - Video Playback Version: head
Severity: medium Keywords: vdpau deinterlacing
Cc: Ticket locked: no

Description

I may have found a bug in VDPAU deinterlacing. For reference I am using a motherboard with integrated nvidia geforce 9400 graphics. Deinterlacing with Temporal (2x, hw) works fine, but Advanced (2x, hw) gives a slightly juddery image. These deinterlacing methods are selected by passing enable flags through vdp_video_mixer_set_feature_enables(). In the Temporal case, the flag to enable VDP_MIXER_FEATURE_DEINTERLACE_TEMPORAL is passed. In the Advanced case the flag for VDP_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL should be passed, but the code in util-vdpau.cpp actually passes BOTH of these flags. According to the Nvidia docs this should be OK: "When multiple de-interlacing options are requested and enabled, the back-end implementation chooses the best algorithm to apply." However it isn't OK, at least on this IGP---when I pass ONLY the flag to enable VDP_MIXER_FEATURE_DEINTERLACE_TEMPORAL_SPATIAL then I get a fine, non-juddery image, while passing both flags leads to the judder.

There doesn't seem to be much reason to pass both flags, so the simple fix is to pass only one flag or the other. A (trivial) patch to do this is attached.

Attachments (1)

util-vdpau.cpp.diff (276 bytes) - added by Andy Cohen 11 years ago.

Download all attachments as: .zip

Change History (5)

Changed 11 years ago by Andy Cohen

Attachment: util-vdpau.cpp.diff added

comment:1 Changed 11 years ago by Dibblah

Owner: changed from Isaac Richards to markk
Status: newassigned

comment:2 Changed 11 years ago by markk

Resolution: invalid
Status: assignedclosed

On 2 test systems here, if VDP_VIDEO_MIXER_FEATURE_DEINTERLACE_TEMPORAL is not set then VDPAU clearly uses bob deinterlacing. This is probably why you get smooth playback with your patch applied. I assume that the deinterlacing API is meant to be 'incremental'.

comment:3 Changed 11 years ago by jyavenard@…

Tested on a gigabyte GA-E7AUM-DS2H motherboard (9400M chipset) and it works fine as well with the default code.

Note that the 9400 chipset doesn't do Advanced 2X on HD material ; but works fine with SD.

comment:4 in reply to:  3 Changed 11 years ago by Andy Cohen

Replying to jyavenard@gmail.com:

Tested on a gigabyte GA-E7AUM-DS2H motherboard (9400M chipset) and it works fine as well with the default code.

Note that the 9400 chipset doesn't do Advanced 2X on HD material ; but works fine with SD.

Yes, I just couldn't understand why this board would not be capable of TEMPORAL_SPATIAL on HD material. The NVIDIA API seems quite clear that both flags are not necessary. But markk is absolutely right that it is just falling back to bob, so the API docs are just wrong.

Note: See TracTickets for help on using tickets.