Check keyTimingsMatch in DTSC
This commit is contained in:
parent
b19c642034
commit
4033f1d009
2 changed files with 33 additions and 0 deletions
32
lib/dtsc.cpp
32
lib/dtsc.cpp
|
@ -3332,6 +3332,38 @@ namespace DTSC{
|
|||
// return is by reference
|
||||
}
|
||||
|
||||
/// Returns true if the tracks idx1 and idx2 are keyframe aligned
|
||||
bool Meta::keyTimingsMatch(size_t idx1, size_t idx2) const {
|
||||
const DTSC::Track &t1 = tracks.at(idx1);
|
||||
const DTSC::Track &t2 = tracks.at(idx2);
|
||||
uint64_t t1Firstms = t1.track.getInt(t1.trackFirstmsField);
|
||||
uint64_t t2Firstms = t2.track.getInt(t2.trackFirstmsField);
|
||||
uint64_t firstms = t1Firstms > t2Firstms ? t1Firstms : t2Firstms;
|
||||
|
||||
uint64_t t1Lastms = t1.track.getInt(t1.trackFirstmsField);
|
||||
uint64_t t2Lastms = t2.track.getInt(t2.trackFirstmsField);
|
||||
uint64_t lastms = t1Lastms > t2Lastms ? t1Lastms : t2Lastms;
|
||||
|
||||
if (firstms > lastms) {
|
||||
WARN_MSG("Cannot check for timing alignment for tracks %zu and %zu: No overlap", idx1, idx2);
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t keyIdx1 = getKeyIndexForTime(idx1,firstms);
|
||||
uint32_t keyIdx2 = getKeyIndexForTime(idx2,firstms);
|
||||
|
||||
DTSC::Keys keys1(tracks.at(idx1).keys);
|
||||
DTSC::Keys keys2(tracks.at(idx2).keys);
|
||||
|
||||
while(true) {
|
||||
if (lastms < keys1.getTime(keyIdx1) || lastms < keys2.getTime(keyIdx2)) {return true;}
|
||||
if (keys1.getTime(keyIdx1) != keys2.getTime(keyIdx2)) {return false;}
|
||||
keyIdx1++;
|
||||
keyIdx2++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Parts::Parts(const Util::RelAccX &_parts) : parts(_parts){
|
||||
sizeField = parts.getFieldData("size");
|
||||
durationField = parts.getFieldData("duration");
|
||||
|
|
|
@ -450,6 +450,7 @@ namespace DTSC{
|
|||
size_t getPageNumberForTime(uint32_t idx, uint64_t time) const;
|
||||
size_t getPageNumberForKey(uint32_t idx, uint64_t keynumber) const;
|
||||
size_t getKeyNumForTime(uint32_t idx, uint64_t time) const;
|
||||
bool keyTimingsMatch(size_t idx1, size_t idx2) const;
|
||||
|
||||
const Util::RelAccX &parts(size_t idx) const;
|
||||
Util::RelAccX &keys(size_t idx);
|
||||
|
|
Loading…
Add table
Reference in a new issue