# HG changeset patch # User attila # Date 1125590395 0 # Node ID 7252d024193b6201c0d39c1205b34d38b2073f7c # Parent 6a9283411dfe0a9d476a72db6c8da8f1bf139c3f * really keep track on how many samples were decoded last round (fix 10l) * leave loop if more than 10 faad errors were detected since the last call of decode_audio diff -r 6a9283411dfe -r 7252d024193b libmpcodecs/ad_faad.c --- a/libmpcodecs/ad_faad.c Thu Sep 01 15:25:03 2005 +0000 +++ b/libmpcodecs/ad_faad.c Thu Sep 01 15:59:55 2005 +0000 @@ -206,12 +206,13 @@ return CONTROL_UNKNOWN; } +#define MAX_FAAD_ERRORS 10 static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) { - int j = 0, len = 0; + int j = 0, len = 0, last_dec_len = 1, errors = 0; void *faac_sample_buffer; - while(len < minlen && len > 0) { + while(len < minlen && last_dec_len > 0 && errors < MAX_FAAD_ERRORS) { /* update buffer for raw aac streams: */ if(!sh->codecdata_len) @@ -245,9 +246,10 @@ mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: error: %s, trying to resync!\n", faacDecGetErrorMessage(faac_finfo.error)); j++; + errors++; } else break; - } while(j < FAAD_BUFFLEN); + } while(j < FAAD_BUFFLEN && errors < MAX_FAAD_ERRORS); } else { // packetized (.mp4) aac stream: unsigned char* bufptr=NULL; @@ -267,7 +269,8 @@ mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"FAAD: Successfully decoded frame (%d Bytes)!\n", sh->samplesize*faac_finfo.samples); memcpy(buf+len,faac_sample_buffer, sh->samplesize*faac_finfo.samples); - len += sh->samplesize*faac_finfo.samples; + last_dec_len = sh->samplesize*faac_finfo.samples; + len += last_dec_len; //printf("FAAD: buffer: %d bytes consumed: %d \n", k, faac_finfo.bytesconsumed); } }