ad_mp3lib.c

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 82 行

C
82
字号
#include <uclib.h>#include <uclib.h>#include <uclib.h>#include "config.h"#include "ad_internal.h"static ad_info_t info = {	"MPEG layer-2, layer-3",	"mp3lib",	"Nick Kurshev",	"mpg123",	"Optimized to MMX/SSE/3Dnow!"};LIBAD_EXTERN(mp3lib)#include "mp3lib/mp3.h"extern int fakemono;static sh_audio_t* dec_audio_sh=NULL;// MP3 decoder buffer callback:int mplayer_audio_read(char *buf,int size){  return demux_read_data(dec_audio_sh->ds,buf,size);}static int preinit(sh_audio_t *sh){  sh->audio_out_minsize=32*36*2*2; //4608;  return 1;}static int init(sh_audio_t *sh){  // MPEG Audio:  dec_audio_sh=sh; // save sh_audio for the callback://  MP3_Init(fakemono,mplayer_accel,&mplayer_audio_read); // TODO!!!#ifdef USE_FAKE_MONO  MP3_Init(fakemono);#else  MP3_Init();#endif  MP3_samplerate=MP3_channels=0;  sh->a_buffer_len=MP3_DecodeFrame(sh->a_buffer,-1);  if(!sh->a_buffer_len) return 0; // unsupported layer/format  sh->channels=2; // hack  sh->samplesize=2;  sh->samplerate=MP3_samplerate;  sh->i_bps=MP3_bitrate*(1000/8);  MP3_PrintHeader();  return 1;}static void uninit(sh_audio_t *sh){}static int control(sh_audio_t *sh,int cmd,void* arg, ...){    switch(cmd)    {      case ADCTRL_RESYNC_STREAM:          MP3_DecodeFrame(NULL,-2); // resync          MP3_DecodeFrame(NULL,-2); // resync          MP3_DecodeFrame(NULL,-2); // resync	  return CONTROL_TRUE;      case ADCTRL_SKIP_FRAME:	  MP3_DecodeFrame(NULL,-2); // skip MPEG frame	  return CONTROL_TRUE;    }  return CONTROL_UNKNOWN;}static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){   return MP3_DecodeFrame(buf,-1);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?