Added pausemark support to DTSC::Stream and fixes several minor bugs.

This commit is contained in:
Thulinma 2012-09-03 12:22:40 +02:00
parent 9bf92add4f
commit 932c0e5b7b
3 changed files with 15 additions and 8 deletions

View file

@ -54,15 +54,16 @@ bool DTSC::Stream::parsePacket(std::string & buffer){
datapointertype = INVALID; datapointertype = INVALID;
if (buffers.front().isMember("data")){ if (buffers.front().isMember("data")){
datapointer = &(buffers.front()["data"].strVal); datapointer = &(buffers.front()["data"].strVal);
if (buffers.front().isMember("datatype")){
std::string tmp = buffers.front()["datatype"].asString();
if (tmp == "video"){datapointertype = VIDEO;}
if (tmp == "audio"){datapointertype = AUDIO;}
if (tmp == "meta"){datapointertype = META;}
}
}else{ }else{
datapointer = 0; datapointer = 0;
} }
if (buffers.front().isMember("datatype")){
std::string tmp = buffers.front()["datatype"].asString();
if (tmp == "video"){datapointertype = VIDEO;}
if (tmp == "audio"){datapointertype = AUDIO;}
if (tmp == "meta"){datapointertype = META;}
if (tmp == "pause_marker"){datapointertype = PAUSEMARK;}
}
buffer.erase(0, len+8); buffer.erase(0, len+8);
while (buffers.size() > buffercount){buffers.pop_back();} while (buffers.size() > buffercount){buffers.pop_back();}
advanceRings(); advanceRings();
@ -295,7 +296,11 @@ void DTSC::File::seekNext(){
currframe++; currframe++;
currtime = jsonbuffer["time"].asInt(); currtime = jsonbuffer["time"].asInt();
#if DEBUG >= 4 #if DEBUG >= 4
std::cerr << "Found a new frame " << currframe << " @ " << pos << "b/" << currtime << "s" << std::endl; if (frames[currframe] != pos){
std::cerr << "Found a new frame " << currframe << " @ " << pos << "b/" << currtime << "ms" << std::endl;
}else{
std::cerr << "Passing frame " << currframe << " @ " << pos << "b/" << currtime << "ms" << std::endl;
}
#endif #endif
frames[currframe] = pos; frames[currframe] = pos;
msframes[currframe] = currtime; msframes[currframe] = currtime;
@ -329,6 +334,7 @@ bool DTSC::File::seek_frame(int frameno){
seekNext(); seekNext();
if (jsonbuffer.isNull()){return false;} if (jsonbuffer.isNull()){return false;}
} }
seek_frame(frameno);
return true; return true;
} }
} }

View file

@ -56,6 +56,7 @@ namespace DTSC{
AUDIO, ///< Stream Audio data AUDIO, ///< Stream Audio data
VIDEO, ///< Stream Video data VIDEO, ///< Stream Video data
META, ///< Stream Metadata META, ///< Stream Metadata
PAUSEMARK, ///< Pause marker
INVALID ///< Anything else or no data available. INVALID ///< Anything else or no data available.
}; };

View file

@ -406,7 +406,7 @@ std::string & JSON::Value::toNetPacked(){
std::string packed = toPacked(); std::string packed = toPacked();
strVal.resize(packed.size() + 8); strVal.resize(packed.size() + 8);
//insert proper header for this type of data //insert proper header for this type of data
if (isMember("data")){ if (isMember("datatype")){
memcpy((void*)strVal.c_str(), "DTPD", 4); memcpy((void*)strVal.c_str(), "DTPD", 4);
}else{ }else{
memcpy((void*)strVal.c_str(), "DTSC", 4); memcpy((void*)strVal.c_str(), "DTSC", 4);