[FFmpeg-cvslog] r10127 - trunk/libavformat/matroskadec.c

aurel subversion
Fri Aug 17 00:01:54 CEST 2007


Author: aurel
Date: Fri Aug 17 00:01:54 2007
New Revision: 10127

Log:
Don't pre-scale default_duration to avoid precision loss in fps calculation.
closes Issue95


Modified:
   trunk/libavformat/matroskadec.c

Modified: trunk/libavformat/matroskadec.c
==============================================================================
--- trunk/libavformat/matroskadec.c	(original)
+++ trunk/libavformat/matroskadec.c	Fri Aug 17 00:01:54 2007
@@ -1089,7 +1089,7 @@ matroska_add_stream (MatroskaDemuxContex
                             if ((res = ebml_read_uint (matroska, &id,
                                                        &num)) < 0)
                                 break;
-                            track->default_duration = num/matroska->time_scale;
+                            track->default_duration = num;
                             break;
                         }
 
@@ -1100,7 +1100,7 @@ matroska_add_stream (MatroskaDemuxContex
                                                        &num)) < 0)
                                 break;
                             if (!track->default_duration)
-                            track->default_duration = 1000000000/(matroska->time_scale*num);
+                            track->default_duration = 1000000000/num;
                             break;
                         }
 
@@ -1407,7 +1407,7 @@ matroska_add_stream (MatroskaDemuxContex
                 uint64_t num;
                 if ((res = ebml_read_uint(matroska, &id, &num)) < 0)
                     break;
-                track->default_duration = num / matroska->time_scale;
+                track->default_duration = num;
                 break;
             }
 
@@ -2174,7 +2174,7 @@ matroska_read_header (AVFormatContext   
 
             if (track->default_duration)
                 av_reduce(&st->codec->time_base.num, &st->codec->time_base.den,
-                          track->default_duration, 1000, 30000);
+                          track->default_duration, 1000000000, 30000);
 
             if(extradata){
                 st->codec->extradata = extradata;
@@ -2283,7 +2283,7 @@ matroska_parse_block(MatroskaDemuxContex
         return res;
     }
     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 = AV_RB16(data);




More information about the ffmpeg-cvslog mailing list