Added DTMI desync handling - no longer spams error messages, fixes issues faster.
This commit is contained in:
parent
5fff8825d9
commit
b88de8e395
1 changed files with 12 additions and 2 deletions
14
lib/dtsc.cpp
14
lib/dtsc.cpp
|
@ -35,6 +35,7 @@ unsigned int DTSC::Stream::getTime(){
|
||||||
/// \arg buffer The std::string buffer to attempt to parse.
|
/// \arg buffer The std::string buffer to attempt to parse.
|
||||||
bool DTSC::Stream::parsePacket(std::string & buffer){
|
bool DTSC::Stream::parsePacket(std::string & buffer){
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
|
static bool syncing = false;
|
||||||
if (buffer.length() > 8){
|
if (buffer.length() > 8){
|
||||||
if (memcmp(buffer.c_str(), DTSC::Magic_Header, 4) == 0){
|
if (memcmp(buffer.c_str(), DTSC::Magic_Header, 4) == 0){
|
||||||
len = ntohl(((uint32_t *)buffer.c_str())[1]);
|
len = ntohl(((uint32_t *)buffer.c_str())[1]);
|
||||||
|
@ -63,12 +64,21 @@ bool DTSC::Stream::parsePacket(std::string & buffer){
|
||||||
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();
|
||||||
|
syncing = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#if DEBUG >= 2
|
#if DEBUG >= 2
|
||||||
std::cerr << "Error: Invalid DTMI data: " << buffer.substr(0, 4) << std::endl;
|
if (!syncing){
|
||||||
|
std::cerr << "Error: Invalid DTMI data detected - re-syncing" << std::endl;
|
||||||
|
syncing = true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
buffer.erase(0, 1);
|
size_t magic_search = buffer.find(Magic_Packet);
|
||||||
|
if (magic_search == std::string::npos){
|
||||||
|
buffer.clear();
|
||||||
|
}else{
|
||||||
|
buffer.erase(0, magic_search);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue