// decoding functions static int read_adpcm_block_headers(HMMIO rw, adpcm_fmt_t *fmt) { int i; int max = fmt->adpcm.wav.nChannels; if (fmt->bytes_remaining < fmt->adpcm.wav.nBlockAlign) { return 0; } fmt->bytes_remaining -= fmt->adpcm.wav.nBlockAlign; fmt->bytes_processed += fmt->adpcm.wav.nBlockAlign; for (i = 0; i < max; i++) { IF_ERR(!read_ubyte(rw, &fmt->header[i].bPredictor), 0); } for (i = 0; i < max; i++) { IF_ERR(!read_ushort(rw, &fmt->header[i].iDelta), 0); } for (i = 0; i < max; i++) { IF_ERR(!read_short(rw, &fmt->header[i].iSamp1), 0); } for (i = 0; i < max; i++) { IF_ERR(!read_short(rw, &fmt->header[i].iSamp2), 0); } fmt->samples_left_in_block = fmt->adpcm.wSamplesPerBlock; fmt->nibble_state = 0; return 1; }
// same as read_word() but swapped static int read_word_s(HMMIO rw, WORD *i) { int rc = mmioRead( rw, (char *)i, sizeof(WORD) ); IF_ERR(rc != sizeof(WORD), 0); *i = INTEL_SHORT(*i); //-V570 return 1; }
// utility functions static int read_ushort(HMMIO rw, ushort *i) { int rc = mmioRead( rw, (char *)i, sizeof(ushort) ); IF_ERR(rc != sizeof(ushort), 0); *i = INTEL_SHORT(*i); //-V570 return 1; }
static int read_short(SDL_RWops *rw, short *i) { int rc = SDL_RWread(rw, i, sizeof(short), 1); IF_ERR(rc != 1, 0); *i = INTEL_SHORT(*i); return 1; }
// same as read_word() but swapped static int read_word_s(SDL_RWops *rw, WORD *i) { int rc = SDL_RWread(rw, i, sizeof(WORD), 1); IF_ERR(rc != 1, 0); *i = INTEL_SHORT(*i); return 1; }
static int decode_adpcm_sample_frame(HMMIO rw, adpcm_fmt_t *fmt) { int i; int max = fmt->adpcm.wav.nChannels; ubyte nib = fmt->nibble; short iCoef1, iCoef2; int lPredSamp; for (i = 0; i < max; i++) { iCoef1 = fmt->adpcm.aCoef[fmt->header[i].bPredictor].iCoef1; iCoef2 = fmt->adpcm.aCoef[fmt->header[i].bPredictor].iCoef2; lPredSamp = ((fmt->header[i].iSamp1 * iCoef1) + (fmt->header[i].iSamp2 * iCoef2)) / FIXED_POINT_COEF_BASE; if (fmt->nibble_state == 0) { IF_ERR(!read_ubyte(rw, &nib), 0); fmt->nibble_state = 1; do_adpcm_nibble(nib >> 4, &fmt->header[i], lPredSamp); } else {
static int read_word(HMMIO rw, WORD *i) { int rc = mmioRead( rw, (char *)i, sizeof(WORD) ); IF_ERR(rc != sizeof(WORD), 0); return 1; }
static int read_ubyte(HMMIO rw, ubyte *i) { int rc = mmioRead( rw, (char *)i, sizeof(ubyte) ); IF_ERR(rc != sizeof(ubyte), 0); return 1; }
static int read_dword(SDL_RWops *rw, DWORD *i) { int rc = SDL_RWread(rw, i, sizeof(DWORD), 1); IF_ERR(rc != 1, 0); return 1; }
static int read_ubyte(SDL_RWops *rw, ubyte *i) { int rc = SDL_RWread(rw, i, sizeof(ubyte), 1); IF_ERR(rc != 1, 0); return 1; }