+static inline uint8_t adpcm_ima_alp_compress_sample(ADPCMChannelStatus *c, int16_t sample)
+{
+ const int delta = sample - c->prev_sample;
+ const int step = ff_adpcm_step_table[c->step_index];
+ const int sign = (delta < 0) * 8;
+
+ int nibble = FFMIN(abs(delta) * 4 / step, 7);
+ int diff = (step * nibble) >> 2;
+ if (sign)
+ diff = -diff;
+
+ nibble = sign | nibble;
+
+ c->prev_sample += diff;
+ c->prev_sample = av_clip_int16(c->prev_sample);
+ c->step_index = av_clip(c->step_index + ff_adpcm_index_table[nibble], 0, 88);
+ return nibble;
+}
+