Opened 12 years ago

Closed 12 years ago

#3805 closed defect (fixed)

MythDVD rew/ff issues in -fixes

Reported by: Doug Goldstein <cardoe@…> Owned by: skamithi
Priority: minor Milestone: unknown
Component: mythdvd Version: 0.20-fixes
Severity: medium Keywords:
Cc: skamithi Ticket locked: no

Description

Using the latest -fixes (svn r14146), the issue still persists that when you watch a DVD and hit rewind then pause (using Space or P) then hit Play (P), it will immediately begin to fast forward and there is no way to stop this. If you're watching a TV series, it will fast forward through the episode and continue on to the next while still fast forwarding. The only fix is to ssh in and kill mythfrontend.

I have been told that this has been fixed in trunk so the request is for the necessary changes to be backported to -fixes as well.

Attachments (1)

dvdrewindfix.diff (545 bytes) - added by maverik044 12 years ago.
dvd rewind fix

Download all attachments as: .zip

Change History (8)

comment:1 Changed 12 years ago by Anduin Withers

Owner: changed from Anduin Withers to skamithi

comment:2 Changed 12 years ago by skamithi

this is not fixed in svn either.

comment:3 Changed 12 years ago by maverik044

Same problem here with both DVD's and DVD ISO. Expect in my case it just freezes, no fast forward. I assume it is the same problem. I attached a log to #3887 which has now been closed as a duplicate.

comment:4 Changed 12 years ago by maverik044

Done some debugging, have found where the problem is occurring but not why yet. Thought I'd provide some progress in case the cause is more evident to someone else.

When the play speed returns to normal (NVP:DoPlay), NVP:DoFastForward is called. This function never returns and remains in fast forward. The function call sequence can be seen in the log extract below. NVP:DoFastForward calls AFD:DoFastForward which then calls Dec: DoFastForward?. Then we end up in AFD: SeekReset? and get stuck in the loop at the bottom of SeekReset? that deals with the variable skipFrames. In fact the call to GetFrame?(0) never returns.

NVP: DoPlay?: rate: 29.97 speed: 1 skip: 1 => new interval 33366 Set video sync frame interval to 33366 NVP: Stretch Factor 1, allow passthru AFD: DoFastForward?(18342 (18193), do discard frames) Dec: DoFastForward?(18342 (18193), do discard frames) AFD: SeekReset?(18343, 4294967295, do flush, do discard) AFD: SeekReset?() flushing VideoOutputXv?: DiscardFrames?(1) VideoBuffers::DiscardFrames?(1): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA VideoBuffers::DiscardFrames?(): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done() VideoBuffers::DiscardFrames?(1): AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done VideoOutputXv?: DiscardFrames?() 3: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -- done() DVDNAV_HOP_CHANNEL happened.

comment:5 Changed 12 years ago by maverik044

Here's the fix. Everywhere else normalframes is calculated (decoderbase.cpp and avformatdecoder.cpp), the line

normalframes = max(normalframes, 0)

is used. Turns out that that the calculation was yielding -1 which translates to 4294967295 as SeekReset? in avformatdecoder.cpp expects a uint. So it attempts to exactseek but ends up seeking towards the end of the file.

Changed 12 years ago by maverik044

Attachment: dvdrewindfix.diff added

dvd rewind fix

comment:6 Changed 12 years ago by skamithi

(In [14356]) Refs #3805. apply fix for rew/ffw issues with internal dvd player. patch from maverik044.

comment:7 Changed 12 years ago by skamithi

Resolution: fixed
Status: newclosed

(In [14357]) Closes #3805. apply [14356] to 0-20-fixes.

Note: See TracTickets for help on using tickets.