Added extra needed functions to ogg lib

This commit is contained in:
Oswald Auguste de Bruin 2013-07-17 15:36:30 +02:00 committed by Thulinma
parent c3d116d3db
commit 5d85548360
2 changed files with 40 additions and 7 deletions

View file

@ -193,21 +193,35 @@ namespace OGG{
return segmentTableDeque; return segmentTableDeque;
} }
static void STerrMSG(){
std::cerr << "Segments too big, create a continue page" << std::endl;
}
bool Page::setSegmentTable(std::vector<unsigned int> layout){ bool Page::setSegmentTable(std::vector<unsigned int> layout){
unsigned int place = 0; unsigned int place = 0;
char table[255]; char table[255];
for (unsigned int i = 0; i < layout.size(); i++){ for (unsigned int i = 0; i < layout.size(); i++){
while (layout[i]>=255){ while (layout[i]>=255){
if (place >= 255) return false; if (place >= 255){
STerrMSG();
return false;
}
table[place] = 255; table[place] = 255;
layout[i] -= 255; layout[i] -= 255;
place++; place++;
} }
if (place >= 255) return false; if (place >= 255){
STerrMSG();
return false;
}
table[place] = layout[i]; table[place] = layout[i];
place++; place++;
} }
setSegmentTable(table,place); setSegmentTable(table,place);
dataSum=0;
for (unsigned int i = 0; i < layout.size(); i++){
dataSum += layout[i];
}
return true; return true;
} }
@ -418,4 +432,20 @@ namespace OGG{
int Page::getPayloadSize(){ int Page::getPayloadSize(){
return dataSum; return dataSum;
} }
void Page::clear(){
memset(data,0,27);
datasize = 0;
dataSum = 0;
codec = "";
segmentTableDeque.clear();
}
bool Page::setPayload(char* newData, unsigned int length){
if(!checkDataSize(27 + getPageSegments() + length)){//check if size available in memory
return false;
}
memcpy(data + 27 + getPageSegments(), newData, length);
return true;
}
} }

View file

@ -40,13 +40,16 @@ namespace OGG{
bool typeNone(); bool typeNone();
std::string toPrettyString(size_t indent = 0); std::string toPrettyString(size_t indent = 0);
void setInternalCodec(std::string myCodec); void setInternalCodec(std::string myCodec);
long unsigned int calcChecksum();
void clear();
bool setPayload(char* newData, unsigned int length);
private: private:
std::deque<unsigned int> segmentTableDeque; std::deque<unsigned int> segmentTableDeque;
long unsigned int calcChecksum(); char* data;//pointer to the beginning of the Page data
char* data; unsigned int datasize;//size of the complete page
unsigned int datasize; unsigned int dataSum;//size of the total segments
unsigned int dataSum;
bool checkDataSize(unsigned int size); bool checkDataSize(unsigned int size);
std::string codec; std::string codec;//codec in the page
}; };
} }