if ( (curreftime - lastrefvideotime) > 10000000LL
|| (curreftime - lastrefvideotime) < -10000000LL) //if pts jumps to big resync
{
- startoffset += curreftime - lastrefvideotime;
- lastrefaudiotime += curreftime - lastrefvideotime;
- //*rsync=true;
- offsetaudionotset = true;
- }
- }
- }
+ if ( (lastrefvideotime > 954400000000)
+ && (curreftime < 20000000))
+ {
+ rolloveroffset = startoffset;
+ //logger->debug("SSO", "Rollover detected, saving rolloveroffset at {}", rolloveroffset);
+ TELEM(16, rolloveroffset);
- lastrefvideotime = curreftime;
+ startoffset += curreftime - lastrefvideotime;
+ }
+ else
+ {
+ startoffset += curreftime - lastrefvideotime;
+ lastrefaudiotime += curreftime - lastrefvideotime;
+ //*rsync=true;
+ offsetaudionotset = true;
+ }
+ }
+ }
+ }
- return startoffset;
+ lastrefvideotime = curreftime;
+ return startoffset;
}
long long VideoOMX::SetStartAudioOffset(long long curreftime, bool* rsync)
if ( (curreftime - lastrefaudiotime) > 10000000LL
|| (curreftime - lastrefaudiotime) < -10000000LL) //if pts jumps to big resync
{
- startoffset += curreftime - lastrefaudiotime;
- lastrefvideotime += curreftime - lastrefaudiotime;
+ if (rolloveroffset)
+ {
+ //logger->debug("SSA", "Rollover!!! curreftime {} startoffset {} rolloveroffset {}, lastrefaudiotime {}",
+ // curreftime, startoffset, rolloveroffset, lastrefaudiotime);
+
+ rolloveroffset = 0;
+ TELEM(16, rolloveroffset);
+ }
+ else
+ {
+ startoffset += curreftime - lastrefaudiotime;
+ lastrefvideotime += curreftime - lastrefaudiotime;
//*rsync=true;
- offsetvideonotset = true;
+ offsetvideonotset = true;
+ }
+ }
+ else
+ {
+ // There hasn't been a big jump.
+ if (rolloveroffset) // let's stay in the previous system
+ {
+ lastrefaudiotime = curreftime;
+ return rolloveroffset;
+ }
}
}
}
return startoffset;
}
+
void VideoOMX::ResetTimeOffsets()
{
offsetnotset = true; //called from demuxer