00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00025 # ifdef HAVE_CONFIG_H
00026 # include "config.h"
00027 # endif
00028
00029 # include "global.h"
00030
00031 # include <stdlib.h>
00032
00033 # include "bit.h"
00034 # include "stream.h"
00035 # include "frame.h"
00036 # include "timer.h"
00037 # include "layer12.h"
00038 # include "layer3.h"
00039
00040 static
00041 unsigned long const bitrate_table[5][15] = {
00042
00043 { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000,
00044 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
00045 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000,
00046 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
00047 { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000,
00048 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
00049
00050
00051 { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000,
00052 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
00053 { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000,
00054 64000, 80000, 96000, 112000, 128000, 144000, 160000 }
00055 };
00056
00057 static
00058 unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };
00059
00060 static
00061 int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
00062 mad_layer_I,
00063 mad_layer_II,
00064 mad_layer_III
00065 };
00066
00070 void mad_header_init(struct mad_header *header)
00071 {
00072 header->layer = 0;
00073 header->mode = 0;
00074 header->mode_extension = 0;
00075 header->emphasis = 0;
00076
00077 header->bitrate = 0;
00078 header->samplerate = 0;
00079
00080 header->crc_check = 0;
00081 header->crc_target = 0;
00082
00083 header->flags = 0;
00084 header->private_bits = 0;
00085
00086 header->duration = mad_timer_zero;
00087 }
00088
00092 void mad_frame_init(struct mad_frame *frame)
00093 {
00094 mad_header_init(&frame->header);
00095
00096 frame->options = 0;
00097
00098 frame->overlap = 0;
00099 mad_frame_mute(frame);
00100 }
00101
00105 void mad_frame_finish(struct mad_frame *frame)
00106 {
00107 mad_header_finish(&frame->header);
00108
00109 if (frame->overlap) {
00110 free(frame->overlap);
00111 frame->overlap = 0;
00112 }
00113 }
00114
00118 static
00119 int decode_header(struct mad_header *header, struct mad_stream *stream)
00120 {
00121 unsigned int index;
00122
00123 header->flags = 0;
00124 header->private_bits = 0;
00125
00126
00127
00128
00129 mad_bit_skip(&stream->ptr, 11);
00130
00131
00132 if (mad_bit_read(&stream->ptr, 1) == 0)
00133 header->flags |= MAD_FLAG_MPEG_2_5_EXT;
00134
00135
00136 if (mad_bit_read(&stream->ptr, 1) == 0)
00137 header->flags |= MAD_FLAG_LSF_EXT;
00138 else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
00139 stream->error = MAD_ERROR_LOSTSYNC;
00140 return -1;
00141 }
00142
00143
00144 header->layer = 4 - mad_bit_read(&stream->ptr, 2);
00145
00146 if (header->layer == 4) {
00147 stream->error = MAD_ERROR_BADLAYER;
00148 return -1;
00149 }
00150
00151
00152 if (mad_bit_read(&stream->ptr, 1) == 0) {
00153 header->flags |= MAD_FLAG_PROTECTION;
00154 header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
00155 }
00156
00157
00158 index = mad_bit_read(&stream->ptr, 4);
00159
00160 if (index == 15) {
00161 stream->error = MAD_ERROR_BADBITRATE;
00162 return -1;
00163 }
00164
00165 if (header->flags & MAD_FLAG_LSF_EXT)
00166 header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
00167 else
00168 header->bitrate = bitrate_table[header->layer - 1][index];
00169
00170
00171 index = mad_bit_read(&stream->ptr, 2);
00172
00173 if (index == 3) {
00174 stream->error = MAD_ERROR_BADSAMPLERATE;
00175 return -1;
00176 }
00177
00178 header->samplerate = samplerate_table[index];
00179
00180 if (header->flags & MAD_FLAG_LSF_EXT) {
00181 header->samplerate /= 2;
00182
00183 if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
00184 header->samplerate /= 2;
00185 }
00186
00187
00188 if (mad_bit_read(&stream->ptr, 1))
00189 header->flags |= MAD_FLAG_PADDING;
00190
00191
00192 if (mad_bit_read(&stream->ptr, 1))
00193 header->private_bits |= MAD_PRIVATE_HEADER;
00194
00195
00196 header->mode = 3 - mad_bit_read(&stream->ptr, 2);
00197
00198
00199 header->mode_extension = mad_bit_read(&stream->ptr, 2);
00200
00201
00202 if (mad_bit_read(&stream->ptr, 1))
00203 header->flags |= MAD_FLAG_COPYRIGHT;
00204
00205
00206 if (mad_bit_read(&stream->ptr, 1))
00207 header->flags |= MAD_FLAG_ORIGINAL;
00208
00209
00210 header->emphasis = mad_bit_read(&stream->ptr, 2);
00211
00212 # if defined(OPT_STRICT)
00213
00214
00215
00216
00217
00218 if (header->emphasis == MAD_EMPHASIS_RESERVED) {
00219 stream->error = MAD_ERROR_BADEMPHASIS;
00220 return -1;
00221 }
00222 # endif
00223
00224
00225
00226
00227 if (header->flags & MAD_FLAG_PROTECTION)
00228 header->crc_target = mad_bit_read(&stream->ptr, 16);
00229
00230 return 0;
00231 }
00232
00236 static
00237 int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
00238 {
00239 struct mad_bitptr keep_ptr;
00240 unsigned long rate = 0;
00241 unsigned int pad_slot, slots_per_frame;
00242 unsigned char const *ptr = 0;
00243
00244 keep_ptr = stream->ptr;
00245
00246 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
00247 slots_per_frame = (header->layer == MAD_LAYER_III &&
00248 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
00249
00250 while (mad_stream_sync(stream) == 0) {
00251 struct mad_stream peek_stream;
00252 struct mad_header peek_header;
00253
00254 peek_stream = *stream;
00255 peek_header = *header;
00256
00257 if (decode_header(&peek_header, &peek_stream) == 0 &&
00258 peek_header.layer == header->layer &&
00259 peek_header.samplerate == header->samplerate) {
00260 unsigned int N;
00261
00262 ptr = mad_bit_nextbyte(&stream->ptr);
00263
00264 N = ptr - stream->this_frame;
00265
00266 if (header->layer == MAD_LAYER_I) {
00267 rate = (unsigned long) header->samplerate *
00268 (N - 4 * pad_slot + 4) / 48 / 1000;
00269 }
00270 else {
00271 rate = (unsigned long) header->samplerate *
00272 (N - pad_slot + 1) / slots_per_frame / 1000;
00273 }
00274
00275 if (rate >= 8)
00276 break;
00277 }
00278
00279 mad_bit_skip(&stream->ptr, 8);
00280 }
00281
00282 stream->ptr = keep_ptr;
00283
00284 if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
00285 stream->error = MAD_ERROR_LOSTSYNC;
00286 return -1;
00287 }
00288
00289 stream->freerate = rate * 1000;
00290
00291 return 0;
00292 }
00293
00297 int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
00298 {
00299 register unsigned char const *ptr, *end;
00300 unsigned int pad_slot, N;
00301
00302 ptr = stream->next_frame;
00303 end = stream->bufend;
00304
00305 if (ptr == 0) {
00306 stream->error = MAD_ERROR_BUFPTR;
00307 goto fail;
00308 }
00309
00310
00311 if (stream->skiplen) {
00312 if (!stream->sync)
00313 ptr = stream->this_frame;
00314
00315 if (end - ptr < stream->skiplen) {
00316 stream->skiplen -= end - ptr;
00317 stream->next_frame = end;
00318
00319 stream->error = MAD_ERROR_BUFLEN;
00320 goto fail;
00321 }
00322
00323 ptr += stream->skiplen;
00324 stream->skiplen = 0;
00325
00326 stream->sync = 1;
00327 }
00328
00329 sync:
00330
00331 if (stream->sync) {
00332 if (end - ptr < MAD_BUFFER_GUARD) {
00333 stream->next_frame = ptr;
00334
00335 stream->error = MAD_ERROR_BUFLEN;
00336 goto fail;
00337 }
00338 else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
00339
00340 stream->this_frame = ptr;
00341 stream->next_frame = ptr + 1;
00342
00343 stream->error = MAD_ERROR_LOSTSYNC;
00344 goto fail;
00345 }
00346 }
00347 else {
00348 mad_bit_init(&stream->ptr, ptr);
00349
00350 if (mad_stream_sync(stream) == -1) {
00351 if (end - stream->next_frame >= MAD_BUFFER_GUARD)
00352 stream->next_frame = end - MAD_BUFFER_GUARD;
00353
00354 stream->error = MAD_ERROR_BUFLEN;
00355 goto fail;
00356 }
00357
00358 ptr = mad_bit_nextbyte(&stream->ptr);
00359 }
00360
00361
00362 stream->this_frame = ptr;
00363 stream->next_frame = ptr + 1;
00364
00365 mad_bit_init(&stream->ptr, stream->this_frame);
00366
00367 if (decode_header(header, stream) == -1)
00368 goto fail;
00369
00370
00371 mad_timer_set(&header->duration, 0,
00372 32 * MAD_NSBSAMPLES(header), header->samplerate);
00373
00374
00375 if (header->bitrate == 0) {
00376 if ((stream->freerate == 0 || !stream->sync ||
00377 (header->layer == MAD_LAYER_III && stream->freerate > 640000)) &&
00378 free_bitrate(stream, header) == -1)
00379 goto fail;
00380
00381 header->bitrate = stream->freerate;
00382 header->flags |= MAD_FLAG_FREEFORMAT;
00383 }
00384
00385
00386 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
00387
00388 if (header->layer == MAD_LAYER_I)
00389 N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
00390 else {
00391 unsigned int slots_per_frame;
00392
00393 slots_per_frame = (header->layer == MAD_LAYER_III &&
00394 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
00395
00396 N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
00397 }
00398
00399
00400 if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
00401 stream->next_frame = stream->this_frame;
00402
00403 stream->error = MAD_ERROR_BUFLEN;
00404 goto fail;
00405 }
00406
00407 stream->next_frame = stream->this_frame + N;
00408
00409 if (!stream->sync) {
00410
00411
00412 ptr = stream->next_frame;
00413 if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
00414 ptr = stream->next_frame = stream->this_frame + 1;
00415 goto sync;
00416 }
00417
00418 stream->sync = 1;
00419 }
00420
00421 header->flags |= MAD_FLAG_INCOMPLETE;
00422
00423 return 0;
00424
00425 fail:
00426 stream->sync = 0;
00427
00428 return -1;
00429 }
00430
00434 int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
00435 {
00436 frame->options = stream->options;
00437
00438
00439
00440
00441 if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
00442 mad_header_decode(&frame->header, stream) == -1)
00443 goto fail;
00444
00445
00446
00447 frame->header.flags &= ~MAD_FLAG_INCOMPLETE;
00448
00449 if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
00450 if (!MAD_RECOVERABLE(stream->error))
00451 stream->next_frame = stream->this_frame;
00452
00453 goto fail;
00454 }
00455
00456
00457
00458 if (frame->header.layer != MAD_LAYER_III) {
00459 struct mad_bitptr next_frame;
00460
00461 mad_bit_init(&next_frame, stream->next_frame);
00462
00463 stream->anc_ptr = stream->ptr;
00464 stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);
00465
00466 mad_bit_finish(&next_frame);
00467 }
00468
00469 return 0;
00470
00471 fail:
00472 stream->anc_bitlen = 0;
00473 return -1;
00474 }
00475
00479 void mad_frame_mute(struct mad_frame *frame)
00480 {
00481 unsigned int s, sb;
00482
00483 for (s = 0; s < 36; ++s) {
00484 for (sb = 0; sb < 32; ++sb) {
00485 frame->sbsample[0][s][sb] =
00486 frame->sbsample[1][s][sb] = 0;
00487 }
00488 }
00489
00490 if (frame->overlap) {
00491 for (s = 0; s < 18; ++s) {
00492 for (sb = 0; sb < 32; ++sb) {
00493 (*frame->overlap)[0][sb][s] =
00494 (*frame->overlap)[1][sb][s] = 0;
00495 }
00496 }
00497 }
00498 }