Audio-MPEG
view release on metacpan or search on metacpan
stream->error = 0x0666;
tagsize = (((stream->this_frame[6] & 0x7f) << 21)
| ((stream->this_frame[7] & 0x7f) << 14)
| ((stream->this_frame[8] & 0x7f) << 7)
| ((stream->this_frame[9] & 0x7f))) ; //+ 10;
if (tagsize > stream->bufend - stream->this_frame) {
mad_stream_skip(stream, stream->bufend -
stream->this_frame);
} else {
mad_stream_skip(stream, tagsize);
}
goto decode_loop;
}
/* fall through case */
default:
err++;
break;
}
}
if (! header_only) {
if (mad_frame_decode(frame, stream) == -1) {
switch (stream->error) {
case MAD_ERROR_BUFLEN:
XSRETURN_NO;
break;
case MAD_ERROR_LOSTSYNC:
if (strncmp(stream->this_frame, "TAG", 3) == 0) {
mad_stream_skip(stream, 128);
goto decode_loop;
} else if (strncmp(stream->this_frame, "ID3", 3) == 0) {
stream->error = 0x0666;
tagsize = (((stream->this_frame[6] & 0x7f) << 21)
| ((stream->this_frame[7] & 0x7f) << 14)
| ((stream->this_frame[8] & 0x7f) << 7)
| ((stream->this_frame[9] & 0x7f))) ; //+ 10;
if (tagsize > stream->bufend - stream->this_frame) {
mad_stream_skip(stream, stream->bufend -
stream->this_frame);
} else {
mad_stream_skip(stream, tagsize);
}
goto decode_loop;
}
/* fall through case */
default:
err++;
break;
}
}
}
if (MAD_RECOVERABLE(stream->error))
err = 0;
if (!err) {
THIS->current_frame++;
THIS->accum_bitrate += header->bitrate / 1000;
mad_timer_add(&THIS->total_duration, header->duration);
}
XSRETURN_YES;
#
# Create PCM stream (in mad_fixed_t type) from decoded frame
#
void
synth_frame(THIS)
Audio_MPEG_Decode THIS
CODE:
mad_synth_frame(THIS->synth, THIS->frame);
#
# Return last error code
#
unsigned int
err(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->stream->error;
OUTPUT:
RETVAL
int
err_ok(THIS)
Audio_MPEG_Decode THIS
CODE:
switch (THIS->stream->error) {
case 0:
case MAD_ERROR_BUFLEN:
case MAD_ERROR_LOSTSYNC:
case MAD_ERROR_BADCRC:
case MAD_ERROR_BADDATAPTR:
RETVAL = 1;
break;
default:
RETVAL = 0;
break;
}
OUTPUT:
RETVAL
#
# Return English error string of last error
#
char *
errstr(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = (char *)decode_error_str(THIS->stream->error);
OUTPUT:
RETVAL
unsigned int
current_frame(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->current_frame;
OUTPUT:
RETVAL
unsigned int
( run in 0.551 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )