1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-07-11 14:30:22 +02:00

oggtheora: Port changes from oggvorbis timestamp handling.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer
2012-05-04 22:54:35 +02:00
parent fe5c5bccce
commit b18c9f1eb0

View File

@ -162,26 +162,21 @@ static int theora_packet(AVFormatContext *s, int idx)
the total duration to the page granule to find the encoder delay and the total duration to the page granule to find the encoder delay and
set the first timestamp */ set the first timestamp */
if (!os->lastpts) { if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {
int seg; int seg;
uint8_t *last_pkt = os->buf + os->pstart;
uint8_t *next_pkt = last_pkt;
int first_duration = 0;
duration = 0; duration = 1;
for (seg = 0; seg < os->nsegs; seg++) { for (seg = os->segp; seg < os->nsegs; seg++) {
if (os->segments[seg] < 255) { if (os->segments[seg] < 255)
if (!duration) duration ++;
first_duration = 1;
duration++;
last_pkt = next_pkt + os->segments[seg];
}
next_pkt += os->segments[seg];
} }
os->lastpts = os->lastdts = theora_gptopts(s, idx, os->granule, NULL) - duration; os->lastpts = os->lastdts = theora_gptopts(s, idx, os->granule, NULL) - duration;
s->streams[idx]->start_time = os->lastpts + first_duration; if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {
if (s->streams[idx]->duration) s->streams[idx]->start_time = os->lastpts;
s->streams[idx]->duration -= s->streams[idx]->start_time; if (s->streams[idx]->duration)
s->streams[idx]->duration -= s->streams[idx]->start_time;
}
} }
/* parse packet duration */ /* parse packet duration */