Stole Oswald's commit.

Fixed progressive ogg glitches mostly.
Removed needless messages in ogg2dtsc.
This commit is contained in:
Thulinma 2013-09-03 16:52:16 +02:00
parent 90436e100d
commit 4fb1a65fa1
2 changed files with 5 additions and 15 deletions

View file

@ -159,7 +159,7 @@ namespace Connector_HTTP {
progressive_has_sent_header = true; progressive_has_sent_header = true;
} }
//parse DTSC to Ogg here //parse DTSC to Ogg here
long long unsigned int temp = Strm.getPacket()["trackid"].asInt(); long long int temp = Strm.getPacket()["trackid"].asInt();
if((prevGran[temp] != Strm.getPacket()["granule"].asInt() || prevGran[temp] == -1) && 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());

View file

@ -29,7 +29,6 @@ namespace Converters{
int OGG2DTSC(){ int OGG2DTSC(){
std::string oggBuffer; std::string oggBuffer;
OGG::Page oggPage; OGG::Page oggPage;
//netpacked
//Read all of std::cin to oggBuffer //Read all of std::cin to oggBuffer
JSON::Value DTSCOut; JSON::Value DTSCOut;
@ -50,7 +49,6 @@ namespace Converters{
//on succes, we handle one page //on succes, we handle one page
long unsigned int sNum = oggPage.getBitstreamSerialNumber(); long unsigned int sNum = oggPage.getBitstreamSerialNumber();
if (oggPage.typeBOS()){//defines a new track if (oggPage.typeBOS()){//defines a new track
std::cerr << "Begin "<< sNum << std::endl;
if (memcmp(oggPage.getFullPayload()+1, "theora", 6) == 0){ if (memcmp(oggPage.getFullPayload()+1, "theora", 6) == 0){
headerSeen += 1; headerSeen += 1;
headerWritten = false; headerWritten = false;
@ -62,7 +60,7 @@ namespace Converters{
std::cerr << "Snr " << sNum << "=vorbis" << std::endl; std::cerr << "Snr " << sNum << "=vorbis" << std::endl;
trackData[sNum].codec = VORBIS; trackData[sNum].codec = VORBIS;
}else{ }else{
std::cerr << "Unknown Codec, skipping" << std::endl; std::cerr << "Unknown Codec, " << std::string(oggPage.getFullPayload()+1, 6)<<" skipping" << std::endl;
continue; continue;
} }
trackData[sNum].dtscID = lastTrackID++; trackData[sNum].dtscID = lastTrackID++;
@ -104,11 +102,9 @@ namespace Converters{
case THEORA:{ case THEORA:{
theora::header tHead; theora::header tHead;
if(tHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Theora header part if(tHead.read(oggPage.getFullPayload()+offset, (*it))){//if the current segment is a Theora header part
std::cerr << "Theora Header Segment " << tHead.getHeaderType() << std::endl;
//fillDTSC header //fillDTSC header
switch(tHead.getHeaderType()){ switch(tHead.getHeaderType()){
case 0:{ //identification header case 0:{ //identification header
std::cerr << "Theora ID header found" << std::endl;
trackData[sNum].idHeader = tHead; trackData[sNum].idHeader = tHead;
DTSCHeader["tracks"][trackData[sNum].name]["height"] = (long long)tHead.getPICH(); DTSCHeader["tracks"][trackData[sNum].name]["height"] = (long long)tHead.getPICH();
DTSCHeader["tracks"][trackData[sNum].name]["width"] = (long long)tHead.getPICW(); DTSCHeader["tracks"][trackData[sNum].name]["width"] = (long long)tHead.getPICW();
@ -116,7 +112,6 @@ namespace Converters{
break; break;
} }
case 1: //comment header case 1: //comment header
std::cerr << "Theora comment header found" << std::endl;
DTSCHeader["tracks"][trackData[sNum].name]["CommentHeader"] = std::string(oggPage.getFullPayload()+offset, (*it)); DTSCHeader["tracks"][trackData[sNum].name]["CommentHeader"] = std::string(oggPage.getFullPayload()+offset, (*it));
break; break;
case 2:{ //setup header, also the point to start writing the header case 2:{ //setup header, also the point to start writing the header
@ -133,12 +128,10 @@ 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 Vorbis 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;
DTSCHeader["tracks"][trackData[sNum].name]["channels"] = (long long)vHead.getAudioChannels(); DTSCHeader["tracks"][trackData[sNum].name]["channels"] = (long long)vHead.getAudioChannels();
DTSCHeader["tracks"][trackData[sNum].name]["IDHeader"] = std::string(oggPage.getFullPayload()+offset, (*it)); DTSCHeader["tracks"][trackData[sNum].name]["IDHeader"] = std::string(oggPage.getFullPayload()+offset, (*it));
break; break;
@ -148,7 +141,6 @@ namespace Converters{
break; break;
} }
case 5:{ case 5:{
std::cerr << "Vorbis init header" << std::endl;
DTSCHeader["tracks"][trackData[sNum].name]["codec"] = "vorbis"; DTSCHeader["tracks"][trackData[sNum].name]["codec"] = "vorbis";
DTSCHeader["tracks"][trackData[sNum].name]["trackid"] = (long long)trackData[sNum].dtscID; DTSCHeader["tracks"][trackData[sNum].name]["trackid"] = (long long)trackData[sNum].dtscID;
DTSCHeader["tracks"][trackData[sNum].name]["type"] = "audio"; DTSCHeader["tracks"][trackData[sNum].name]["type"] = "audio";
@ -158,12 +150,11 @@ namespace Converters{
break; break;
} }
default:{ default:{
std::cerr << "Unsupported header type for vorbis\n"; std::cerr << "Unsupported header type for vorbis" << std::endl;
} }
} }
}else{ }else{
std::cerr << "Not a header??\n"; std::cerr << "Unknown Header" << std::endl;
//buffer vorbis
} }
break; break;
} }
@ -183,15 +174,14 @@ namespace Converters{
std::cout << DTSCHeader.toNetPacked(); std::cout << DTSCHeader.toNetPacked();
headerWritten = true; headerWritten = true;
} }
//write section buffer
//write section //write section
if (oggPage.typeEOS()){//ending page if (oggPage.typeEOS()){//ending page
std::cerr << oggPage.getBitstreamSerialNumber() << " ending" << std::endl;
//remove from trackdata //remove from trackdata
trackData.erase(sNum); trackData.erase(sNum);
} }
} }
} }
std::cerr << "DTSC file created succesfully" << std::endl;
return 0; return 0;
} }
} }