Stole Oswald's commit.
Fixed progressive ogg glitches mostly. Removed needless messages in ogg2dtsc.
This commit is contained in:
parent
90436e100d
commit
4fb1a65fa1
2 changed files with 5 additions and 15 deletions
|
@ -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());
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue