From 932c0e5b7b0e81d27c0f9f26957440264a5e02d9 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 3 Sep 2012 12:22:40 +0200 Subject: [PATCH] Added pausemark support to DTSC::Stream and fixes several minor bugs. --- lib/dtsc.cpp | 20 +++++++++++++------- lib/dtsc.h | 1 + lib/json.cpp | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp index d021c68d..aa82c9b5 100644 --- a/lib/dtsc.cpp +++ b/lib/dtsc.cpp @@ -54,15 +54,16 @@ bool DTSC::Stream::parsePacket(std::string & buffer){ datapointertype = INVALID; if (buffers.front().isMember("data")){ 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{ 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); while (buffers.size() > buffercount){buffers.pop_back();} advanceRings(); @@ -295,7 +296,11 @@ void DTSC::File::seekNext(){ currframe++; currtime = jsonbuffer["time"].asInt(); #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 frames[currframe] = pos; msframes[currframe] = currtime; @@ -329,6 +334,7 @@ bool DTSC::File::seek_frame(int frameno){ seekNext(); if (jsonbuffer.isNull()){return false;} } + seek_frame(frameno); return true; } } diff --git a/lib/dtsc.h b/lib/dtsc.h index ff591227..c4c578ac 100644 --- a/lib/dtsc.h +++ b/lib/dtsc.h @@ -56,6 +56,7 @@ namespace DTSC{ AUDIO, ///< Stream Audio data VIDEO, ///< Stream Video data META, ///< Stream Metadata + PAUSEMARK, ///< Pause marker INVALID ///< Anything else or no data available. }; diff --git a/lib/json.cpp b/lib/json.cpp index f5420d01..6a783bc4 100644 --- a/lib/json.cpp +++ b/lib/json.cpp @@ -406,7 +406,7 @@ std::string & JSON::Value::toNetPacked(){ std::string packed = toPacked(); strVal.resize(packed.size() + 8); //insert proper header for this type of data - if (isMember("data")){ + if (isMember("datatype")){ memcpy((void*)strVal.c_str(), "DTPD", 4); }else{ memcpy((void*)strVal.c_str(), "DTSC", 4);