Opened 17 years ago
Closed 17 years ago
#3805 closed defect (fixed)
MythDVD rew/ff issues in -fixes
Reported by: | 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)
Change History (8)
comment:1 Changed 17 years ago by
Owner: | changed from Anduin Withers to skamithi |
---|
comment:2 Changed 17 years ago by
comment:3 Changed 17 years ago by
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 17 years ago by
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 17 years ago by
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.
this is not fixed in svn either.