vlc | branch: master | Thomas Guillem <tho...@gllm.fr> | Tue Oct 11 20:20:50 
2016 +0200| [48a642875cb3a0cd6a8fd44e7824a719d5c95ae2] | committer: Thomas 
Guillem

mpg123: flush mpg123 internal buffers in pf_flush

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=48a642875cb3a0cd6a8fd44e7824a719d5c95ae2
---

 modules/codec/mpg123.c | 61 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 39 insertions(+), 22 deletions(-)

diff --git a/modules/codec/mpg123.c b/modules/codec/mpg123.c
index 98feadb..25d9bb2 100644
--- a/modules/codec/mpg123.c
+++ b/modules/codec/mpg123.c
@@ -70,6 +70,40 @@ vlc_module_begin ()
 vlc_module_end ()
 
 /*****************************************************************************
+ * MPG123Open
+ *****************************************************************************/
+static int MPG123Open( decoder_t *p_dec )
+{
+    decoder_sys_t *p_sys = p_dec->p_sys;
+
+    /* Open a new bitstream */
+    if( mpg123_open_feed( p_sys->p_handle ) != MPG123_OK )
+    {
+        msg_Err( p_dec, "mpg123 error: can't open feed" );
+        return VLC_EGENERIC;
+    }
+
+    /* Disable resync stream after error */
+    mpg123_param( p_sys->p_handle, MPG123_ADD_FLAGS, MPG123_NO_RESYNC, 0 );
+
+    /* Setup output format */
+    mpg123_format_none( p_sys->p_handle );
+
+    if( MPG123_OK != mpg123_format( p_sys->p_handle,
+                                    p_dec->fmt_in.audio.i_rate,
+                                    MPG123_MONO | MPG123_STEREO,
+                                    MPG123_ENC_FLOAT_32 ) )
+    {
+        msg_Err( p_dec, "mpg123 error: %s",
+                 mpg123_strerror( p_sys->p_handle ) );
+        mpg123_close( p_sys->p_handle );
+        return VLC_EGENERIC;
+    }
+
+    return VLC_SUCCESS;
+}
+
+/*****************************************************************************
  * Flush:
  *****************************************************************************/
 static void Flush( decoder_t *p_dec )
@@ -77,6 +111,10 @@ static void Flush( decoder_t *p_dec )
     decoder_sys_t *p_sys = p_dec->p_sys;
 
     date_Set( &p_sys->end_date, 0 );
+
+    mpg123_close( p_sys->p_handle );
+    if( MPG123Open( p_dec ) )
+        p_dec->b_error = true;
 }
 
 static int UpdateAudioFormat( decoder_t *p_dec )
@@ -313,29 +351,8 @@ static int OpenDecoder( vlc_object_t *p_this )
     if( ( p_sys->p_handle = mpg123_new( NULL, NULL ) ) == NULL )
         goto error;
 
-    /* Open a new bitstream */
-    if( mpg123_open_feed( p_sys->p_handle ) != MPG123_OK )
-    {
-        msg_Err( p_this, "mpg123 error: can't open feed" );
+    if( MPG123Open( p_dec ) )
         goto error;
-    }
-
-    /* Disable resync stream after error */
-    mpg123_param( p_sys->p_handle, MPG123_ADD_FLAGS, MPG123_NO_RESYNC, 0 );
-
-    /* Setup output format */
-    mpg123_format_none( p_sys->p_handle );
-
-    if( MPG123_OK != mpg123_format( p_sys->p_handle,
-                                    p_dec->fmt_in.audio.i_rate,
-                                    MPG123_MONO | MPG123_STEREO,
-                                    MPG123_ENC_FLOAT_32 ) )
-    {
-        msg_Err( p_this, "mpg123 error: %s",
-                mpg123_strerror( p_sys->p_handle ) );
-        mpg123_close( p_sys->p_handle );
-        goto error;
-    }
 
     p_dec->fmt_out.audio.i_rate = 0; /* So end_date gets initialized */
     p_dec->fmt_out.audio.i_format = p_dec->fmt_out.i_codec;

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to