Ogg lib has new DTSC features
This commit is contained in:
parent
b85ceb9fc5
commit
f173ad0966
2 changed files with 58 additions and 0 deletions
50
lib/ogg.cpp
50
lib/ogg.cpp
|
@ -483,4 +483,54 @@ namespace OGG{
|
||||||
setPayload((char*)pageBuffer.c_str(), pageBuffer.size());
|
setPayload((char*)pageBuffer.c_str(), pageBuffer.size());
|
||||||
setCRCChecksum(calcChecksum());
|
setCRCChecksum(calcChecksum());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void headerPages::readDTSCHeader(JSON::Value meta){
|
||||||
|
//pages.clear();
|
||||||
|
parsedPages = "";
|
||||||
|
Page curOggPage;
|
||||||
|
srand (Util::getMS());//randomising with milliseconds from boot
|
||||||
|
std::vector<unsigned int> curSegTable;
|
||||||
|
DTSCID2OGGSerial.clear();
|
||||||
|
DTSCID2seqNum.clear();
|
||||||
|
//Creating ID headers for theora and vorbis
|
||||||
|
for ( JSON::ObjIter it = meta["tracks"].ObjBegin(); it != meta["tracks"].ObjEnd(); it ++) {
|
||||||
|
curOggPage.clear();
|
||||||
|
curOggPage.setVersion();
|
||||||
|
curOggPage.setHeaderType(2);//headertype 2 = Begin of Stream
|
||||||
|
curOggPage.setGranulePosition(0);
|
||||||
|
DTSCID2OGGSerial[it->second["trackid"].asInt()] = rand() % 0xFFFFFFFE +1; //initialising on a random not 0 number
|
||||||
|
curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[it->second["trackid"].asInt()]);
|
||||||
|
DTSCID2seqNum[it->second["trackid"].asInt()] = 0;
|
||||||
|
curOggPage.setPageSequenceNumber(DTSCID2seqNum[it->second["trackid"].asInt()]++);
|
||||||
|
curSegTable.clear();
|
||||||
|
curSegTable.push_back(it->second["IDHeader"].asString().size());
|
||||||
|
curOggPage.setSegmentTable(curSegTable);
|
||||||
|
curOggPage.setPayload((char*)it->second["IDHeader"].asString().c_str(), it->second["IDHeader"].asString().size());
|
||||||
|
curOggPage.setCRCChecksum(curOggPage.calcChecksum());
|
||||||
|
//std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
|
//pages.push_back(curOggPage);
|
||||||
|
parsedPages += std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
|
}
|
||||||
|
//Creating remaining headers for theora and vorbis
|
||||||
|
//for tracks in header
|
||||||
|
//create standard page with comment (empty) en setup header(init)
|
||||||
|
for ( JSON::ObjIter it = meta["tracks"].ObjBegin(); it != meta["tracks"].ObjEnd(); it ++) {
|
||||||
|
curOggPage.clear();
|
||||||
|
curOggPage.setVersion();
|
||||||
|
curOggPage.setHeaderType(0);//headertype 0 = normal
|
||||||
|
curOggPage.setGranulePosition(0);
|
||||||
|
curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[it->second["trackid"].asInt()]);
|
||||||
|
curOggPage.setPageSequenceNumber(DTSCID2seqNum[it->second["trackid"].asInt()]++);
|
||||||
|
curSegTable.clear();
|
||||||
|
curSegTable.push_back(it->second["CommentHeader"].asString().size());
|
||||||
|
curSegTable.push_back(it->second["init"].asString().size());
|
||||||
|
curOggPage.setSegmentTable(curSegTable);
|
||||||
|
std::string fullHeader = it->second["CommentHeader"].asString() + it->second["init"].asString();
|
||||||
|
curOggPage.setPayload((char*)fullHeader.c_str(),fullHeader.size());
|
||||||
|
curOggPage.setCRCChecksum(curOggPage.calcChecksum());
|
||||||
|
//std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
|
//pages.push_back(curOggPage);
|
||||||
|
parsedPages += std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,4 +54,12 @@ namespace OGG{
|
||||||
bool checkDataSize(unsigned int size);
|
bool checkDataSize(unsigned int size);
|
||||||
std::string codec;//codec in the page
|
std::string codec;//codec in the page
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class headerPages{
|
||||||
|
public:
|
||||||
|
void readDTSCHeader(JSON::Value meta);
|
||||||
|
std::map <long long unsigned int, unsigned int> DTSCID2OGGSerial;
|
||||||
|
std::map <long long unsigned int, unsigned int> DTSCID2seqNum;
|
||||||
|
std::string parsedPages;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue