⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amiga_mpega.c

📁 音频编码
💻 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 + -