Mercurial > audlegacy-plugins
comparison src/madplug/plugin.c @ 897:44a922a4a591 trunk
[svn] - fix validation of mpeg2 files, by ccr.
| author | nenolod |
|---|---|
| date | Sat, 24 Mar 2007 17:31:14 -0700 |
| parents | 0f9c8d4d3ac4 |
| children | a8494c2a87eb |
comparison
equal
deleted
inserted
replaced
| 896:f0846bdd9de6 | 897:44a922a4a591 |
|---|---|
| 196 | 196 |
| 197 /* check if layer bits (17-18) are good */ | 197 /* check if layer bits (17-18) are good */ |
| 198 layer = (head >> 17) & 0x3; | 198 layer = (head >> 17) & 0x3; |
| 199 if (!layer) | 199 if (!layer) |
| 200 return FALSE; /* 00 = reserved */ | 200 return FALSE; /* 00 = reserved */ |
| 201 layer = 3 - layer; | 201 layer = 4 - layer; |
| 202 | 202 |
| 203 /* check if bitrate index bits (12-15) are acceptable */ | 203 /* check if bitrate index bits (12-15) are acceptable */ |
| 204 bitIndex = (head >> 12) & 0xf; | 204 bitIndex = (head >> 12) & 0xf; |
| 205 | 205 |
| 206 /* 1111 and 0000 are reserved values for all layers */ | 206 /* 1111 and 0000 are reserved values for all layers */ |
| 241 if (chanMode == 0x3) { | 241 if (chanMode == 0x3) { |
| 242 /* single channel with bitrate > 192 */ | 242 /* single channel with bitrate > 192 */ |
| 243 if (bitRate > 192) | 243 if (bitRate > 192) |
| 244 return FALSE; | 244 return FALSE; |
| 245 } else { | 245 } else { |
| 246 /* any other mode with bitrates 32-56 and 80 */ | 246 /* any other mode with bitrates 32-56 and 80. |
| 247 * NOTICE! this check is not entirely correct, but I think | |
| 248 * it is sufficient in most cases. | |
| 249 */ | |
| 247 if (((bitRate >= 32 && bitRate <= 56) || bitRate == 80)) | 250 if (((bitRate >= 32 && bitRate <= 56) || bitRate == 80)) |
| 248 return FALSE; | 251 return FALSE; |
| 249 } | 252 } |
| 250 } | 253 } |
| 251 | 254 |
| 252 /* calculate approx. frame size */ | 255 /* calculate approx. frame size */ |
| 253 padding = (head >> 9) & 1; | 256 padding = (head >> 9) & 1; |
| 254 sampleRate = mp3_samplerate_table[version][sampleIndex]; | 257 sampleRate = mp3_samplerate_table[version][sampleIndex]; |
| 255 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding); | 258 if (layer == 1) |
| 256 | 259 *frameSize = ((12 * bitRate * 1000 / sampleRate) + padding) * 4; |
| 260 else | |
| 261 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding); | |
| 262 | |
| 257 /* check if bits 16 - 19 are all set (MPEG 1 Layer I, not protected?) */ | 263 /* check if bits 16 - 19 are all set (MPEG 1 Layer I, not protected?) */ |
| 258 if (((head >> 19) & 1) == 1 && | 264 if (((head >> 19) & 1) == 1 && |
| 259 ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1) | 265 ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1) |
| 260 return FALSE; | 266 return FALSE; |
| 261 | 267 |
