[vlc-commits] demux: mp4: use timescale as rate

Francois Cartegnie git at videolan.org
Mon May 26 19:46:58 CEST 2014


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon May 26 19:43:37 2014 +0200| [198bb199366ce6d0320fb5fca64784abec58c65f] | committer: Francois Cartegnie

demux: mp4: use timescale as rate

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=198bb199366ce6d0320fb5fca64784abec58c65f
---

 modules/demux/mp4/mp4.c |   17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 10d2c35..08187fc 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -1904,7 +1904,8 @@ static int TrackCreateSamplesIndex( demux_t *p_demux,
  * It computes the sample rate for a video track using the given sample
  * description index
  */
-static void TrackGetESSampleRate( unsigned *pi_num, unsigned *pi_den,
+static void TrackGetESSampleRate( demux_t *p_demux,
+                                  unsigned *pi_num, unsigned *pi_den,
                                   const mp4_track_t *p_track,
                                   unsigned i_sd_index,
                                   unsigned i_chunk )
@@ -1912,6 +1913,16 @@ static void TrackGetESSampleRate( unsigned *pi_num, unsigned *pi_den,
     *pi_num = 0;
     *pi_den = 0;
 
+    MP4_Box_t *p_trak = MP4_GetTrakByTrackID( MP4_BoxGet( p_demux->p_sys->p_root, "/moov" ),
+                                              p_track->i_track_ID );
+    MP4_Box_t *p_mdhd = MP4_BoxGet( p_trak, "mdia/mdhd" );
+    if ( p_mdhd )
+    {
+        *pi_num = BOXDATA(p_mdhd)->i_timescale / 1000;
+        *pi_den = 1;
+        return;
+    }
+
     if( p_track->i_chunk_count <= 0 )
         return;
 
@@ -2035,9 +2046,11 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track,
         p_track->fmt.video.i_visible_height = p_track->fmt.video.i_height;
 
         /* Frame rate */
-        TrackGetESSampleRate( &p_track->fmt.video.i_frame_rate,
+        TrackGetESSampleRate( p_demux,
+                              &p_track->fmt.video.i_frame_rate,
                               &p_track->fmt.video.i_frame_rate_base,
                               p_track, i_sample_description_index, i_chunk );
+
         p_demux->p_sys->f_fps = (float)p_track->fmt.video.i_frame_rate /
                                 (float)p_track->fmt.video.i_frame_rate_base;
 



More information about the vlc-commits mailing list