[vlc-commits] avcodec: audio: fix new API usage

Thomas Guillem git at videolan.org
Wed Sep 7 15:52:36 CEST 2016


vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Wed Sep  7 13:27:10 2016 +0200| [9861e90ebe644c6afe45c0e610db67bd45c62415] | committer: Thomas Guillem

avcodec: audio: fix new API usage

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

 modules/codec/avcodec/audio.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c
index 7f2412f..8417988 100644
--- a/modules/codec/avcodec/audio.c
+++ b/modules/codec/avcodec/audio.c
@@ -323,24 +323,26 @@ static block_t *DecodeAudio( decoder_t *p_dec, block_t **pp_block )
         pkt.data = p_block->p_buffer;
         pkt.size = p_block->i_buffer;
 
-        int used = avcodec_send_packet( ctx, &pkt );
-        if( used < 0 )
+        int ret = avcodec_send_packet( ctx, &pkt );
+        if( ret != 0 && ret != AVERROR(EAGAIN) )
         {
             msg_Warn( p_dec, "cannot decode one frame (%zu bytes)",
                       p_block->i_buffer );
             goto end;
         }
-        used = avcodec_receive_frame( ctx, frame );
-        got_frame = used == 0;
-        if( used < 0 )
+        int used = ret != AVERROR(EAGAIN) ? pkt.size : 0;
+
+        ret = avcodec_receive_frame( ctx, frame );
+        if( ret != 0 && ret != AVERROR(EAGAIN) )
         {
             msg_Warn( p_dec, "cannot decode one frame (%zu bytes)",
                       p_block->i_buffer );
             goto end;
         }
+        got_frame = ret == 0;
 
-        p_block->p_buffer += p_block->i_buffer;
-        p_block->i_buffer = 0;
+        p_block->p_buffer += used;
+        p_block->i_buffer -= used;
     }
 
     if( ctx->channels <= 0 || ctx->channels > 8 || ctx->sample_rate <= 0 )



More information about the vlc-commits mailing list