mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
fixing frame_rate accuracy
Originally committed as revision 1652 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8a7b1b18e2
commit
0bf79c2fcd
@ -140,6 +140,8 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
|
||||
/* list of streams */
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
int gcd;
|
||||
|
||||
st = s->streams[i];
|
||||
fst = av_mallocz(sizeof(FFMStream));
|
||||
if (!fst)
|
||||
@ -156,7 +158,9 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
/* specific info */
|
||||
switch(codec->codec_type) {
|
||||
case CODEC_TYPE_VIDEO:
|
||||
put_be32(pb, (codec->frame_rate * 1000) / FRAME_RATE_BASE);
|
||||
gcd= av_gcd(FRAME_RATE_BASE, codec->frame_rate);
|
||||
put_be32(pb, FRAME_RATE_BASE / gcd);
|
||||
put_be32(pb, codec->frame_rate / gcd);
|
||||
put_be16(pb, codec->width);
|
||||
put_be16(pb, codec->height);
|
||||
put_be16(pb, codec->gop_size);
|
||||
@ -390,6 +394,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
/* read each stream */
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
char rc_eq_buf[128];
|
||||
int rate, scale;
|
||||
|
||||
st = av_mallocz(sizeof(AVStream));
|
||||
if (!st)
|
||||
@ -411,7 +416,9 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
/* specific info */
|
||||
switch(codec->codec_type) {
|
||||
case CODEC_TYPE_VIDEO:
|
||||
codec->frame_rate = ((int64_t)get_be32(pb) * FRAME_RATE_BASE) / 1000;
|
||||
scale= get_be32(pb);
|
||||
rate= get_be32(pb);
|
||||
codec->frame_rate = (rate * (int64_t)FRAME_RATE_BASE) / scale;
|
||||
codec->width = get_be16(pb);
|
||||
codec->height = get_be16(pb);
|
||||
codec->gop_size = get_be16(pb);
|
||||
|
Loading…
Reference in New Issue
Block a user