Wrong timing, comitted for fixing

This commit is contained in:
Oswald Auguste de Bruin 2013-09-11 16:41:46 +02:00 committed by Erik Zandvliet
parent 4d3e06277d
commit c28e34e482

View file

@ -30,7 +30,8 @@ namespace Converters{
std::string oggBuffer; std::string oggBuffer;
OGG::Page oggPage; OGG::Page oggPage;
//Read all of std::cin to oggBuffer //Read all of std::cin to oggBuffer
int mspft;//microseconds per frame
int mspfv;//microseconds per frame vorbis
JSON::Value DTSCOut; JSON::Value DTSCOut;
JSON::Value DTSCHeader; JSON::Value DTSCHeader;
DTSCHeader.null(); DTSCHeader.null();
@ -53,12 +54,20 @@ namespace Converters{
headerSeen += 1; headerSeen += 1;
headerWritten = false; headerWritten = false;
trackData[sNum].codec = THEORA; trackData[sNum].codec = THEORA;
//fix timerate here
//frn/frd = fps
theora::header tempHead;
tempHead.read(oggPage.getFullPayload(), oggPage.getPayloadSize());
mspft = (double)(tempHead.getFRD() * 1000) / tempHead.getFRN();
std::cerr << "Snr " << sNum << "=theora" << std::endl; std::cerr << "Snr " << sNum << "=theora" << std::endl;
}else if(memcmp(oggPage.getFullPayload()+1, "vorbis", 6) == 0){ }else if(memcmp(oggPage.getFullPayload()+1, "vorbis", 6) == 0){
headerSeen += 1; headerSeen += 1;
headerWritten = false; headerWritten = false;
std::cerr << "Snr " << sNum << "=vorbis" << std::endl; std::cerr << "Snr " << sNum << "=vorbis" << std::endl;
trackData[sNum].codec = VORBIS; trackData[sNum].codec = VORBIS;
vorbis::header tempHead;
tempHead.read(oggPage.getFullPayload(), oggPage.getPayloadSize());
mspfv = 1000/tempHead.getAudioSampleRate();
}else{ }else{
std::cerr << "Unknown Codec, " << std::string(oggPage.getFullPayload()+1, 6)<<" skipping" << std::endl; std::cerr << "Unknown Codec, " << std::string(oggPage.getFullPayload()+1, 6)<<" skipping" << std::endl;
continue; continue;
@ -78,7 +87,12 @@ namespace Converters{
DTSCOut["trackid"] = (long long)trackData[sNum].dtscID; DTSCOut["trackid"] = (long long)trackData[sNum].dtscID;
long long unsigned int temp = oggPage.getGranulePosition(); long long unsigned int temp = oggPage.getGranulePosition();
DTSCOut["granule"] = (long long)temp; DTSCOut["granule"] = (long long)temp;
DTSCOut["time"] = (long long)trackData[sNum].lastTime ++; DTSCOut["time"] = (long long)trackData[sNum].lastTime;
if (trackData[sNum].codec == THEORA){
trackData[sNum].lastTime += mspft;
}else{
trackData[sNum].lastTime += mspfv;
}
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.parseGranuleUpper(temp) == 0){ //granule mask equals zero when on keyframe if (trackData[sNum].idHeader.parseGranuleUpper(temp) == 0){ //granule mask equals zero when on keyframe