Wrong timing, comitted for fixing
This commit is contained in:
parent
4d3e06277d
commit
c28e34e482
1 changed files with 16 additions and 2 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue