]> git.sesse.net Git - vlc/commitdiff
* rewind the stream to 0 if we found an id3 tag, but the flac demuxer ISNT the correc...
authorDerk-Jan Hartman <hartman@videolan.org>
Tue, 5 Apr 2005 01:20:19 +0000 (01:20 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Tue, 5 Apr 2005 01:20:19 +0000 (01:20 +0000)
modules/demux/flac.c

index f1c0b5ae814a2203777b3ba3185e17dc2188097d..175696349037573561fcef4558a4622b41f17522 100644 (file)
@@ -86,16 +86,14 @@ static int Open( vlc_object_t * p_this )
     /* Have a peep at the show. */
     if( stream_Peek( p_demux->s, &p_peek, 4 ) < 4 )
     {
-        if( p_meta ) vlc_meta_Delete( p_meta );
-        return VLC_EGENERIC;
+        goto error;
     }
 
     if( p_peek[0]!='f' || p_peek[1]!='L' || p_peek[2]!='a' || p_peek[3]!='C' )
     {
         if( strncmp( p_demux->psz_demux, "flac", 4 ) )
         {
-            if( p_meta ) vlc_meta_Delete( p_meta );
-            return VLC_EGENERIC;
+            goto error;
         }
         /* User forced */
         msg_Err( p_demux, "this doesn't look like a flac stream, "
@@ -114,15 +112,13 @@ static int Open( vlc_object_t * p_this )
     if( p_peek[4] & 0x7F )
     {
         msg_Err( p_demux, "this isn't a STREAMINFO metadata block" );
-        if( p_meta ) vlc_meta_Delete( p_meta );
-        return VLC_EGENERIC;
+        goto error;
     }
 
     if( ((p_peek[5]<<16)+(p_peek[6]<<8)+p_peek[7]) != (STREAMINFO_SIZE - 4) )
     {
         msg_Err( p_demux, "invalid size for a STREAMINFO metadata block" );
-        if( p_meta ) vlc_meta_Delete( p_meta );
-        return VLC_EGENERIC;
+        goto error;
     }
 
     /*
@@ -154,18 +150,29 @@ static int Open( vlc_object_t * p_this )
         module_Need( p_sys->p_packetizer, "packetizer", NULL, 0 );
     if( !p_sys->p_packetizer->p_module )
     {
-        if( p_sys->p_packetizer->fmt_in.p_extra )
-            free( p_sys->p_packetizer->fmt_in.p_extra );
-
-        vlc_object_destroy( p_sys->p_packetizer );
         msg_Err( p_demux, "cannot find flac packetizer" );
-        if( p_meta ) vlc_meta_Delete( p_meta );
-        return VLC_EGENERIC;
+        goto error;
     }
 
     p_sys->p_es = es_out_Add( p_demux->out, &fmt );
 
     return VLC_SUCCESS;
+
+error:
+    if( p_sys != NULL && p_sys->p_packetizer )
+    {
+        if( p_sys->p_packetizer->fmt_in.p_extra )
+            free( p_sys->p_packetizer->fmt_in.p_extra );
+        vlc_object_destroy( p_sys->p_packetizer );
+    }
+    if( p_meta )
+    {
+        int b_seekable;
+        vlc_meta_Delete( p_meta );
+        stream_Control( p_demux->s, STREAM_CAN_FASTSEEK, &b_seekable );
+        if( b_seekable ) stream_Seek( p_demux->s, 0 );
+    }
+    return VLC_EGENERIC;
 }
 
 /*****************************************************************************