Fixed a bug with the endpos of multiple files.

This commit is contained in:
Erik Zandvliet 2013-07-23 15:54:11 +02:00
parent b907ade842
commit fe47c9597f
2 changed files with 10 additions and 5 deletions

View file

@ -507,6 +507,7 @@ DTSC::Stream::~Stream(){
DTSC::File::File(){ DTSC::File::File(){
F = 0; F = 0;
endPos = 0;
} }
DTSC::File::File(const File & rhs){ DTSC::File::File(const File & rhs){
@ -522,6 +523,7 @@ DTSC::File & DTSC::File::operator =(const File & rhs){
}else{ }else{
F = 0; F = 0;
} }
endPos = rhs.endPos;
strbuffer = rhs.strbuffer; strbuffer = rhs.strbuffer;
jsonbuffer = rhs.jsonbuffer; jsonbuffer = rhs.jsonbuffer;
metadata = rhs.metadata; metadata = rhs.metadata;
@ -552,6 +554,8 @@ DTSC::File::File(std::string filename, bool create){
fprintf(stderr, "Could not open file %s\n", filename.c_str()); fprintf(stderr, "Could not open file %s\n", filename.c_str());
return; return;
} }
fseek(F, 0, SEEK_END);
endPos = ftell(F);
//we now know the first 4 bytes are DTSC::Magic_Header and we have a valid file //we now know the first 4 bytes are DTSC::Magic_Header and we have a valid file
fseek(F, 4, SEEK_SET); fseek(F, 4, SEEK_SET);
@ -622,6 +626,8 @@ long long int DTSC::File::addHeader(std::string & header){
if (ret != 1){ if (ret != 1){
return 0; return 0;
} }
fseek(F, 0, SEEK_END);
endPos = ftell(F);
return writePos; //return position written at return writePos; //return position written at
} }
@ -681,11 +687,6 @@ void DTSC::File::readHeader(int pos){
} }
long int DTSC::File::getBytePosEOF(){ long int DTSC::File::getBytePosEOF(){
static long int endPos = 0;
if ( !endPos){
fseek(F, 0, SEEK_END);
endPos = ftell(F);
}
return endPos; return endPos;
} }
@ -923,6 +924,7 @@ bool DTSC::File::seek_time(int ms, int trackNo){
} }
} }
currentPositions.insert(tmpPos); currentPositions.insert(tmpPos);
fprintf(stderr,"Seek_time to %d on track %d, time %d on track %d found\n", ms, trackNo, tmpPos.seekTime,tmpPos.trackID);
} }
/// Attempts to seek to the given time in ms within the file. /// Attempts to seek to the given time in ms within the file.
@ -947,6 +949,8 @@ bool DTSC::File::seek_bpos(int bpos){
void DTSC::File::writePacket(std::string & newPacket){ void DTSC::File::writePacket(std::string & newPacket){
fseek(F, 0, SEEK_END); fseek(F, 0, SEEK_END);
fwrite(newPacket.c_str(), newPacket.size(), 1, F); //write contents fwrite(newPacket.c_str(), newPacket.size(), 1, F); //write contents
fseek(F, 0, SEEK_END);
endPos = ftell(F);
} }
void DTSC::File::writePacket(JSON::Value & newPacket){ void DTSC::File::writePacket(JSON::Value & newPacket){

View file

@ -117,6 +117,7 @@ namespace DTSC {
bool atKeyframe(); bool atKeyframe();
void selectTracks(std::set<int> & tracks); void selectTracks(std::set<int> & tracks);
private: private:
long int endPos;
void readHeader(int pos); void readHeader(int pos);
std::string strbuffer; std::string strbuffer;
JSON::Value jsonbuffer; JSON::Value jsonbuffer;