]> git.sesse.net Git - vlc/blobdiff - modules/demux/real.c
Be more explicit on faad error.
[vlc] / modules / demux / real.c
index a9a45974a809765d6c6cf648bbc7b7570a01269f..c58d9ae71536b9b81a8315b850b36fbe0ebb7ff1 100644 (file)
@@ -58,6 +58,8 @@
 #include <vlc_charset.h>
 #include <vlc_meta.h>
 
+#include <assert.h>
+
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
@@ -379,10 +381,11 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
                 return VLC_SUCCESS;
             }
 
-            *pf = 0.0;
             i64 = stream_Size( p_demux->s );
             if( i64 > 0 )
                 *pf = (double)1.0*stream_Tell( p_demux->s ) / (double)i64;
+            else
+                *pf = 0.0;
             return VLC_SUCCESS;
 
         case DEMUX_GET_TIME:
@@ -435,9 +438,11 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
         case DEMUX_GET_LENGTH:
             pi64 = (int64_t*)va_arg( args, int64_t * );
  
-            *pi64 = 0;
             if( p_sys->i_our_duration <= 0 )
+            {
+                *pi64 = 0;
                 return VLC_EGENERIC;
+            }
 
             /* our stored duration is in ms, so... */
             *pi64 = INT64_C(1000) * p_sys->i_our_duration;
@@ -1481,7 +1486,8 @@ static int CodecAudioParse( demux_t *p_demux, int i_tk_id, const uint8_t *p_data
         fmt.audio.i_flavor = i_flavor;
     case VLC_FOURCC('c','o','o','k'):
     case VLC_FOURCC('a','t','r','c'):
-        if( i_subpacket_size <= 0 )
+        if( i_subpacket_size <= 0 ||
+            i_frame_size / i_subpacket_size <= 0 )
         {
             es_format_Clean( &fmt );
             return VLC_EGENERIC;