Fixed ogg problems with sintel.ogv. Note that sintel.ogv was already slightly corrupt.
This commit is contained in:
parent
fcd697e6bb
commit
8099d035a7
3 changed files with 18 additions and 8 deletions
|
@ -160,7 +160,7 @@ namespace Connector_HTTP {
|
||||||
}
|
}
|
||||||
//parse DTSC to Ogg here
|
//parse DTSC to Ogg here
|
||||||
long long unsigned int temp = Strm.getPacket()["trackid"].asInt();
|
long long unsigned int temp = Strm.getPacket()["trackid"].asInt();
|
||||||
if(prevGran[temp] != Strm.getPacket()["granule"].asInt() && DTSCBuffer[temp].size() != 0){
|
if((prevGran[temp] != Strm.getPacket()["granule"].asInt() || prevGran[temp] == -1) && DTSCBuffer[temp].size() != 0){
|
||||||
curOggPage.readDTSCVector(DTSCBuffer[temp], oggMeta.DTSCID2OGGSerial[temp], oggMeta.DTSCID2seqNum[temp]);
|
curOggPage.readDTSCVector(DTSCBuffer[temp], oggMeta.DTSCID2OGGSerial[temp], oggMeta.DTSCID2seqNum[temp]);
|
||||||
conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize());
|
conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
DTSCBuffer[temp].clear();
|
DTSCBuffer[temp].clear();
|
||||||
|
@ -168,11 +168,10 @@ namespace Connector_HTTP {
|
||||||
if (Strm.lastType() == DTSC::PAUSEMARK){
|
if (Strm.lastType() == DTSC::PAUSEMARK){
|
||||||
conn.close();
|
conn.close();
|
||||||
}
|
}
|
||||||
if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){
|
//if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){
|
||||||
//long long unsigned int prevID = Strm.getPacket()["trackid"].asInt();
|
|
||||||
DTSCBuffer[temp].push_back(Strm.getPacket());
|
DTSCBuffer[temp].push_back(Strm.getPacket());
|
||||||
prevGran[temp] = Strm.getPacket()["granule"].asInt();
|
prevGran[temp] = Strm.getPacket()["granule"].asInt();
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
Util::sleep(1);
|
Util::sleep(1);
|
||||||
|
|
|
@ -69,7 +69,7 @@ namespace Converters{
|
||||||
std::string pageBuffer;
|
std::string pageBuffer;
|
||||||
|
|
||||||
while(DTSCFile.getJSON()){
|
while(DTSCFile.getJSON()){
|
||||||
if(DTSCFile.getJSON()["trackid"].asInt()!=prevID || DTSCFile.getJSON()["granule"].asInt()!=prevGran){
|
if(DTSCFile.getJSON()["trackid"].asInt()!=prevID || DTSCFile.getJSON()["granule"].asInt()!=prevGran || DTSCFile.getJSON()["granule"].asInt() == -1){
|
||||||
curOggPage.clear();
|
curOggPage.clear();
|
||||||
curOggPage.setVersion();
|
curOggPage.setVersion();
|
||||||
if (OggCont){
|
if (OggCont){
|
||||||
|
@ -82,7 +82,13 @@ namespace Converters{
|
||||||
curOggPage.setGranulePosition(prevGran);
|
curOggPage.setGranulePosition(prevGran);
|
||||||
curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[prevID]);
|
curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[prevID]);
|
||||||
curOggPage.setPageSequenceNumber(DTSCID2seqNum[prevID]++);
|
curOggPage.setPageSequenceNumber(DTSCID2seqNum[prevID]++);
|
||||||
curOggPage.setSegmentTable(curSegTable);
|
if(!curOggPage.setSegmentTable(curSegTable)){
|
||||||
|
std::cerr << "Troubling segTable:";
|
||||||
|
for (unsigned int i = 0; i<curSegTable.size(); i++){
|
||||||
|
std::cerr << " " << curSegTable[i];
|
||||||
|
}
|
||||||
|
std::cerr << std::endl;
|
||||||
|
}
|
||||||
curOggPage.setPayload((char*)pageBuffer.c_str(), pageBuffer.size());
|
curOggPage.setPayload((char*)pageBuffer.c_str(), pageBuffer.size());
|
||||||
curOggPage.setCRCChecksum(curOggPage.calcChecksum());
|
curOggPage.setCRCChecksum(curOggPage.calcChecksum());
|
||||||
std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||||
|
|
|
@ -83,7 +83,7 @@ namespace Converters{
|
||||||
DTSCOut["time"] = (long long)trackData[sNum].lastTime ++;
|
DTSCOut["time"] = (long long)trackData[sNum].lastTime ++;
|
||||||
DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON
|
DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON
|
||||||
if (trackData[sNum].codec == THEORA){
|
if (trackData[sNum].codec == THEORA){
|
||||||
if (trackData[sNum].idHeader.parseGranuleLower(temp) == 0){ //granule mask equals zero when on keyframe
|
if (trackData[sNum].idHeader.parseGranuleUpper(temp) == 0){ //granule mask equals zero when on keyframe
|
||||||
DTSCOut["keyframe"] = 1;
|
DTSCOut["keyframe"] = 1;
|
||||||
}else{
|
}else{
|
||||||
DTSCOut["interframe"] = 1;
|
DTSCOut["interframe"] = 1;
|
||||||
|
@ -133,8 +133,9 @@ namespace Converters{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VORBIS:{
|
case VORBIS:{
|
||||||
|
std::cerr << "Parsing part of the vorbis header\n";
|
||||||
vorbis::header vHead;
|
vorbis::header vHead;
|
||||||
if(vHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Theora header part
|
if(vHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Vorbis header part
|
||||||
switch(vHead.getHeaderType()){
|
switch(vHead.getHeaderType()){
|
||||||
case 1:{
|
case 1:{
|
||||||
std::cerr << "Vorbis ID header" << std::endl;
|
std::cerr << "Vorbis ID header" << std::endl;
|
||||||
|
@ -156,8 +157,12 @@ namespace Converters{
|
||||||
trackData[sNum].parsedHeaders = true;
|
trackData[sNum].parsedHeaders = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:{
|
||||||
|
std::cerr << "Unsupported header type for vorbis\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
std::cerr << "Not a header??\n";
|
||||||
//buffer vorbis
|
//buffer vorbis
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue