OSDN Git Service

wav: Refactor the tag checking into a switch statement
authorTomas Härdin <tomas.hardin@codemill.se>
Thu, 17 Feb 2011 14:58:10 +0000 (15:58 +0100)
committerAnton Khirnov <anton@khirnov.net>
Wed, 13 Jul 2011 09:57:51 +0000 (11:57 +0200)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
libavformat/wav.c

index 9f902be..cf815ef 100644 (file)
@@ -334,7 +334,8 @@ static int wav_read_header(AVFormatContext *s,
         size = next_tag(pb, &tag);
         next_tag_ofs = avio_tell(pb) + size;
 
-        if (tag == MKTAG('f', 'm', 't', ' ')) {
+        switch (tag) {
+        case MKTAG('f', 'm', 't', ' '):
             /* only parse the first 'fmt ' tag found */
             if (!got_fmt && (ret = wav_parse_fmt_tag(s, size, &st) < 0)) {
                 return ret;
@@ -342,18 +343,22 @@ static int wav_read_header(AVFormatContext *s,
                 av_log(s, AV_LOG_WARNING, "found more than one 'fmt ' tag\n");
 
             got_fmt = 1;
-        } else if (tag == MKTAG('d', 'a', 't', 'a')) {
+            break;
+        case MKTAG('d', 'a', 't', 'a'):
             if (!got_fmt) {
                 av_log(s, AV_LOG_ERROR, "found no 'fmt ' tag before the 'data' tag\n");
                 return AVERROR_INVALIDDATA;
             }
 
+            goto break_loop;
+        case MKTAG('f','a','c','t'):
+            if (!sample_count)
+                sample_count = avio_rl32(pb);
             break;
-        }else if (tag == MKTAG('f','a','c','t') && !sample_count){
-            sample_count = avio_rl32(pb);
         }
         avio_seek(pb, next_tag_ofs, SEEK_SET);
     }
+break_loop:
     if (rf64)
         size = data_size;
     if (size < 0)