[vlc-commits] demux: mp4: remove old stream_Tell/stream_Read workarounds

Francois Cartegnie git at videolan.org
Sat Feb 27 13:46:48 CET 2016


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Oct 14 21:33:50 2015 +0200| [dfd028fe517c72547554e70b78690c6f4a990344] | committer: Francois Cartegnie

demux: mp4: remove old stream_Tell/stream_Read workarounds

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

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

diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
index 3beabf5..88e49cb 100644
--- a/modules/demux/mp4/mp4.c
+++ b/modules/demux/mp4/mp4.c
@@ -152,31 +152,19 @@ static void MP4ASF_ResetFrames( demux_sys_t *p_sys );
 
 static uint32_t stream_ReadU32( stream_t *s, void *p_read, uint32_t i_toread )
 {
-    uint32_t i_return = 0;
+    ssize_t i_return = 0;
     if ( i_toread > INT32_MAX )
     {
-        i_return = stream_Read( s, p_read, INT32_MAX );
+        i_return = stream_Read( s, p_read, (size_t) INT32_MAX );
         if ( i_return < INT32_MAX )
             return i_return;
         else
             i_toread -= INT32_MAX;
     }
-    i_return += stream_Read( s, (uint8_t *)p_read + i_return, (int32_t) i_toread );
+    i_return += stream_Read( s, (uint8_t *)p_read + i_return, (size_t) i_toread );
     return i_return;
 }
 
-static bool MP4_stream_Tell( stream_t *s, uint64_t *pi_pos )
-{
-    int64_t i_pos = stream_Tell( s );
-    if ( i_pos < 0 )
-        return false;
-    else
-    {
-        *pi_pos = (uint64_t) i_pos;
-        return true;
-    }
-}
-
 static MP4_Box_t * MP4_GetTrexByTrackID( MP4_Box_t *p_moov, const uint32_t i_id )
 {
     if(!p_moov)
@@ -1007,8 +995,7 @@ static int Demux( demux_t *p_demux )
         uint64_t i_current_pos;
 
         /* go,go go ! */
-        if ( !MP4_stream_Tell( p_demux->s, &i_current_pos ) )
-            goto end;
+        i_current_pos = stream_Tell( p_demux->s );
 
         if( i_current_pos != i_candidate_pos )
         {
@@ -4053,9 +4040,9 @@ static int ProbeIndex( demux_t *p_demux )
         return VLC_SUCCESS;
 
     i_stream_size = stream_Size( p_demux->s );
+    i_backup_pos = stream_Tell( p_demux->s );
     if ( ( i_stream_size >> 62 ) ||
          ( i_stream_size < MP4_MFRO_BOXSIZE ) ||
-         ( !MP4_stream_Tell( p_demux->s, &i_backup_pos ) ) ||
          ( stream_Seek( p_demux->s, i_stream_size - MP4_MFRO_BOXSIZE ) != VLC_SUCCESS )
        )
     {
@@ -4084,10 +4071,9 @@ static int ProbeIndex( demux_t *p_demux )
 static int ProbeFragments( demux_t *p_demux, bool b_force )
 {
     demux_sys_t *p_sys = p_demux->p_sys;
-    uint64_t i_current_pos;
+    uint64_t i_current_pos = stream_Tell( p_demux->s );
 
-    if ( MP4_stream_Tell( p_demux->s, &i_current_pos ) )
-        msg_Dbg( p_demux, "probing fragments from %"PRId64, i_current_pos );
+    msg_Dbg( p_demux, "probing fragments from %"PRId64, i_current_pos );
 
     assert( p_sys->p_root );
 
@@ -4341,9 +4327,7 @@ static int LeafParseMDATwithMOOV( demux_t *p_demux )
     assert( p_sys->context.i_current_box_type == ATOM_mdat );
     assert( p_sys->context.p_fragment->p_moox->i_type == ATOM_moov );
 
-    uint64_t i_current_pos;
-    if ( !MP4_stream_Tell( p_demux->s, &i_current_pos ) )
-        return VLC_EGENERIC;
+    uint64_t i_current_pos = stream_Tell( p_demux->s );
 
     if ( p_sys->context.i_mdatbytesleft == 0 ) /* Start parsing new mdat */
     {
@@ -4354,9 +4338,8 @@ static int LeafParseMDATwithMOOV( demux_t *p_demux )
         if ( i_read < 8 || p_sys->context.i_mdatbytesleft < 8 ||
              VLC_FOURCC( mdat[4], mdat[5], mdat[6], mdat[7] ) != ATOM_mdat )
         {
-            uint64_t i_pos;
-            if ( !MP4_stream_Tell( p_demux->s, &i_pos ) )
-                msg_Err( p_demux, "No mdat atom at %"PRIu64, i_pos - __MAX( 0, i_read ) );
+            uint64_t i_pos = stream_Tell( p_demux->s );
+            msg_Err( p_demux, "No mdat atom at %"PRIu64, i_pos - __MAX( 0, i_read ) );
             return VLC_EGENERIC;
         }
         i_current_pos += 8;
@@ -4416,12 +4399,9 @@ static int LeafParseMDATwithMOOV( demux_t *p_demux )
 
                 if( !(p_block = MP4_Block_Read( p_demux, p_track, i_samplessize )) )
                 {
-                    uint64_t i_pos;
-                    if ( MP4_stream_Tell( p_demux->s, &i_pos ) )
-                    {
-                        p_sys->context.i_mdatbytesleft -= ( i_pos - i_current_pos );
-                        msg_Err( p_demux, "stream block error %"PRId64" %"PRId64, i_pos, i_pos - i_current_pos );
-                    }
+                    uint64_t i_pos = stream_Tell( p_demux->s );
+                    p_sys->context.i_mdatbytesleft -= ( i_pos - i_current_pos );
+                    msg_Err( p_demux, "stream block error %"PRId64" %"PRId64, i_pos, i_pos - i_current_pos );
                     goto error;
                 }
 
@@ -4671,16 +4651,14 @@ static int LeafParseMDATwithMOOF( demux_t *p_demux, MP4_Box_t *p_moof )
         if ( i_read < 8 || p_sys->context.i_mdatbytesleft < 8 ||
              VLC_FOURCC( mdat[4], mdat[5], mdat[6], mdat[7] ) != ATOM_mdat )
         {
-            if ( MP4_stream_Tell( p_demux->s, &i_pos ) )
-                msg_Err(p_demux, "No mdat atom at %"PRIu64, i_pos - i_read );
+            i_pos = stream_Tell( p_demux->s );
+            msg_Err(p_demux, "No mdat atom at %"PRIu64, i_pos - i_read );
             return VLC_EGENERIC;
         }
         p_sys->context.i_mdatbytesleft -= 8;
     }
 
-    if ( !MP4_stream_Tell( p_demux->s, &i_pos ) )
-        return VLC_EGENERIC;
-
+    i_pos = stream_Tell( p_demux->s );
     mp4_track_t *p_track = LeafGetTrackByTrunPos( p_demux, i_pos, p_moof->i_pos, p_moof->i_size );
     if( p_track )
     {



More information about the vlc-commits mailing list