int sample[2]; ///< previous sample (for SOL_DPCM)
const int8_t *sol_table; ///< delta table for SOL_DPCM
} DPCMContext;
int sample[2]; ///< previous sample (for SOL_DPCM)
const int8_t *sol_table; ///< delta table for SOL_DPCM
} DPCMContext;
case AV_CODEC_ID_SDX2_DPCM:
for (i = -128; i < 128; i++) {
int16_t square = i * i * 2;
case AV_CODEC_ID_SDX2_DPCM:
for (i = -128; i < 128; i++) {
int16_t square = i * i * 2;
- s->square_array[i+128] = i < 0 ? -square: square;
+ s->array[i+128] = i < 0 ? -square: square;
+ }
+ break;
+
+ case AV_CODEC_ID_GREMLIN_DPCM: {
+ int delta = 0;
+ int code = 64;
+ int step = 45;
+
+ s->array[0] = 0;
+ for (i = 0; i < 127; i++) {
+ delta += (code >> 5);
+ code += step;
+ step += 2;
+
+ s->array[i*2 + 1] = delta;
+ s->array[i*2 + 2] = -delta;
+ }
+ s->array[255] = delta + (code >> 5);
DPCM_DECODER(AV_CODEC_ID_INTERPLAY_DPCM, interplay_dpcm, "DPCM Interplay");
DPCM_DECODER(AV_CODEC_ID_ROQ_DPCM, roq_dpcm, "DPCM id RoQ");
DPCM_DECODER(AV_CODEC_ID_SDX2_DPCM, sdx2_dpcm, "DPCM Squareroot-Delta-Exact");
DPCM_DECODER(AV_CODEC_ID_INTERPLAY_DPCM, interplay_dpcm, "DPCM Interplay");
DPCM_DECODER(AV_CODEC_ID_ROQ_DPCM, roq_dpcm, "DPCM id RoQ");
DPCM_DECODER(AV_CODEC_ID_SDX2_DPCM, sdx2_dpcm, "DPCM Squareroot-Delta-Exact");