ima_adpcm_state_t encode_ima_adpcm_i16_u8(short* input, unsigned char* output, int input_length, ima_adpcm_state_t state) { int k=0; for(int i=0;i<input_length/2;i++) { output[k]=ImaAdpcmEncode(input[2*i],&state); output[k++]|=ImaAdpcmEncode(input[2*i+1],&state)<<4; } return state; }
ima_adpcm_state_t encode_ima_adpcm_u8_u8(unsigned char* input, unsigned char* output, int input_length, ima_adpcm_state_t state) { int k=0; for(int i=0;i<input_length/2;i++) { unsigned char i0 = input[2*i], i1 = input[2*i+1]; // handle input == output buffer output[k] = ImaAdpcmEncode(i0, &state); output[k++] |= ImaAdpcmEncode(i1, &state) << 4; } return state; }
// used by sound // 4:1 compression: 2x shorts -> 1x unsigned char void encode_ima_adpcm_i16_e8(short* input, unsigned char* output, int input_length, ima_adpcm_state_t *state) { state->pos_clamp = +32767; state->neg_clamp = -32768; int k=0; for (int i=0; i<input_length/2; i++) { output[k] = ImaAdpcmEncode(input[2*i], state); output[k] |= ImaAdpcmEncode(input[2*i+1], state) << 4; k++; } }
// used by waterfall // 2:1 compression: 2x unsigned char -> 1x unsigned char void encode_ima_adpcm_u8_e8(unsigned char* input, unsigned char* output, int input_length, ima_adpcm_state_t *state) { // not +127 / -128 because unsigned state->pos_clamp = 255; state->neg_clamp = 0; int k=0; for (int i=0; i<input_length/2; i++) { unsigned char i0 = input[2*i], i1 = input[2*i+1]; // handle input == output buffer output[k] = ImaAdpcmEncode(i0, state); output[k] |= ImaAdpcmEncode(i1, state) << 4; k++; } }