From 0bf50edaea9f2f4da47a10e77afd9c74caec3008 Mon Sep 17 00:00:00 2001 From: Oswald Auguste de Bruin Date: Thu, 18 Jul 2013 15:58:35 +0200 Subject: [PATCH] Ogg 2 DTSC working lib --- lib/ogg.cpp | 26 +++++++++++++++++++------- lib/ogg.h | 7 ++++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/ogg.cpp b/lib/ogg.cpp index 4a678c22..4c9bbba8 100644 --- a/lib/ogg.cpp +++ b/lib/ogg.cpp @@ -198,6 +198,11 @@ namespace OGG{ } bool Page::setSegmentTable(std::vector layout){ + dataSum=0; + for (unsigned int i = 0; i < layout.size(); i++){ + dataSum += layout[i]; + } + std::cerr << "dataSum size: " << dataSum << std::endl; unsigned int place = 0; char table[255]; for (unsigned int i = 0; i < layout.size(); i++){ @@ -217,11 +222,8 @@ namespace OGG{ table[place] = layout[i]; place++; } + setPageSegments(place); setSegmentTable(table,place); - dataSum=0; - for (unsigned int i = 0; i < layout.size(); i++){ - dataSum += layout[i]; - } return true; } @@ -234,7 +236,11 @@ namespace OGG{ unsigned long int Page::getPageSize(){ return 27 + getPageSegments()+dataSum; } - + + char* Page::getPage(){ + return data; + } + char* Page::getFullPayload(){ return data + 27 + getPageSegments(); } @@ -433,18 +439,24 @@ namespace OGG{ return dataSum; } - void Page::clear(){ + bool Page::clear(){ + if(!checkDataSize(27)){//check if size available in memory + return false; + } memset(data,0,27); datasize = 0; dataSum = 0; codec = ""; + setMagicNumber(); segmentTableDeque.clear(); + return true; } bool Page::setPayload(char* newData, unsigned int length){ - if(!checkDataSize(27 + getPageSegments() + length)){//check if size available in memory + if(!checkDataSize(27 + getPageSegments() + length)){//check if size available in memory return false; } + std::cerr << "Payload length: " << length << std::endl; memcpy(data + 27 + getPageSegments(), newData, length); return true; } diff --git a/lib/ogg.h b/lib/ogg.h index 59ab4947..4987484e 100644 --- a/lib/ogg.h +++ b/lib/ogg.h @@ -31,8 +31,10 @@ namespace OGG{ std::deque & getSegmentTableDeque(); bool setSegmentTable(std::vector layout); void setSegmentTable(char* newVal, unsigned int length); + + char* getPage();//returns complete page with header unsigned long int getPageSize(); - char* getFullPayload(); + char* getFullPayload();//returns all segments in the page int getPayloadSize(); bool typeBOS(); bool typeEOS(); @@ -41,8 +43,7 @@ namespace OGG{ std::string toPrettyString(size_t indent = 0); void setInternalCodec(std::string myCodec); long unsigned int calcChecksum(); - void clear(); - + bool clear(); bool setPayload(char* newData, unsigned int length); private: std::deque segmentTableDeque;