[mythtv-commits] Ticket #12146: In progress recordings do not always have up to date size/duration
MythTV
noreply at mythtv.org
Sun May 18 01:21:03 UTC 2014
#12146: In progress recordings do not always have up to date size/duration
-----------------------------------------+-------------------------
Reporter: jyavenard | Owner: jpoet
Type: Developer Task | Status: new
Priority: minor | Milestone: unknown
Component: MythTV - Video Playback | Version: Unspecified
Severity: medium | Keywords:
Ticket locked: 0 |
-----------------------------------------+-------------------------
MythPlayer keeps internally the total number of frames of the video being
played and its duration.
Those two values will be updated when the position map is updated by the
decoder, when it finds an inconsistencies between the position being
played and its size.
When the position map is updated, the decoder will call back
MythPlayer::SetFileLength is called.
MythPlayer itself can force an update to the position map when calling
TranslatePositionFrameToMs or TranslatePositionMsToFrame.
this will call DecoderBase::TranslatePositionFrameToMs which in turn will
check that the position map has information required. If not it will force
a call to SyncPositionMap() which in turn will call back
MythPlayer::SetFileLength
There is an issue however, in that from time to time, a call to
TranslatePositionFrameToMs with a total frame count that is completely
inaccurate doesn't trigger a call to SyncPositionMap() which results in an
incorrect calculated value.
This cause failure to seek in an in progress recording (or last liveTV
program).
Why would the position map not be refreshed when you attempt to seek into
a position is the core issue.
Right now, I've added some workaround in places that required an up to
date value of MythPlayer::totalFrames: in MythPlayer::CalcMaxFFTime and
MythPlayer::FindFrame
but I feel that this is just a dirty work around, and that earlier call to
TranslatePositionFrameToMs and TranslatePositionFrameToMs should have
forced an update...
To test, attached is a patch that makes the backend records 3 minutes
recordings in liveTV.
To test, start liveTV and let it go until it jumps to the next program (it
will occur before 3 minutes). Make sure you are playing live (within a few
seconds of the actual end position). After about a minute rewind.
In MythPlayer::Rewind()
have a breakpoint on
{{{
float current = ComputeSecs(framesPlayed, true);
}}}
You can verify here that framesPlayed is superior to totalFrames , which
signal an inconsistency.
ComputeSecs calls TranslatePositionFrameToMs, which should force an update
to the position map. but it doesn't
--
Ticket URL: <https://code.mythtv.org/trac/ticket/12146>
MythTV <http://www.mythtv.org>
MythTV Media Center
More information about the mythtv-commits
mailing list