diff --git a/libavformat/swf.c b/libavformat/swf.c index 1efcfd4a3f..7ec3f7f767 100644 --- a/libavformat/swf.c +++ b/libavformat/swf.c @@ -800,6 +800,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) } } else if ( ( tag == TAG_STREAMHEAD || tag == TAG_STREAMHEAD2 ) && !ast) { /* streaming found */ + int sample_rate_code; get_byte(pb); v = get_byte(pb); swf->samples_per_frame = get_le16(pb); @@ -811,20 +812,10 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) if (v & 0x20) ast->codec->codec_id = CODEC_ID_MP3; ast->need_parsing = 1; - switch((v>> 2) & 0x03) { - case 1: - ast->codec->sample_rate = 11025; - break; - case 2: - ast->codec->sample_rate = 22050; - break; - case 3: - ast->codec->sample_rate = 44100; - break; - default: + sample_rate_code= (v>>2) & 3; + if (!sample_rate_code) return AVERROR_IO; - } - + ast->codec->sample_rate = 11025 << (sample_rate_code-1); if (len > 4) url_fskip(pb,len-4);