From 8178aa9e80e41fb22d082e76980feaa54ff07296 Mon Sep 17 00:00:00 2001 From: Oswald Auguste de Bruin Date: Wed, 11 Sep 2013 14:14:40 +0200 Subject: [PATCH] midway commit for safety --- src/connectors/conn_http_progressive_ogg.cpp | 98 +++++------------- src/converters/dtsc2ogg.cpp | 100 ++++++------------- 2 files changed, 56 insertions(+), 142 deletions(-) diff --git a/src/connectors/conn_http_progressive_ogg.cpp b/src/connectors/conn_http_progressive_ogg.cpp index 9b9642f7..bca9dbf1 100644 --- a/src/connectors/conn_http_progressive_ogg.cpp +++ b/src/connectors/conn_http_progressive_ogg.cpp @@ -38,12 +38,14 @@ namespace Connector_HTTP { //OGG specific variables OGG::headerPages oggMeta; OGG::Page curOggPage; - //std::map > DTSCBuffer; + std::map > DTSCBuffer; //std::map prevGran; std::vector curSegTable; + long long int currID = 0; + long long int currGran = 0; long long int prevID = 0; long long int prevGran = 0; - std::string pageBuffer; + std::string sendBuffer; bool OggEOS = false; bool OggCont = false; @@ -164,88 +166,34 @@ namespace Connector_HTTP { oggMeta.readDTSCHeader(Strm.metadata); conn.SendNow((char*)oggMeta.parsedPages.c_str(), oggMeta.parsedPages.size()); progressive_has_sent_header = true; - prevID = Strm.getPacket()["trackid"].asInt(); - prevGran = Strm.getPacket()["granule"].asInt(); + //prevID = Strm.getPacket()["trackid"].asInt(); + //prevGran = Strm.getPacket()["granule"].asInt(); } //parse DTSC to Ogg here if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){ - long long int temp = Strm.getPacket()["trackid"].asInt(); - /*if((prevGran[temp] != Strm.getPacket()["granule"].asInt() || prevGran[temp] == -1) && DTSCBuffer[temp].size() != 0){ - curOggPage.readDTSCVector(DTSCBuffer[temp], oggMeta.DTSCID2OGGSerial[temp], oggMeta.DTSCID2seqNum[temp]); + currID = Strm.getPacket()["trackid"].asInt(); + currGran = Strm.getPacket()["granule"].asInt(); + if (prevID == 0){ + prevID == currID; + } + if (DTSCBuffer.count(currID) && !DTSCBuffer[currID].empty()){ + prevGran = DTSCBuffer[currID][0]["granule"].asInt(); + }else{ + prevGran = 0; + } + if ((prevGran != 0 && (prevGran == -1 || currGran != prevGran)) ){ + curOggPage.readDTSCVector(DTSCBuffer[currID], oggMeta.DTSCID2OGGSerial[currID], oggMeta.DTSCID2seqNum[currID]); conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize()); - DTSCBuffer[temp].clear(); - oggMeta.DTSCID2seqNum[temp] ++; - }*/ - if(Strm.getPacket()["trackid"].asInt()!=prevID || Strm.getPacket()["granule"].asInt()!=prevGran || Strm.getPacket()["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 #include +#include #include + #include #include #include @@ -13,89 +15,53 @@ 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; + std::cout << oggMeta.parsedPages;//outputting header pages //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; + std::map< long long int, std::vector > DTSCBuffer; + long long unsigned int prevGran; + long long int currID; + long long int currGran; + OGG::Page curOggPage; + 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 >::iterator it = DTSCBuffer.begin(); + it != DTSCBuffer.end(); + it++ + ){ + if (!DTSCBuffer[it->first].empty() && DTSCBuffer[it->first][0]["data"].asString() != ""){ + curOggPage.readDTSCVector(DTSCBuffer[it->first], oggMeta.DTSCID2OGGSerial[it->first], oggMeta.DTSCID2seqNum[it->first]); + std::cout << std::string((char*)curOggPage.getPage(), curOggPage.getPageSize()); + } + } + return 0; } }