vlc | branch: master | Francois Cartegnie <[email protected]> | Sun Mar 27 14:35:49 2016 +0200| [7f48300217b9442ac4cfcead90aa5391074f4d5a] | committer: Francois Cartegnie
demux: libmp4: add MP4_BoxNew for temp boxes > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7f48300217b9442ac4cfcead90aa5391074f4d5a --- modules/demux/mp4/libmp4.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c index 38ca5b3..c8821bf 100644 --- a/modules/demux/mp4/libmp4.c +++ b/modules/demux/mp4/libmp4.c @@ -74,6 +74,7 @@ static void MP4_ConvertDate2Str( char *psz, uint64_t i_date, bool b_relative ) static MP4_Box_t *MP4_ReadBox( stream_t *p_stream, MP4_Box_t *p_father ); static int MP4_Box_Read_Specific( stream_t *p_stream, MP4_Box_t *p_box, MP4_Box_t *p_father ); static void MP4_Box_Clean_Specific( MP4_Box_t *p_box ); +static inline MP4_Box_t * MP4_BoxNew( uint32_t i_type ); static int MP4_Seek( stream_t *p_stream, uint64_t i_pos ) { @@ -4182,6 +4183,19 @@ static MP4_Box_t *MP4_ReadBox( stream_t *p_stream, MP4_Box_t *p_father ) } /***************************************************************************** + * MP4_BoxNew : creates and initializes an arbitrary box + *****************************************************************************/ +static inline MP4_Box_t * MP4_BoxNew( uint32_t i_type ) +{ + MP4_Box_t *p_box = calloc( 1, sizeof( MP4_Box_t ) ); + if( likely( p_box != NULL ) ) + { + p_box->i_type = i_type; + } + return p_box; +} + +/***************************************************************************** * MP4_FreeBox : free memory after read with MP4_ReadBox and all * the children *****************************************************************************/ @@ -4212,10 +4226,8 @@ void MP4_BoxFree( MP4_Box_t *p_box ) MP4_Box_t *MP4_BoxGetNextChunk( stream_t *s ) { /* p_chunk is a virtual root container for the moof and mdat boxes */ - MP4_Box_t *p_chunk; - MP4_Box_t *p_tmp_box = NULL; - - p_tmp_box = calloc( 1, sizeof( MP4_Box_t ) ); + MP4_Box_t *p_fakeroot; + MP4_Box_t *p_tmp_box = MP4_BoxNew( 0 ); if( unlikely( p_tmp_box == NULL ) ) return NULL; @@ -4229,24 +4241,22 @@ MP4_Box_t *MP4_BoxGetNextChunk( stream_t *s ) } free( p_tmp_box ); - p_chunk = calloc( 1, sizeof( MP4_Box_t ) ); - if( unlikely( p_chunk == NULL ) ) + p_fakeroot = MP4_BoxNew( ATOM_root ); + if( unlikely( p_fakeroot == NULL ) ) return NULL; - - p_chunk->i_type = ATOM_root; - p_chunk->i_shortsize = 1; + p_fakeroot->i_shortsize = 1; const uint32_t stoplist[] = { ATOM_moof, 0 }; - MP4_ReadBoxContainerChildren( s, p_chunk, stoplist ); + MP4_ReadBoxContainerChildren( s, p_fakeroot, stoplist ); - p_tmp_box = p_chunk->p_first; + p_tmp_box = p_fakeroot->p_first; while( p_tmp_box ) { - p_chunk->i_size += p_tmp_box->i_size; + p_fakeroot->i_size += p_tmp_box->i_size; p_tmp_box = p_tmp_box->p_next; } - return p_chunk; + return p_fakeroot; } /***************************************************************************** @@ -4259,11 +4269,10 @@ MP4_Box_t *MP4_BoxGetRoot( stream_t *p_stream ) { int i_result; - MP4_Box_t *p_vroot = calloc( 1, sizeof( MP4_Box_t ) ); + MP4_Box_t *p_vroot = MP4_BoxNew( ATOM_root ); if( p_vroot == NULL ) return NULL; - p_vroot->i_type = ATOM_root; p_vroot->i_shortsize = 1; int64_t i_size = stream_Size( p_stream ); if( i_size > 0 ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
