#include #include #include #include #include #include #include #include #include #include namespace Converters{ int DTSC2OGG(Util::Config & conf){ DTSC::File DTSCFile(conf.getString("filename")); //JSON::Value meta = DTSCFile.getMeta(); OGG::Page curOggPage; srand (Util::getMS());//randomising with milliseconds from boot std::vector curSegTable; char* curNewPayload; //std::map DTSCID2OGGSerial; //std::map DTSCID2seqNum; OGG::headerPages oggMeta; //Creating ID headers for theora and vorbis oggMeta.readDTSCHeader(DTSCFile.getMeta()); std::cout << oggMeta.parsedPages; //create DTSC in OGG pages DTSCFile.parseNext(); curSegTable.clear(); long long int prevID = DTSCFile.getJSON()["trackid"].asInt(); long long int prevGran = DTSCFile.getJSON()["granule"].asInt(); bool OggEOS = false; bool OggCont = false; bool IDChange = false; bool GranChange = false; std::string pageBuffer; while(DTSCFile.getJSON()){ if(DTSCFile.getJSON()["trackid"].asInt()!=prevID || DTSCFile.getJSON()["granule"].asInt()!=prevGran || DTSCFile.getJSON()["granule"].asInt() == -1){ curOggPage.clear(); curOggPage.setVersion(); if (OggCont){ curOggPage.setHeaderType(1);//headertype 1 = Continue Page }else if (OggEOS){ curOggPage.setHeaderType(4);//headertype 4 = end of stream }else{ curOggPage.setHeaderType(0);//headertype 0 = normal } curOggPage.setGranulePosition(prevGran); curOggPage.setBitstreamSerialNumber(oggMeta.DTSCID2OGGSerial[prevID]); curOggPage.setPageSequenceNumber(oggMeta.DTSCID2seqNum[prevID]++); if(!curOggPage.setSegmentTable(curSegTable)){ std::cerr << "Troubling segTable:"; for (unsigned int i = 0; i