Audio-MPEG
view release on metacpan or search on metacpan
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 (! 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
total_frames(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->current_frame;
OUTPUT:
RETVAL
double
frame_duration(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = (double)mad_timer_count(THIS->frame->header.duration,
MAD_UNITS_MILLISECONDS) / 1000.0;
OUTPUT:
RETVAL
double
total_duration(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = (double)mad_timer_count(THIS->total_duration,
MAD_UNITS_MILLISECONDS) / 1000.0;
OUTPUT:
RETVAL
unsigned int
bit_rate(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->frame->header.bitrate / 1000;
OUTPUT:
RETVAL
double
average_bit_rate(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = (double)THIS->accum_bitrate / (double)THIS->current_frame;
OUTPUT:
RETVAL
unsigned int
sample_rate(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->frame->header.samplerate;
OUTPUT:
RETVAL
unsigned int
layer(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->frame->header.layer;
OUTPUT:
RETVAL
unsigned short
channels(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = THIS->synth->pcm.channels;
OUTPUT:
RETVAL
struct mad_pcm *
pcm(THIS)
Audio_MPEG_Decode THIS
CODE:
RETVAL = &THIS->synth->pcm;
OUTPUT:
RETVAL
#
# mad_fixed_t PCM->denormalized output
#
MODULE = Audio::MPEG PACKAGE = Audio::MPEG::Output
Audio_MPEG_Output
new(CLASS, params_data_ref = &PL_sv_undef)
( run in 1.130 second using v1.01-cache-2.11-cpan-39bf76dae61 )