/* 0x80"theora" */
skip_bits_long(&gb, 7 * 8);
- thp->version = get_bits_long(&gb, 24);
+ thp->version = get_bits(&gb, 24);
if (thp->version < 0x030100) {
av_log(s, AV_LOG_ERROR,
"Too old or unsupported Theora (%x)\n", thp->version);
skip_bits(&gb, 100);
if (thp->version >= 0x030200) {
- int width = get_bits_long(&gb, 24);
- int height = get_bits_long(&gb, 24);
+ int width = get_bits(&gb, 24);
+ int height = get_bits(&gb, 24);
if (width <= st->codecpar->width && width > st->codecpar->width - 16 &&
height <= st->codecpar->height && height > st->codecpar->height - 16) {
st->codecpar->width = width;
}
avpriv_set_pts_info(st, 64, timebase.num, timebase.den);
- st->sample_aspect_ratio.num = get_bits_long(&gb, 24);
- st->sample_aspect_ratio.den = get_bits_long(&gb, 24);
+ st->sample_aspect_ratio.num = get_bits(&gb, 24);
+ st->sample_aspect_ratio.den = get_bits(&gb, 24);
if (thp->version >= 0x030200)
skip_bits_long(&gb, 38);
if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) {
int seg;
+ int64_t pts;
duration = 1;
for (seg = os->segp; seg < os->nsegs; seg++) {
duration ++;
}
- os->lastpts = os->lastdts = theora_gptopts(s, idx, os->granule, NULL) - duration;
+ pts = theora_gptopts(s, idx, os->granule, NULL);
+ if (pts != AV_NOPTS_VALUE)
+ pts -= duration;
+ os->lastpts = os->lastdts = pts;
if(s->streams[idx]->start_time == AV_NOPTS_VALUE) {
s->streams[idx]->start_time = os->lastpts;
if (s->streams[idx]->duration > 0)