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

📄 frame.h

📁 mips上编译过的mpg 运行正常 环境:AU12
💻 H
字号:
/*	frame: Central data structures and opmitization hooks.	copyright 2007 by the mpg123 project - free software under the terms of the LGPL 2.1	see COPYING and AUTHORS files in distribution or http://mpg123.org	initially written by Thomas Orgis*/#ifndef MPG123_FRAME_H#define MPG123_FRAME_H#include <stdio.h>#include "mpg123.h"#include "id3.h"#include "icy.h"#include "reader.h"#include "optimize.h"/* max = 1728 */#define MAXFRAMESIZE 3456struct al_table{  short bits;  short d;};struct frame_index{	off_t data[INDEX_SIZE];	size_t fill;	off_t step;};/* the output buffer, used to be pcm_sample, pcm_point and audiobufsize */struct outbuffer{	unsigned char *data;	unsigned char *p; /* read pointer  */	size_t fill; /* fill from read pointer */	size_t size; /* that's actually more like a safe size, after we have more than that, flush it */};struct audioformat{	int encoding;	int channels;	long rate;};enum optdec { autodec=-1, nodec=0, generic, idrei, ivier, ifuenf, ifuenf_dither, mmx, dreidnow, dreidnowext, altivec, sse };enum optcla { nocla=0, normal, mmxsse };struct mpg123_pars_struct{	int verbose;    /* verbose level */	long flags; /* combination of above */	long force_rate;	int down_sample;	int rva; /* (which) rva to do: 0: nothing, 1: radio/mix/track 2: album/audiophile */	long halfspeed;	long doublespeed;#ifndef WIN32	long timeout;#endif#define NUM_CHANNELS 2	char audio_caps[NUM_CHANNELS][MPG123_RATES+1][MPG123_ENCODINGS];/*	long start_frame; */ /* frame offset to begin with *//*	long frame_number;*/ /* number of frames to decode */	long icy_interval;	scale_t outscale;	long resync_limit;};/* There is a lot to condense here... many ints can be merged as flags; though the main space is still consumed by buffers. */struct mpg123_handle_struct{	int fresh; /* to be moved into flags */	int new_format;	real hybrid_block[2][2][SBLIMIT*SSLIMIT];	int hybrid_blc[2];	/* the scratch vars for the decoders, sometimes real, sometimes short... sometimes int/long */ 	short *short_buffs[2][2];	real *real_buffs[2][2];	unsigned char *rawbuffs;	int rawbuffss;	int bo[2]; /* i486 and dither need a second value */	unsigned char* rawdecwin; /* the block with all decwins */	real *decwin; /* _the_ decode table */#ifdef OPT_MMXORSSE	/* I am not really sure that I need both of them... used in assembler */	float *decwin_mmx;	float *decwins;#endif	int have_eq_settings;	real equalizer[2][32];	/* for halfspeed mode */	unsigned char ssave[34];	int halfphase;	/* a raw buffer and a pointer into the middle for signed short conversion, only allocated on demand */	unsigned char *conv16to8_buf;	unsigned char *conv16to8;	/* There's some possible memory saving for stuff that is not _really_ dynamic. */	/* layer3 */	int longLimit[9][23];	int shortLimit[9][14];	real gainpow2[256+118+4]; /* not really dynamic, just different for mmx */	/* layer2 */	real muls[27][64];	/* also used by layer 1 */	/* decode_ntom */	unsigned long ntom_val[2];	unsigned long ntom_step;	/* special i486 fun */#ifdef OPT_I486	int *int_buffs[2][2];#endif	/* special altivec... */#ifdef OPT_ALTIVEC	real *areal_buffs[4][4];#endif	struct	{#ifdef OPT_MULTI		int (*synth_1to1)(real *,int, mpg123_handle *,int );		int (*synth_1to1_mono)(real *, mpg123_handle *);		int (*synth_1to1_mono2stereo)(real *, mpg123_handle *);		int (*synth_1to1_8bit)(real *,int, mpg123_handle *,int );		int (*synth_1to1_8bit_mono)(real *, mpg123_handle *);		int (*synth_1to1_8bit_mono2stereo)(real *, mpg123_handle *);#ifdef OPT_PENTIUM		int (*synth_1to1_i586_asm)(real *,int,unsigned char *, unsigned char *, int *, real *decwin);#endif#ifdef OPT_MMXORSSE		void (*make_decode_tables)(mpg123_handle *fr);		real (*init_layer3_gainpow2)(mpg123_handle*, int);		real* (*init_layer2_table)(mpg123_handle*, real*, double);#endif#ifdef OPT_3DNOW		void (*dct36)(real *,real *,real *,real *,real *);#endif		void (*dct64)(real *,real *,real *);#ifdef OPT_MPLAYER		void (*mpl_dct64)(real *,real *,real *);#endif#endif		enum optdec type;		enum optcla class;	} cpu_opts;	int verbose;    /* 0: nothing, 1: just print chosen decoder, 2: be verbose */	/* mpg123_handle */	const struct al_table *alloc;	/* could use types from optimize.h */	int (*synth)(real *,int, mpg123_handle*, int);	int (*synth_mono)(real *, mpg123_handle*);	int stereo; /* I _think_ 1 for mono and 2 for stereo */	int jsbound;#define SINGLE_STEREO -1#define SINGLE_LEFT    0#define SINGLE_RIGHT   1#define SINGLE_MIX     3	int single;	int II_sblimit;	int down_sample_sblimit;	int lsf; /* 0: MPEG 1.0; 1: MPEG 2.0/2.5 -- both used as bool and array index! */	int mpeg25;	int down_sample;	int header_change;	int lay;	int (*do_layer)(mpg123_handle *);	int error_protection;	int bitrate_index;	int sampling_frequency;	int padding;	int extension;	int mode;	int mode_ext;	int copyright;	int original;	int emphasis;	int framesize; /* computed framesize */	int freesize;  /* free format frame size */	enum mpg123_vbr vbr; /* 1 if variable bitrate was detected */	off_t num; /* frame offset ... */	/* bitstream info; bsi */	int bitindex;	unsigned char *wordpointer;	/* temporary storage for getbits stuff */	unsigned long ultmp;	unsigned char uctmp;	/* rva data, used in common.c, set in id3.c */		scale_t lastscale;	struct	{		int level[2];		float gain[2];		float peak[2];	} rva;	int do_recover;	/* input data */	off_t track_frames;	off_t track_samples;	double mean_framesize;	off_t mean_frames;	int fsizeold;	int ssize;	unsigned char bsspace[2][MAXFRAMESIZE+512]; /* MAXFRAMESIZE */	unsigned char *bsbuf;	unsigned char *bsbufold;	int bsnum;	unsigned long oldhead;	unsigned long firsthead;	int abr_rate;	struct frame_index index;	/* output data */	struct outbuffer buffer;	struct audioformat af;	int own_buffer;	size_t outblock; /* number of bytes that this frame produces (upper bound) */	int to_decode;   /* this frame holds data to be decoded */	int to_ignore;   /* the same, somehow */	off_t firstframe;  /* start decoding from here */	off_t lastframe;   /* last frame to decode (for gapless or num_frames limit) */	off_t ignoreframe; /* frames to decode but discard before firstframe */#ifdef GAPLESS	off_t firstoff; /* number of samples to ignore from firstframe */	off_t lastoff;  /* number of samples to use from lastframe */	off_t begin_s;  /* overall begin offset in samples */	off_t begin_os;	off_t end_s;    /* overall end offset in samples */	off_t end_os;#endif	unsigned int crc;	struct reader *rd; /* pointer to the reading functions */	struct reader_data rdat; /* reader data and state info */	struct mpg123_pars_struct p;	int err;	int decoder_change;	int delayed_change;	long clip;	/* the meta crap */	int metaflags;	unsigned char id3buf[128];	mpg123_id3v2 id3v2;	struct icy_meta icy;};/* generic init, does not include dynamic buffers */void frame_init(mpg123_handle *fr);void frame_init_par(mpg123_handle *fr, mpg123_pars *mp);/* output buffer and format */int  frame_outbuffer(mpg123_handle *fr);int  frame_output_format(mpg123_handle *fr);int frame_buffers(mpg123_handle *fr); /* various decoder buffers, needed once */int frame_reset(mpg123_handle* fr);   /* reset for next track */int frame_buffers_reset(mpg123_handle *fr);void frame_exit(mpg123_handle *fr);   /* end, free all buffers */int mpg123_print_index(mpg123_handle *fr, FILE* out);off_t frame_index_find(mpg123_handle *fr, off_t want_frame, off_t* get_frame);int frame_cpu_opt(mpg123_handle *fr, const char* cpu);enum optdec dectype(const char* decoder);int set_synth_functions(mpg123_handle *fr);void do_volume(mpg123_handle *fr, double factor);void do_rva(mpg123_handle *fr);/* samples per frame ...Layer ILayer IILayer IIIMPEG-138411521152MPEG-2 LSF3841152576MPEG 2.53841152576*/#define spf(fr) ((fr)->lay == 1 ? 384 : ((fr)->lay==2 ? 1152 : ((fr)->lsf || (fr)->mpeg25 ? 576 : 1152)))#ifdef GAPLESS/* well, I take that one for granted... at least layer3 */#define GAPLESS_DELAY 529/* still fine-tuning the "real music" window... see read_frame */void frame_gapless_init(mpg123_handle *fr, off_t b, off_t e);void frame_gapless_realinit(mpg123_handle *fr);/*void frame_gapless_position(mpg123_handle* fr);void frame_gapless_bytify(mpg123_handle *fr);void frame_gapless_ignore(mpg123_handle *fr, off_t frames);*//* void frame_gapless_buffercheck(mpg123_handle *fr); */#endif/*	Seeking core functions:	- convert input sample offset to output sample offset	- convert frame offset to output sample offset	- get leading frame offset for output sample offset	The offsets are "unadjusted"/internal; resampling is being taken care of.*/off_t frame_ins2outs(mpg123_handle *fr, off_t ins);off_t frame_outs(mpg123_handle *fr, off_t num);off_t frame_offset(mpg123_handle *fr, off_t outs);void frame_set_frameseek(mpg123_handle *fr, off_t fe);void frame_set_seek(mpg123_handle *fr, off_t sp);off_t frame_tell_seek(mpg123_handle *fr);/* adjust volume to current outscale and rva values if wanted */void do_rva(mpg123_handle *fr);#endif

⌨️ 快捷键说明

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