mirror of https://git.ffmpeg.org/ffmpeg.git
Don't pre-scale default_duration to avoid precision loss in fps calculation.
closes Issue95 Originally committed as revision 10127 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
aec783d42d
commit
2f3b419cf1
|
@ -1089,7 +1089,7 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
|
||||||
if ((res = ebml_read_uint (matroska, &id,
|
if ((res = ebml_read_uint (matroska, &id,
|
||||||
&num)) < 0)
|
&num)) < 0)
|
||||||
break;
|
break;
|
||||||
track->default_duration = num/matroska->time_scale;
|
track->default_duration = num;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1100,7 +1100,7 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
|
||||||
&num)) < 0)
|
&num)) < 0)
|
||||||
break;
|
break;
|
||||||
if (!track->default_duration)
|
if (!track->default_duration)
|
||||||
track->default_duration = 1000000000/(matroska->time_scale*num);
|
track->default_duration = 1000000000/num;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1407,7 +1407,7 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
|
||||||
uint64_t num;
|
uint64_t num;
|
||||||
if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
|
if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
|
||||||
break;
|
break;
|
||||||
track->default_duration = num / matroska->time_scale;
|
track->default_duration = num;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2174,7 +2174,7 @@ matroska_read_header (AVFormatContext *s,
|
||||||
|
|
||||||
if (track->default_duration)
|
if (track->default_duration)
|
||||||
av_reduce(&st->codec->time_base.num, &st->codec->time_base.den,
|
av_reduce(&st->codec->time_base.num, &st->codec->time_base.den,
|
||||||
track->default_duration, 1000, 30000);
|
track->default_duration, 1000000000, 30000);
|
||||||
|
|
||||||
if(extradata){
|
if(extradata){
|
||||||
st->codec->extradata = extradata;
|
st->codec->extradata = extradata;
|
||||||
|
@ -2283,7 +2283,7 @@ matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, int size,
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
if (duration == AV_NOPTS_VALUE)
|
if (duration == AV_NOPTS_VALUE)
|
||||||
duration = matroska->tracks[track]->default_duration;
|
duration = matroska->tracks[track]->default_duration / matroska->time_scale;
|
||||||
|
|
||||||
/* block_time (relative to cluster time) */
|
/* block_time (relative to cluster time) */
|
||||||
block_time = AV_RB16(data);
|
block_time = AV_RB16(data);
|
||||||
|
|
Loading…
Reference in New Issue