Fixed a few minor bugs in Multibitrate seeking.

This commit is contained in:
Erik Zandvliet 2013-05-30 11:46:26 +02:00
parent c1560deaa9
commit e5ab3e3698

View file

@ -729,6 +729,11 @@ void DTSC::File::seekNext(){
return; return;
} }
fseek(F,currentPositions.begin()->seekPos, SEEK_SET); fseek(F,currentPositions.begin()->seekPos, SEEK_SET);
if ( reachedEOF()){
strbuffer = "";
jsonbuffer.null();
return;
}
seek_time(currentPositions.begin()->seekTime + 1, currentPositions.begin()->trackID); seek_time(currentPositions.begin()->seekTime + 1, currentPositions.begin()->trackID);
fseek(F,currentPositions.begin()->seekPos, SEEK_SET); fseek(F,currentPositions.begin()->seekPos, SEEK_SET);
currentPositions.erase(currentPositions.begin()); currentPositions.erase(currentPositions.begin());
@ -819,7 +824,7 @@ bool DTSC::File::seek_time(int ms, int trackNo){
} }
bool foundPacket = false; bool foundPacket = false;
while ( !foundPacket){ while ( !foundPacket){
if (tmpPos.seekPos == getBytePosEOF()){ if (reachedEOF()){
return false; return false;
} }
//Seek to first packet after ms. //Seek to first packet after ms.
@ -854,6 +859,7 @@ bool DTSC::File::seek_time(int ms){
currentPositions.clear(); currentPositions.clear();
seekPos tmpPos; seekPos tmpPos;
for (std::set<int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){ for (std::set<int>::iterator it = selectedTracks.begin(); it != selectedTracks.end(); it++){
seek_bpos(0);
seek_time(ms,(*it)); seek_time(ms,(*it));
} }
return true; return true;
@ -881,8 +887,8 @@ bool DTSC::File::atKeyframe(){
} }
bool inHeader = false; bool inHeader = false;
for (JSON::ObjIter oIt = metadata["tracks"].ObjBegin(); oIt != metadata["tracks"].ObjEnd(); oIt++){ for (JSON::ObjIter oIt = metadata["tracks"].ObjBegin(); oIt != metadata["tracks"].ObjEnd(); oIt++){
for (JSON::ArrIter aIt = oIt->second["keybpos"].ArrBegin(); aIt != oIt->second["keybpos"].ArrEnd(); aIt++){ for (JSON::ArrIter aIt = oIt->second["keytime"].ArrBegin(); aIt != oIt->second["keytime"].ArrEnd(); aIt++){
if ((*aIt).asInt() == getBytePos()){ if ((*aIt).asInt() == jsonbuffer["time"].asInt()){
inHeader = true; inHeader = true;
break; break;
} }