]> git.sesse.net Git - vlc/commitdiff
* modules/demux/flac.c, modules/codec/flac.c: couple of fixes.
authorGildas Bazin <gbazin@videolan.org>
Fri, 21 Nov 2003 12:18:54 +0000 (12:18 +0000)
committerGildas Bazin <gbazin@videolan.org>
Fri, 21 Nov 2003 12:18:54 +0000 (12:18 +0000)
modules/codec/flac.c
modules/demux/flac.c

index 05ea8aa720780a43511b8a536ea2dd41a35854ec..0b90e96ca1f4e05f5a1a4db7f5d6a5fd037a5c6e 100644 (file)
@@ -2,7 +2,7 @@
  * flac.c: flac decoder/packetizer module making use of libflac
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: flac.c,v 1.1 2003/11/21 01:45:48 gbazin Exp $
+ * $Id: flac.c,v 1.2 2003/11/21 12:18:54 gbazin Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *          Sigmund Augdal <sigmunau@idi.ntnu.no>
@@ -404,7 +404,17 @@ static aout_buffer_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
         {
             decoder_state_error( p_dec,
                 FLAC__stream_decoder_get_state( p_sys->p_flac ) );
+            FLAC__stream_decoder_flush( p_dec->p_sys->p_flac );
         }
+
+        /* If the decoder is in the "aborted" state,
+         * FLAC__stream_decoder_process_single() won't return an error. */
+        if( FLAC__stream_decoder_get_state(p_dec->p_sys->p_flac)
+            == FLAC__STREAM_DECODER_ABORTED )
+        {
+            FLAC__stream_decoder_flush( p_dec->p_sys->p_flac );
+        }
+
         block_Release( p_sys->p_block );
     }
 
@@ -434,7 +444,6 @@ DecoderReadCallback( const FLAC__StreamDecoder *decoder, FLAC__byte buffer[],
     decoder_t *p_dec = (decoder_t *)client_data;
     decoder_sys_t *p_sys = p_dec->p_sys;
 
-    msg_Err( p_dec, "buffer: %i", p_sys->p_block->i_buffer );
     if( p_sys->p_block && p_sys->p_block->i_buffer )
     {
         *bytes = __MIN(*bytes, (unsigned)p_sys->p_block->i_buffer);
@@ -570,6 +579,8 @@ static void DecoderErrorCallback( const FLAC__StreamDecoder *decoder,
     default:
         msg_Err( p_dec, "got decoder error: %d", status );
     }
+
+    FLAC__stream_decoder_flush( p_dec->p_sys->p_flac );
     return;
 }
 
@@ -633,7 +644,6 @@ static void decoder_state_error( decoder_t *p_dec,
     case FLAC__STREAM_DECODER_UNPARSEABLE_STREAM:
         msg_Err( p_dec, "The decoder encountered reserved fields in use "
                  "in the stream." );
-        FLAC__stream_decoder_flush( p_dec->p_sys->p_flac );
         break;
     case FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR:
         msg_Err( p_dec, "An error occurred allocating memory." );
index af232fdff301a32bb4d4b071cbfab976ba3572ff..08440e80419fd646381a2f52bc39e5342f77b5b7 100644 (file)
@@ -2,7 +2,7 @@
  * flac.c : FLAC demux module for vlc
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: flac.c,v 1.6 2003/11/21 01:45:48 gbazin Exp $
+ * $Id: flac.c,v 1.7 2003/11/21 12:18:54 gbazin Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *
@@ -131,13 +131,13 @@ static int Open( vlc_object_t * p_this )
     es_format_Init( &p_sys->p_packetizer->fmt_in, AUDIO_ES,
                     VLC_FOURCC( 'f', 'l', 'a', 'c' ) );
 
-    /* Store STREAMINFO for the decoder an packetizer */
+    /* Store STREAMINFO for the decoder and packetizer */
     p_sys->p_packetizer->fmt_in.i_extra = fmt.i_extra = STREAMINFO_SIZE;
     p_sys->p_packetizer->fmt_in.p_extra = malloc( STREAMINFO_SIZE );
     stream_Read( p_input->s, p_sys->p_packetizer->fmt_in.p_extra,
                  STREAMINFO_SIZE );
 
-    /* Fake this a the last metadata block */
+    /* Fake this as the last metadata block */
     ((uint8_t*)p_sys->p_packetizer->fmt_in.p_extra)[0] |= 0x80;
     fmt.p_extra = malloc( STREAMINFO_SIZE );
     memcpy( fmt.p_extra, p_sys->p_packetizer->fmt_in.p_extra, STREAMINFO_SIZE);
@@ -179,7 +179,7 @@ static void Close( vlc_object_t * p_this )
     demux_sys_t    *p_sys = p_input->p_demux_data;
 
     /* Unneed module */
-    module_Unneed( p_input, p_sys->p_packetizer->p_module );
+    module_Unneed( p_sys->p_packetizer, p_sys->p_packetizer->p_module );
 
     if( p_sys->p_packetizer->fmt_in.p_extra )
         free( p_sys->p_packetizer->fmt_in.p_extra );