Audio-MPEG

 view release on metacpan or  search on metacpan

MPEG.xs  view on Meta::CPAN

			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 )