diff options
-rw-r--r-- | src/libmpg123/layer3.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/libmpg123/layer3.c b/src/libmpg123/layer3.c index d3673b57d..58c7d018a 100644 --- a/src/libmpg123/layer3.c +++ b/src/libmpg123/layer3.c @@ -292,7 +292,7 @@ void init_layer3(int down_sample_sblimit) * read additional side information */ #ifdef MPEG1 -static void III_get_side_info_1(struct III_sideinfo *si,int stereo, +static int III_get_side_info_1(struct III_sideinfo *si,int stereo, int ms_stereo,long sfreq,int single) { int ch, gr; @@ -319,6 +319,7 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo, gr_info->big_values = getbits_fast(9); if(gr_info->big_values > 288) { fprintf(stderr,"big_values too large!\n"); + return 0; gr_info->big_values = 288; } gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff; @@ -343,7 +344,7 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo, if(gr_info->block_type == 0) { fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n"); - exit(1); + return 0; } /* region_count/start parameters are implicit in this case. */ gr_info->region1start = 36>>1; @@ -366,13 +367,14 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo, gr_info->count1table_select = get1bit(); } } + return 1; } #endif /* * Side Info for MPEG 2.0 / LSF */ -static void III_get_side_info_2(struct III_sideinfo *si,int stereo, +static int III_get_side_info_2(struct III_sideinfo *si,int stereo, int ms_stereo,long sfreq,int single) { int ch; @@ -393,6 +395,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo, if(gr_info->big_values > 288) { fprintf(stderr,"big_values too large!\n"); gr_info->big_values = 288; + return 0; } gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff; if(ms_stereo) @@ -416,7 +419,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo, if(gr_info->block_type == 0) { fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n"); - exit(1); + return 0; } /* region_count/start parameters are implicit in this case. */ /* check this again! */ @@ -444,6 +447,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo, gr_info->scalefac_scale = get1bit(); gr_info->count1table_select = get1bit(); } + return 1; } /* @@ -1477,12 +1481,14 @@ void do_layer3(mpgaudio_t *mp) if(fr->lsf) { granules = 1; - III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single); + if (!III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single)) + return; } else { granules = 2; -#ifdef MPEG1 - III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single); +#ifdef MPEG1 + if (!III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single)) + return; #else fprintf(stderr,"Not supported\n"); #endif |