Edits in dtsc lib to only use optimized parsing if the file is merged.

This commit is contained in:
Erik Zandvliet 2013-07-22 11:36:53 +02:00
parent 6666cf22f0
commit c394a1a767

View file

@ -706,6 +706,9 @@ void DTSC::File::seekNext(){
return; return;
} }
clearerr(F); clearerr(F);
if ( !metadata.isMember("merged") || !metadata["merged"]){
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());
lastreadpos = ftell(F); lastreadpos = ftell(F);
@ -759,26 +762,28 @@ void DTSC::File::seekNext(){
}else{ }else{
jsonbuffer = JSON::fromDTMI(strbuffer); jsonbuffer = JSON::fromDTMI(strbuffer);
} }
int tempLoc = getBytePos(); if (metadata.isMember("merged") && metadata["merged"]){
char newHeader[20]; int tempLoc = getBytePos();
if (fread((void*)newHeader, 20, 1, F) == 1){ char newHeader[20];
if (memcmp(newHeader, DTSC::Magic_Packet2, 4) == 0){ if (fread((void*)newHeader, 20, 1, F) == 1){
seekPos tmpPos; if (memcmp(newHeader, DTSC::Magic_Packet2, 4) == 0){
tmpPos.seekPos = tempLoc; seekPos tmpPos;
tmpPos.trackID = ntohl(((int*)newHeader)[2]); tmpPos.seekPos = tempLoc;
if (selectedTracks.find(tmpPos.trackID) != selectedTracks.end()){ tmpPos.trackID = ntohl(((int*)newHeader)[2]);
tmpPos.seekTime = ((long long unsigned int)ntohl(((int*)newHeader)[3])) << 32; if (selectedTracks.find(tmpPos.trackID) != selectedTracks.end()){
tmpPos.seekTime += ntohl(((int*)newHeader)[4]); tmpPos.seekTime = ((long long unsigned int)ntohl(((int*)newHeader)[3])) << 32;
}else{ tmpPos.seekTime += ntohl(((int*)newHeader)[4]);
for (JSON::ArrIter it = getTrackById(jsonbuffer["trackid"].asInt())["keys"].ArrBegin(); it != getTrackById(jsonbuffer["trackid"].asInt())["keys"].ArrEnd(); it++){ }else{
if ((*it)["time"].asInt() > jsonbuffer["time"].asInt()){ for (JSON::ArrIter it = getTrackById(jsonbuffer["trackid"].asInt())["keys"].ArrBegin(); it != getTrackById(jsonbuffer["trackid"].asInt())["keys"].ArrEnd(); it++){
tmpPos.seekTime = (*it)["time"].asInt(); if ((*it)["time"].asInt() > jsonbuffer["time"].asInt()){
tmpPos.seekPos = (*it)["bpos"].asInt(); tmpPos.seekTime = (*it)["time"].asInt();
break; tmpPos.seekPos = (*it)["bpos"].asInt();
break;
}
} }
} }
currentPositions.insert(tmpPos);
} }
currentPositions.insert(tmpPos);
} }
} }
} }