[vlc-commits] demux: mp4: split smooth fmt from whole track setup

Francois Cartegnie git at videolan.org
Thu Jun 11 20:10:30 CEST 2015


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Jun 11 17:27:52 2015 +0200| [d991fd3a901af13a246fe372036c09ced859c7a3] | committer: Francois Cartegnie

demux: mp4: split smooth fmt from whole track setup

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

 modules/demux/mp4/mp4.c |   87 ++++++++++++++++++++++++++---------------------
 1 file changed, 49 insertions(+), 38 deletions(-)

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index b50beca..85c1bcc 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -116,7 +116,7 @@ struct demux_sys_t
  * Declaration of local function
  *****************************************************************************/
 static void MP4_TrackCreate ( demux_t *, mp4_track_t *, MP4_Box_t  *, bool b_force_enable );
-static int  MP4_SmoothTrackCreate( demux_t *, mp4_track_t *, MP4_Box_t *);
+static int  MP4_SmoothTrackCreate( demux_t *, mp4_track_t *, const MP4_Box_t *);
 static void MP4_TrackDestroy( demux_t *, mp4_track_t * );
 
 static block_t * MP4_Block_Read( demux_t *, const mp4_track_t *, int );
@@ -3436,7 +3436,7 @@ static int build_raw_avcC( uint8_t **p_extra, const uint8_t *CodecPrivateData,
  * Build a mp4_track_t from a StraBox
  */
 
-static inline int MP4_SetCodecExtraData( es_format_t *fmt, MP4_Box_data_stra_t *p_data )
+static inline int MP4_SetCodecExtraData( es_format_t *fmt, const MP4_Box_data_stra_t *p_data )
 {
     fmt->p_extra = malloc( p_data->cpd_len );
     if( unlikely( !fmt->p_extra ) )
@@ -3446,29 +3446,9 @@ static inline int MP4_SetCodecExtraData( es_format_t *fmt, MP4_Box_data_stra_t *
     return VLC_SUCCESS;
   }
 
-static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_stra )
+static int MP4_SmoothFormatFill( const MP4_Box_data_stra_t *p_data, const mp4_track_t *p_track,
+                                 es_format_t *fmt )
 {
-    demux_sys_t *p_sys = p_demux->p_sys;
-    int ret;
-    MP4_Box_data_stra_t *p_data = BOXDATA(p_stra);
-    if( !p_data )
-        return VLC_EGENERIC;
-
-    p_track->b_ok       = false;
-    p_track->b_selected = false;
-    p_track->i_sample_count = UINT32_MAX;
-
-    p_track->i_timescale = p_sys->i_timescale;
-    p_track->i_width = p_data->MaxWidth;
-    p_track->i_height = p_data->MaxHeight;
-    p_track->i_track_ID = p_data->i_track_ID;
-
-    es_format_t *fmt = &p_track->fmt;
-    if( fmt == NULL )
-        return VLC_EGENERIC;
-
-    es_format_Init( fmt, p_data->i_es_cat, 0 );
-
     /* Set language FIXME */
     fmt->psz_language = strdup( "en" );
 
@@ -3490,9 +3470,8 @@ static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, MP4_Bo
             }
             else
             {
-                ret = MP4_SetCodecExtraData( fmt, p_data );
-                if( ret != VLC_SUCCESS )
-                    return ret;
+                if ( MP4_SetCodecExtraData( fmt, p_data ) != VLC_SUCCESS )
+                    return VLC_EGENERIC;
             }
 
             fmt->video.i_width = p_data->MaxWidth;
@@ -3505,14 +3484,6 @@ static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, MP4_Bo
             ChunkGetESSampleRate( &fmt->video.i_frame_rate,
                                   &fmt->video.i_frame_rate_base, p_track );
 
-            if( fmt->video.i_frame_rate_base != 0 )
-            {
-                p_demux->p_sys->f_fps = (float)fmt->video.i_frame_rate /
-                                        (float)fmt->video.i_frame_rate_base;
-            }
-            else
-                p_demux->p_sys->f_fps = 24;
-
             break;
 
         case AUDIO_ES:
@@ -3523,9 +3494,8 @@ static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, MP4_Bo
 
             fmt->i_bitrate = p_data->Bitrate;
 
-            ret = MP4_SetCodecExtraData( fmt, p_data );
-            if( ret != VLC_SUCCESS )
-                return ret;
+            if ( MP4_SetCodecExtraData( fmt, p_data ) != VLC_SUCCESS )
+                return VLC_EGENERIC;
 
             break;
 
@@ -3533,6 +3503,47 @@ static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, MP4_Bo
             break;
     }
 
+    return VLC_SUCCESS;
+}
+
+static int MP4_SmoothTrackCreate( demux_t *p_demux, mp4_track_t *p_track, const MP4_Box_t *p_stra )
+{
+    demux_sys_t *p_sys = p_demux->p_sys;
+
+    p_track->b_ok       = false;
+    p_track->b_selected = false;
+
+    MP4_Box_data_stra_t *p_data = BOXDATA(p_stra);
+    if( !p_data )
+        return VLC_EGENERIC;
+
+    p_track->i_sample_count = UINT32_MAX;
+
+    p_track->i_timescale = p_sys->i_timescale;
+    p_track->i_track_ID = p_data->i_track_ID;
+
+    es_format_t *fmt = &p_track->fmt;
+    es_format_Init( &p_track->fmt, p_data->i_es_cat, 0 );
+
+    if( MP4_SmoothFormatFill( p_data, p_track, fmt ) != VLC_SUCCESS )
+    {
+        es_format_Clean( fmt );
+        return VLC_EGENERIC;
+    }
+    else if( fmt->i_cat == VIDEO_ES )
+    {
+        p_track->i_width = fmt->video.i_visible_width;
+        p_track->i_height = fmt->video.i_visible_height;
+
+        if( fmt->video.i_frame_rate_base != 0 )
+        {
+            p_demux->p_sys->f_fps = (float)fmt->video.i_frame_rate /
+                                    (float)fmt->video.i_frame_rate_base;
+        }
+        else
+            p_demux->p_sys->f_fps = 24;
+    }
+
     p_track->b_ok = true;
 
     return VLC_SUCCESS;



More information about the vlc-commits mailing list