Opened 8 years ago

Closed 8 years ago

Last modified 8 years ago

#9719 closed Bug Report - General (Works for me)

Cutlist editing doesn't update displayed video frame with yadif/greedyhighmotion filters when seeking new stream positions

Reported by: mpc_mythtv@… Owned by: markk
Priority: minor Milestone: unknown
Component: MythTV - Video/OSD Rendering Version: 0.24-fixes
Severity: medium Keywords:
Cc: Ticket locked: no

Description

Hi Myth-Experts!

The displayed video frame is not updated when using Yadif/GreedyHighMotion? filters, except at aspect ratio changes. The displayed frame updates correctly with no filter, kernel or linear blend.

At aspect-ratio changes, the updated from is from before the aspect change.

I'd hazard a guess that this is due to the multi-frame-processing nature of yadif/greedyhighmotion not having sufficient frames available to return a valid deinterlaced frame.

On my setup, yadif looks noticeably better for sport playback, but it makes exact advert cutting pretty painful - it is a relatively deep part of the setup options to toggle yadif-none.

This isn't a new phenomenon with 0.24. I think it has been present since at least 0.22 (binary distributions from sniderpad and others)

Setup:

Locally built 0.24-fixes as of 9/April, OSX 10.6.7, MacMini?, Intel GMA 950, QT&OpenGL, UK-Freeview recording in standard definition.

Other information:

I made a small mod to filter_yadif.c (replacing HAVE_MMX with HAVE_MMX_DISABLED) to allow it to compile without MMX as this fails on OSX due to register pressure, but same non-updating behaviour is seen with the stock GreedyHighMotion? filter.

From the '-v most' logging around the cutlist left-right seeks:

Works (KernelDeInt)

2011-04-09 21:13:49.304 AFD: DoFastForward(1752 (1728), do discard frames)
2011-04-09 21:13:49.305 Dec: DoFastForward(1752 (1728), do discard frames)
2011-04-09 21:13:49.305 Dec: FindPosition(1752, search not adjusted) --> [145:1752(22063118)]
2011-04-09 21:13:49.305 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): Seek(22063118,SEEK_SET,unlocked)
2011-04-09 21:13:49.305 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): Seek(): rbrpos: 0 rbwpos: 0
                        readpos: 21827598 internalreadpos: 21729294
2011-04-09 21:13:49.305 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): ResetReadAhead(internalreadpos = 21729294->22063118)
2011-04-09 21:13:49.305 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): CalcReadAheadThresh(15192 Kb)
                         -> threshhold(512 KB) min read(32 KB) blk size(960 KB)
2011-04-09 21:13:49.305 AFD: SeekReset(1752, 0, do flush, do discard)
2011-04-09 21:13:49.305 AFD: SeekReset() flushing
2011-04-09 21:13:49.306 VideoBuffers::DiscardFrames(1): AAAAAAAAAAAAAAAAUAAAAAAAAAAAAAA
2011-04-09 21:13:49.306 VideoBuffers::DiscardFrames(): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done()
2011-04-09 21:13:49.306 VideoBuffers::DiscardFrames(1): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done
2011-04-09 21:13:49.307 Player(5): ClearAfterSeek(0)


Fails (GreedyHDeint)

2011-04-09 21:16:00.716 AFD: DoFastForward(2066 (2042), do discard frames)
2011-04-09 21:16:00.716 Dec: DoFastForward(2066 (2042), do discard frames)
2011-04-09 21:16:00.716 Dec: FindPosition(2066, search not adjusted) -->
                        [171:2064(26357774),172:2076(26490894)]
2011-04-09 21:16:00.716 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): Seek(26357774,SEEK_SET,unlocked)
2011-04-09 21:16:00.716 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): Seek(): rbrpos: 0 rbwpos: 0
                        readpos: 26161166 internalreadpos: 26030094
2011-04-09 21:16:00.717 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): ResetReadAhead(internalreadpos = 26030094->26357774)
2011-04-09 21:16:00.717 RingBuf(/mnt/d5/tv/1004_20110408205500.mpg): CalcReadAheadThresh(15192 Kb)
                         -> threshhold(512 KB) min read(32 KB) blk size(992 KB)
2011-04-09 21:16:00.717 AFD: SeekReset(2064, 2, do flush, do discard)
2011-04-09 21:16:00.717 AFD: SeekReset() flushing
2011-04-09 21:16:00.717 VideoBuffers::DiscardFrames(1): AAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA
2011-04-09 21:16:00.717 VideoBuffers::DiscardFrames(): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done()
2011-04-09 21:16:00.717 VideoBuffers::DiscardFrames(1): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done
2011-04-09 21:16:00.729 Player(6): ClearAfterSeek(0)

As it has been around a while, I guess it isn't so easy to fix, but I couldn't find an earlier ticket about this. A minor niggle in a great program I've been using for many years now.

Thanks a lot for reading this far!

Cheers,

Mark

Change History (5)

comment:1 Changed 8 years ago by mpc_mythtv@…

Forgot to mention - this also happens when jumping forward/backward when the stream is paused.

Cheers,

Mark

comment:2 Changed 8 years ago by gavin@…

I have also seen this, but only with the GreedyHighMotion? filter. Yadif works well for me. I think you are right about the additional frame needed by the filter. When jumping around in the timeline for the cutlist editor, you catch a momentary glimpse of the correct underlying frame followed by a static frame that never changes, making editing completely impossible.

I find GreedyHighMotion? to be a much better quality delinterlacer than Yadif (especially for mouth and lip motion), and would prefer to use it if it was fixed in the editor.

Gav

comment:3 Changed 8 years ago by markk

Status: newinfoneeded_new

I can't reproduce this in master when either editing or pausing and skipping. Can anyone running master confirm/deny?

comment:4 Changed 8 years ago by robertm

Resolution: Works for me
Status: infoneeded_newclosed

No response to request for info.

comment:5 Changed 8 years ago by krt@…

I get what is described by the OP, but have no deinterlacing selected.

Note: See TracTickets for help on using tickets.