]> git.sesse.net Git - vlc/blobdiff - modules/demux/mp4/mp4.c
switch to jdk 1.5
[vlc] / modules / demux / mp4 / mp4.c
index 7dd3705e328996cabca1cacae1e26be9b51d300f..ee0659462efa5499e0dd5c23377e93a965d071f1 100644 (file)
  * Preamble
  *****************************************************************************/
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/vlc.h>
 
 
@@ -411,7 +415,7 @@ static int Open( vlc_object_t * p_this )
                         asprintf( &psz_absolute, "%s://%s%s",
                                       p_demux->psz_access, psz_path, psz_ref );
 
-                        if( psz_ref ) free( psz_ref );
+                        free( psz_ref );
                         psz_ref = psz_absolute;
                         free( psz_path );
                     }
@@ -422,6 +426,7 @@ static int Open( vlc_object_t * p_this )
                         p_input = input_ItemNewExt( p_playlist, psz_ref, NULL,
                                             0, NULL, -1 );
                         input_ItemCopyOptions( p_current->p_input, p_input );
+                        /* FIXME: playlist_BothAddInput() can fail */
                         playlist_BothAddInput( p_playlist, p_input,
                                                p_item_in_category,
                                                PLAYLIST_APPEND, PLAYLIST_END,
@@ -434,7 +439,7 @@ static int Open( vlc_object_t * p_this )
                     msg_Err( p_demux, "unknown ref type=%4.4s FIXME (send a bug report)",
                              (char*)&p_rdrf->data.p_rdrf->i_ref_type );
                 }
-                if( psz_ref ) free( psz_ref );
+                free( psz_ref );
             }
             if( b_play && p_item_in_category &&
                 p_item_in_category->i_children > 0 )
@@ -475,12 +480,14 @@ static int Open( vlc_object_t * p_this )
         msg_Err( p_demux, "cannot find any /moov/trak" );
         goto error;
     }
-    msg_Dbg( p_demux, "find %d track%c",
+    msg_Dbg( p_demux, "found %d track%c",
                         p_sys->i_tracks,
                         p_sys->i_tracks ? 's':' ' );
 
     /* allocate memory */
     p_sys->track = calloc( p_sys->i_tracks, sizeof( mp4_track_t ) );
+    if( p_sys->track == NULL )
+        goto error;
     memset( p_sys->track, 0, p_sys->i_tracks * sizeof( mp4_track_t ) );
 
     /* Search the first chap reference (like quicktime) */
@@ -889,14 +896,26 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
                     SET( vlc_meta_SetAlbum );
                     break;
 
+                case FOURCC_0xa9trk: /* Track */
+                    SET( vlc_meta_SetTracknum );
+                    break;
+
+                case FOURCC_0xa9cmt: /* Commment */
+                    SET( vlc_meta_SetDescription );
+                    break;
+
+                case FOURCC_0xa9url: /* URL */
+                    SET( vlc_meta_SetURL );
+                    break;
+
+                case FOURCC_0xa9enc: /* Encoded By */
+                    SET( vlc_meta_SetEncodedBy );
+                    break;
+                    
                 case FOURCC_0xa9swr:
                 case FOURCC_0xa9inf: /* Information */
                 case FOURCC_0xa9dir: /* Director */
                 case FOURCC_0xa9dis: /* Disclaimer */
-                case FOURCC_0xa9enc: /* Encoded By */
-                case FOURCC_0xa9trk: /* Track */
-                case FOURCC_0xa9cmt: /* Commment */
-                case FOURCC_0xa9url: /* URL */
                 case FOURCC_0xa9req: /* Requirements */
                 case FOURCC_0xa9fmt: /* Original Format */
                 case FOURCC_0xa9dsa: /* Display Source As */
@@ -953,6 +972,8 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
 
         case DEMUX_SET_NEXT_DEMUX_TIME:
         case DEMUX_SET_GROUP:
+        case DEMUX_HAS_UNSUPPORTED_META:
+        case DEMUX_GET_ATTACHMENTS:
             return VLC_EGENERIC;
 
         default:
@@ -1100,6 +1121,10 @@ static int TrackCreateChunksIndex( demux_t *p_demux,
     }
     p_demux_track->chunk = calloc( p_demux_track->i_chunk_count,
                                    sizeof( mp4_chunk_t ) );
+    if( p_demux_track->chunk == NULL )
+    {
+        return VLC_ENOMEM;
+    }
 
     /* first we read chunk offset */
     for( i_chunk = 0; i_chunk < p_demux_track->i_chunk_count; i_chunk++ )
@@ -1131,6 +1156,12 @@ static int TrackCreateChunksIndex( demux_t *p_demux,
         for( i_chunk = p_stsc->data.p_stsc->i_first_chunk[i_index] - 1;
              i_chunk < i_last; i_chunk++ )
         {
+            if( i_chunk >= p_demux_track->i_chunk_count )
+            {
+                msg_Warn( p_demux, "corrupted chunk table" );
+                return VLC_EGENERIC;
+            }
+
             p_demux_track->chunk[i_chunk].i_sample_description_index =
                     p_stsc->data.p_stsc->i_sample_description_index[i_index];
             p_demux_track->chunk[i_chunk].i_sample_count =
@@ -1206,6 +1237,8 @@ static int TrackCreateSamplesIndex( demux_t *p_demux,
         p_demux_track->i_sample_size = 0;
         p_demux_track->p_sample_size =
             calloc( p_demux_track->i_sample_count, sizeof( uint32_t ) );
+        if( p_demux_track->p_sample_size == NULL )
+            return VLC_ENOMEM;
 
         for( i_sample = 0; i_sample < p_demux_track->i_sample_count; i_sample++ )
         {