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
|
||||
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]);
|
||||
conn.SendNow((char*)curOggPage.getPage(), curOggPage.getPageSize());
|
||||
DTSCBuffer[temp].clear();
|
||||
|
@ -168,11 +168,10 @@ namespace Connector_HTTP {
|
|||
if (Strm.lastType() == DTSC::PAUSEMARK){
|
||||
conn.close();
|
||||
}
|
||||
if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){
|
||||
//long long unsigned int prevID = Strm.getPacket()["trackid"].asInt();
|
||||
//if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){
|
||||
DTSCBuffer[temp].push_back(Strm.getPacket());
|
||||
prevGran[temp] = Strm.getPacket()["granule"].asInt();
|
||||
}
|
||||
//}
|
||||
}
|
||||
}else{
|
||||
Util::sleep(1);
|
||||
|
|
|
@ -69,7 +69,7 @@ namespace Converters{
|
|||
std::string pageBuffer;
|
||||
|
||||
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.setVersion();
|
||||
if (OggCont){
|
||||
|
@ -82,7 +82,13 @@ namespace Converters{
|
|||
curOggPage.setGranulePosition(prevGran);
|
||||
curOggPage.setBitstreamSerialNumber(DTSCID2OGGSerial[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.setCRCChecksum(curOggPage.calcChecksum());
|
||||
std::cout << std::string(curOggPage.getPage(), curOggPage.getPageSize());
|
||||
|
|
|
@ -83,7 +83,7 @@ namespace Converters{
|
|||
DTSCOut["time"] = (long long)trackData[sNum].lastTime ++;
|
||||
DTSCOut["data"] = std::string(oggPage.getFullPayload()+offset, (*it)); //segment content put in JSON
|
||||
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;
|
||||
}else{
|
||||
DTSCOut["interframe"] = 1;
|
||||
|
@ -133,8 +133,9 @@ namespace Converters{
|
|||
break;
|
||||
}
|
||||
case VORBIS:{
|
||||
std::cerr << "Parsing part of the vorbis header\n";
|
||||
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()){
|
||||
case 1:{
|
||||
std::cerr << "Vorbis ID header" << std::endl;
|
||||
|
@ -156,8 +157,12 @@ namespace Converters{
|
|||
trackData[sNum].parsedHeaders = true;
|
||||
break;
|
||||
}
|
||||
default:{
|
||||
std::cerr << "Unsupported header type for vorbis\n";
|
||||
}
|
||||
}
|
||||
}else{
|
||||
std::cerr << "Not a header??\n";
|
||||
//buffer vorbis
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue