[vlc-commits] codec: faad: fix buffer consumption

Francois Cartegnie git at videolan.org
Thu Sep 7 16:08:30 CEST 2017


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Sep  7 13:47:47 2017 +0200| [28b52fef2550e737ba27c5fcfc58e6b50f4c5020] | committer: Francois Cartegnie

codec: faad: fix buffer consumption

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

 modules/codec/faad.c | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/modules/codec/faad.c b/modules/codec/faad.c
index f134f4e320..95ae03298f 100644
--- a/modules/codec/faad.c
+++ b/modules/codec/faad.c
@@ -327,7 +327,7 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
     }
 
     /* Decode all data */
-    if( p_sys->p_block && p_sys->p_block->i_buffer > 1 )
+    while( p_sys->p_block && p_sys->p_block->i_buffer > 0 )
     {
         void *samples;
         NeAACDecFrameInfo frame;
@@ -387,25 +387,23 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
             Flush( p_dec );
             p_sys->b_discontinuity = true;
 
-            return VLCDEC_SUCCESS;
+            continue;
         }
 
         if( frame.channels == 0 || frame.channels >= 64 )
         {
             msg_Warn( p_dec, "invalid channels count: %i", frame.channels );
-            FlushBuffer( p_sys, frame.bytesconsumed );
             if( frame.channels == 0 )
-            {
                 p_sys->b_discontinuity = true;
-                return VLCDEC_SUCCESS;
-            }
+            FlushBuffer( p_sys, frame.bytesconsumed ? frame.bytesconsumed : SIZE_MAX );
+            continue;
         }
 
         if( frame.samples == 0 )
         {
             msg_Warn( p_dec, "decoded zero sample" );
-            FlushBuffer( p_sys, frame.bytesconsumed );
-            return VLCDEC_SUCCESS;
+            FlushBuffer( p_sys, frame.bytesconsumed ? frame.bytesconsumed : SIZE_MAX );
+            continue;
         }
 
         /* We decoded a valid frame */
@@ -563,14 +561,15 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
             date_Increment( &p_sys->date, frame.samples / frame.channels );
         }
 
-        FlushBuffer( p_sys, frame.bytesconsumed );
+        FlushBuffer( p_sys, frame.bytesconsumed ? frame.bytesconsumed : SIZE_MAX );
 
-        return VLCDEC_SUCCESS;
-    }
-    else
-    {
-        /* Drop byte of padding */
-        FlushBuffer( p_sys, 0 );
+        if( p_sys->p_block && p_sys->p_block->i_buffer == 1 )
+        {
+            /* Drop byte of padding */
+            FlushBuffer( p_sys, 0 );
+        }
+
+        continue;
     }
 
     return VLCDEC_SUCCESS;



More information about the vlc-commits mailing list