diff --git a/lib/ogg.cpp b/lib/ogg.cpp index 52a112e1..8064b59f 100644 --- a/lib/ogg.cpp +++ b/lib/ogg.cpp @@ -456,5 +456,31 @@ namespace OGG{ } memcpy(data + 27 + getPageSegments(), newData, length); return true; - } + } + + void Page::readDTSCVector(std::vector <JSON::Value> DTSCVec, unsigned int serial, unsigned int sequence){ + clear(); + setVersion(); + if (DTSCVec[0]["OggCont"]){ + setHeaderType(1);//headertype 1 = Continue Page + }else if (DTSCVec[0]["OggEOS"]){ + setHeaderType(4);//headertype 4 = end of stream + }else{ + setHeaderType(0);//headertype 0 = normal + } + setGranulePosition(DTSCVec[0]["granule"].asInt()); + setBitstreamSerialNumber(serial); + setPageSequenceNumber(sequence); + + std::vector<unsigned int> curSegTable; + std::string pageBuffer; + + for (unsigned int i = 0; i < DTSCVec.size(); i++){ + curSegTable.push_back(DTSCVec[i]["data"].asString().size()); + pageBuffer += DTSCVec[i]["data"].asString(); + } + setSegmentTable(curSegTable); + setPayload((char*)pageBuffer.c_str(), pageBuffer.size()); + setCRCChecksum(calcChecksum()); + } } diff --git a/lib/ogg.h b/lib/ogg.h index 4987484e..4797c6f4 100644 --- a/lib/ogg.h +++ b/lib/ogg.h @@ -5,6 +5,7 @@ #include"dtsc.h" #include "theora.h" #include "vorbis.h" +#include "json.h" namespace OGG{ class Page{ @@ -31,7 +32,6 @@ namespace OGG{ std::deque<unsigned int> & getSegmentTableDeque(); bool setSegmentTable(std::vector<unsigned int> layout); void setSegmentTable(char* newVal, unsigned int length); - char* getPage();//returns complete page with header unsigned long int getPageSize(); char* getFullPayload();//returns all segments in the page @@ -45,6 +45,7 @@ namespace OGG{ long unsigned int calcChecksum(); bool clear(); bool setPayload(char* newData, unsigned int length); + void readDTSCVector(std::vector <JSON::Value> DTSCVec, unsigned int serial, unsigned int sequence); private: std::deque<unsigned int> segmentTableDeque; char* data;//pointer to the beginning of the Page data