Initial commit.
This commit is contained in:
141
code/mp3code/mp3struct.h
Normal file
141
code/mp3code/mp3struct.h
Normal file
@@ -0,0 +1,141 @@
|
||||
// Filename: mp3struct.h
|
||||
//
|
||||
// this file is my struct to gather all loose MP3 global vars into one struct so we can do multiple-stream decompression
|
||||
//
|
||||
|
||||
#ifndef MP3STRUCT_H
|
||||
#define MP3STRUCT_H
|
||||
|
||||
#pragma warning (disable : 4201 ) // nonstandard extension used : nameless struct/union
|
||||
|
||||
#include "small_header.h" // for SAMPLE and IN_OUT
|
||||
|
||||
typedef void (*SBT_FUNCTION) (float *sample, short *pcm, int n);
|
||||
typedef void (*XFORM_FUNCTION) (void *pcm, int igr);
|
||||
typedef IN_OUT(*DECODE_FUNCTION) (unsigned char *bs, unsigned char *pcm);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
SBT_FUNCTION sbt;
|
||||
|
||||
float cs_factor[3][64]; // 768 bytes
|
||||
|
||||
int nbat[4];
|
||||
int bat[4][16];
|
||||
int max_sb;
|
||||
int stereo_sb;
|
||||
int bit_skip;
|
||||
|
||||
float* cs_factorL1;
|
||||
int nbatL1;
|
||||
|
||||
};//L1_2;
|
||||
|
||||
struct
|
||||
{
|
||||
SBT_FUNCTION sbt_L3;
|
||||
XFORM_FUNCTION Xform;
|
||||
DECODE_FUNCTION decode_function;
|
||||
|
||||
SAMPLE sample[2][2][576]; // if this isn't kept per stream then the decode breaks up
|
||||
|
||||
// the 4k version of these 2 seems to work for everything, but I'm reverting to original 8k for safety jic.
|
||||
//
|
||||
#define NBUF (8*1024)
|
||||
#define BUF_TRIGGER (NBUF-1500)
|
||||
// #define NBUF (4096) // 2048 works for all except 133+ kbps VBR files, 4096 copes with these
|
||||
// #define BUF_TRIGGER ((NBUF/4)*3)
|
||||
|
||||
unsigned char buf[NBUF];
|
||||
int buf_ptr0;
|
||||
int buf_ptr1;
|
||||
int main_pos_bit;
|
||||
|
||||
|
||||
int band_limit_nsb;
|
||||
int nBand[2][22]; /* [long/short][cb] */
|
||||
int sfBandIndex[2][22]; /* [long/short][cb] */
|
||||
int half_outbytes;
|
||||
int crcbytes;
|
||||
int nchan;
|
||||
int ms_mode;
|
||||
int is_mode;
|
||||
unsigned int zero_level_pcm;
|
||||
int mpeg25_flag;
|
||||
int band_limit;
|
||||
int band_limit21;
|
||||
int band_limit12;
|
||||
int gain_adjust;
|
||||
int ncbl_mixed;
|
||||
};//L3;
|
||||
};
|
||||
// from csbt.c...
|
||||
//
|
||||
// if this isn't kept per stream then the decode breaks up
|
||||
signed int vb_ptr; //
|
||||
signed int vb2_ptr; //
|
||||
float vbuf[512]; //
|
||||
float vbuf2[512]; // this can be lost if we stick to mono samples
|
||||
|
||||
// L3 only...
|
||||
//
|
||||
int sr_index; // L3 only (99%)
|
||||
int id;
|
||||
|
||||
// any type...
|
||||
//
|
||||
int outvalues;
|
||||
int outbytes;
|
||||
int framebytes;
|
||||
int pad;
|
||||
int nsb_limit;
|
||||
|
||||
// stuff added now that the game uses streaming MP3s...
|
||||
//
|
||||
byte *pbSourceData; // a useful dup ptr only, this whole struct will be owned by an sfx_t struct that has the actual data ptr field
|
||||
int iSourceBytesRemaining;
|
||||
int iSourceReadIndex;
|
||||
int iSourceFrameBytes;
|
||||
#ifdef _DEBUG
|
||||
int iSourceFrameCounter; // not really important
|
||||
#endif
|
||||
int iBytesDecodedTotal;
|
||||
int iBytesDecodedThisPacket;// not sure how useful this will be, it's only per-frame, so will always be full frame size (eg 2304 or below for mono) except possibly for the last frame?
|
||||
|
||||
int iRewind_FinalReductionCode;
|
||||
int iRewind_FinalConvertCode;
|
||||
int iRewind_SourceBytesRemaining;
|
||||
int iRewind_SourceReadIndex;
|
||||
byte bDecodeBuffer[2304*2]; // *2 to allow for stereo now
|
||||
int iCopyOffset; // used for painting to DMA-feeder, since 2304 won't match the size it wants
|
||||
|
||||
// some new stuff added for dynamic music, to allow "how many seconds left to play" queries...
|
||||
//
|
||||
// ( m_lengthInSeconds = ((iUnpackedDataLength / iRate) / iChannels) / iWidth; )
|
||||
//
|
||||
// Note that these fields are only valid/initialised if MP3Stream_InitPlayingTimeFields() was called.
|
||||
// If not, this->iTimeQuery_UnpackedLength will be zero.
|
||||
//
|
||||
int iTimeQuery_UnpackedLength;
|
||||
int iTimeQuery_SampleRate;
|
||||
int iTimeQuery_Channels;
|
||||
int iTimeQuery_Width;
|
||||
|
||||
} MP3STREAM, *LP_MP3STREAM;
|
||||
|
||||
#define MP3STUFF_KNOWN
|
||||
|
||||
extern LP_MP3STREAM pMP3Stream;
|
||||
extern int bFastEstimateOnly;
|
||||
|
||||
#pragma warning (default : 4201 ) // nonstandard extension used : nameless struct/union
|
||||
#pragma warning (disable : 4711 ) // function 'xxxx' selected for automatic inline expansion
|
||||
|
||||
#endif // #ifndef MP3STRUCT_H
|
||||
|
||||
////////////////// eof /////////////////////
|
||||
|
||||
Reference in New Issue
Block a user