summaryrefslogtreecommitdiffstats
path: root/libhb/decavcodec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/decavcodec.c')
-rw-r--r--libhb/decavcodec.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/libhb/decavcodec.c b/libhb/decavcodec.c
index 91949fb40..a506154db 100644
--- a/libhb/decavcodec.c
+++ b/libhb/decavcodec.c
@@ -1172,6 +1172,7 @@ static void decodeAudio( hb_audio_t * audio, hb_work_private_t *pv, uint8_t *dat
{
AVCodecContext *context = pv->context;
int pos = 0;
+ int loop_limit = 256;
while ( pos < size )
{
@@ -1190,10 +1191,18 @@ static void decodeAudio( hb_audio_t * audio, hb_work_private_t *pv, uint8_t *dat
int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
int nsamples;
int len = avcodec_decode_audio3( context, buffer, &out_size, &avp );
- if ( len <= 0 )
+ if ( len < 0 )
{
return;
}
+ if ( len == 0 )
+ {
+ if ( !(loop_limit--) )
+ return;
+ }
+ else
+ loop_limit = 256;
+
pos += len;
if( out_size > 0 )
{