📄 amiga_mpega.c
字号:
/* MPGLIB replacement using mpega.library (AmigaOS) * Written by Thomas Wenzel and Sigbj鴕n (CISC) Skj鎟et. * * Big thanks to St閜hane Tavernard for mpega.library. * *//* $Id: amiga_mpega.c,v 1.2 2001/02/05 00:34:37 cisc Exp $ */#ifdef HAVE_CONFIG_H#include <config.h>#endif#ifdef AMIGA_MPEGA#define __USE_SYSBASE#include "lame.h"#include <stdio.h>#include <stdlib.h>/* We need a small workaround here so GCC doesn't fail upon redefinition. :P */#define FLOAT _FLOAT#include <proto/exec.h>#include <proto/mpega.h>#undef _FLOAT#ifndef __GNUC__#include <dos.h>#endifstruct Library *MPEGABase=NULL;MPEGA_STREAM *mstream=NULL;MPEGA_CTRL mctrl;static const int smpls[2][4]={/* Layer x I II III */ {0,384,1152,1152}, /* MPEG-1 */ {0,384,1152, 576} /* MPEG-2(.5) */};#ifndef __GNUC__static int break_cleanup(void){ /* Dummy break function to make atexit() work. :P */ return 1;}#endifstatic void exit_cleanup(void){ if(mstream) { MPEGA_close(mstream); mstream = NULL; } if(MPEGABase) { CloseLibrary(MPEGABase); MPEGABase = NULL; }}int lame_decode_initfile(const char *fullname, mp3data_struct *mp3data){ mctrl.bs_access = NULL; mctrl.layer_1_2.mono.quality = 2; mctrl.layer_1_2.stereo.quality = 2; mctrl.layer_1_2.mono.freq_div = 1; mctrl.layer_1_2.stereo.freq_div = 1; mctrl.layer_1_2.mono.freq_max = 48000; mctrl.layer_1_2.stereo.freq_max = 48000; mctrl.layer_3.mono.quality = 2; mctrl.layer_3.stereo.quality = 2; mctrl.layer_3.mono.freq_div = 1; mctrl.layer_3.stereo.freq_div = 1; mctrl.layer_3.mono.freq_max = 48000; mctrl.layer_3.stereo.freq_max = 48000; mctrl.layer_1_2.force_mono = 0; mctrl.layer_3.force_mono = 0; MPEGABase = OpenLibrary("mpega.library", 2); if(!MPEGABase) { fprintf(stderr, "Unable to open mpega.library v2\n"); exit(1); }#ifndef __GNUC__ onbreak(break_cleanup);#endif atexit(exit_cleanup); mp3data->header_parsed = 0; mstream=MPEGA_open((char *)fullname, &mctrl); if(!mstream) return (-1); mp3data->header_parsed = 1; mp3data->stereo = mstream->dec_channels; mp3data->samplerate = mstream->dec_frequency; mp3data->bitrate = mstream->bitrate; mp3data->nsamp = (float)mstream->ms_duration/1000 * mstream->dec_frequency; mp3data->mode = mstream->mode; mp3data->mode_ext = 0; /* mpega.library doesn't supply this info! :( */ mp3data->framesize = smpls[mstream->norm-1][mstream->layer]; return 0;}int lame_decode_fromfile(FILE *fd, short pcm_l[], short pcm_r[], mp3data_struct *mp3data){ int outsize=0; WORD *b[MPEGA_MAX_CHANNELS]; b[0]=pcm_l; b[1]=pcm_r; mp3data->header_parsed = 0; while ((outsize == 0) || (outsize == MPEGA_ERR_BADFRAME)) /* Skip bad frames */ outsize = MPEGA_decode_frame(mstream, b); if (outsize < 0) return (-1); mp3data->header_parsed = 1; mp3data->stereo = mstream->dec_channels; mp3data->samplerate = mstream->dec_frequency; mp3data->bitrate = mstream->bitrate; mp3data->mode = mstream->mode; mp3data->mode_ext = 0; /* mpega.library doesn't supply this info! :( */ mp3data->framesize = smpls[mstream->norm-1][mstream->layer]; return outsize;}#endif /* AMIGA_MPEGA */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -