Skip to content

Commit

Permalink
Add functions for converting between pre- and post-cutlist frame numb…
Browse files Browse the repository at this point in the history
…ers.

Refs #8631.  These functions are not actually used anywhere yet.
  • Loading branch information
stichnot committed Apr 12, 2012
1 parent 6114ecd commit 769059b
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
60 changes: 60 additions & 0 deletions mythtv/libs/libmythtv/deletemap.cpp
Expand Up @@ -839,3 +839,63 @@ bool DeleteMap::IsSaved(void) const

return currentMap == savedMap;
}

uint64_t DeleteMap::TranslatePositionAbsToRel(const frm_dir_map_t &deleteMap,
uint64_t absPosition)
{
uint64_t subtraction = 0;
uint64_t startOfCutRegion = 0;
frm_dir_map_t::const_iterator i;
bool withinCut = false;
bool first = true;
for (i = deleteMap.constBegin(); i != deleteMap.constEnd(); ++i)
{
if (first)
withinCut = (i.value() == MARK_CUT_END);
first = false;
if (i.key() > absPosition)
break;
if (i.value() == MARK_CUT_START && !withinCut)
{
withinCut = true;
startOfCutRegion = i.key();
}
else if (i.value() == MARK_CUT_END && withinCut)
{
withinCut = false;
subtraction += (i.key() - startOfCutRegion);
}
}
if (withinCut)
subtraction += (absPosition - startOfCutRegion);
return absPosition - subtraction;
}

uint64_t DeleteMap::TranslatePositionRelToAbs(const frm_dir_map_t &deleteMap,
uint64_t relPosition)
{
uint64_t addition = 0;
uint64_t startOfCutRegion = 0;
frm_dir_map_t::const_iterator i;
bool withinCut = false;
bool first = true;
for (i = deleteMap.constBegin(); i != deleteMap.constEnd(); ++i)
{
if (first)
withinCut = (i.value() == MARK_CUT_END);
first = false;
if (i.value() == MARK_CUT_START && !withinCut)
{
withinCut = true;
startOfCutRegion = i.key();
if (relPosition + addition <= startOfCutRegion)
break;
}
else if (i.value() == MARK_CUT_END && withinCut)
{
withinCut = false;
addition += (i.key() - startOfCutRegion);
}
}
return relPosition + addition;
}
10 changes: 10 additions & 0 deletions mythtv/libs/libmythtv/deletemap.h
Expand Up @@ -66,6 +66,16 @@ class MTV_PUBLIC DeleteMap
bool IsTemporaryMark(uint64_t frame) const;
bool HasTemporaryMark(void) const;
uint64_t GetLastFrame(uint64_t total) const;
uint64_t TranslatePositionAbsToRel(uint64_t absPosition) const {
return TranslatePositionAbsToRel(m_deleteMap, absPosition);
}
uint64_t TranslatePositionRelToAbs(uint64_t relPosition) const {
return TranslatePositionRelToAbs(m_deleteMap, relPosition);
}
static uint64_t TranslatePositionAbsToRel(const frm_dir_map_t &deleteMap,
uint64_t absPosition);
static uint64_t TranslatePositionRelToAbs(const frm_dir_map_t &deleteMap,
uint64_t relPosition);

void TrackerReset(uint64_t frame, uint64_t total);
bool TrackerWantsToJump(uint64_t frame, uint64_t total, uint64_t &to);
Expand Down
6 changes: 6 additions & 0 deletions mythtv/libs/libmythtv/mythplayer.h
Expand Up @@ -381,6 +381,12 @@ class MTV_PUBLIC MythPlayer
virtual long long CalcMaxFFTime(long long ff, bool setjump = true) const;
long long CalcRWTime(long long rw) const;
virtual void calcSliderPos(osdInfo &info, bool paddedFields = false);
uint64_t TranslatePositionAbsToRel(uint64_t absPosition) {
return deleteMap.TranslatePositionAbsToRel(absPosition);
}
uint64_t TranslatePositionRelToAbs(uint64_t relPosition) {
return deleteMap.TranslatePositionRelToAbs(relPosition);
}

// Commercial stuff
void SetAutoCommercialSkip(CommSkipMode autoskip)
Expand Down

0 comments on commit 769059b

Please sign in to comment.