pts = theora_gptopts(s, idx, os->granule, NULL);
if (pts != AV_NOPTS_VALUE)
- pts -= duration;
+ pts = av_sat_sub64(pts, duration);
os->lastpts = os->lastdts = pts;
- if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {
+ if(s->streams[idx]->start_time == AV_NOPTS_VALUE && os->lastpts != AV_NOPTS_VALUE) {
s->streams[idx]->start_time = os->lastpts;
if (s->streams[idx]->duration > 0)
s->streams[idx]->duration -= s->streams[idx]->start_time;