53 0, 1, 2, 3, 4, 5, 6, 7,
54 8, 9, 10, 11, 12, 13, 14, 16,
55 17, 19, 21, 23, 25, 28, 31, 34,
56 37, 41, 45, 50, 55, 60, 66, 73,
57 80, 88, 97, 107, 118, 130, 143, 157,
58 173, 190, 209, 230, 253, 279, 307, 337,
59 371, 408, 449, 494, 544, 598, 658, 724,
60 796, 876, 963, 1060, 1166, 1282, 1411, 1552,
61 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
62 3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132,
63 7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289,
64 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767,
68 0, 1, 2, 3, 4, 5, 6, 7,
69 8, 9, 10, 11, 12, 13, 14, 15,
70 16, 17, 18, 19, 20, 21, 22, 23,
71 24, 25, 26, 27, 28, 29, 30, 31,
72 32, 33, 34, 35, 36, 37, 38, 39,
73 40, 41, 42, 43, 47, 51, 56, 61,
74 66, 72, 79, 86, 94, 102, 112, 122,
75 133, 145, 158, 173, 189, 206, 225, 245,
76 267, 292, 318, 348, 379, 414, 452, 493,
77 538, 587, 640, 699, 763, 832, 908, 991,
78 1081, 1180, 1288, 1405, 1534, 1673, 1826, 1993,
79 2175, 2373, 2590, 2826, 3084, 3365, 3672, 4008,
80 4373, 4772, 5208, 5683, 6202, 6767, 7385, 8059,
81 8794, 9597, 10472, 11428, 12471, 13609, 14851, 16206,
82 17685, 19298, 21060, 22981, 25078, 27367, 29864, 32589,
83 -29973, -26728, -23186, -19322, -15105, -10503, -5481, -1,
84 1, 1, 5481, 10503, 15105, 19322, 23186, 26728,
85 29973, -32589, -29864, -27367, -25078, -22981, -21060, -19298,
86 -17685, -16206, -14851, -13609, -12471, -11428, -10472, -9597,
87 -8794, -8059, -7385, -6767, -6202, -5683, -5208, -4772,
88 -4373, -4008, -3672, -3365, -3084, -2826, -2590, -2373,
89 -2175, -1993, -1826, -1673, -1534, -1405, -1288, -1180,
90 -1081, -991, -908, -832, -763, -699, -640, -587,
91 -538, -493, -452, -414, -379, -348, -318, -292,
92 -267, -245, -225, -206, -189, -173, -158, -145,
93 -133, -122, -112, -102, -94, -86, -79, -72,
94 -66, -61, -56, -51, -47, -43, -42, -41,
95 -40, -39, -38, -37, -36, -35, -34, -33,
96 -32, -31, -30, -29, -28, -27, -26, -25,
97 -24, -23, -22, -21, -20, -19, -18, -17,
98 -16, -15, -14, -13, -12, -11, -10, -9,
99 -8, -7, -6, -5, -4, -3, -2, -1
104 0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
105 -0x15, -0xF, -0xA, -0x6, -0x3, -0x2, -0x1, 0x0
109 0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
110 0x0, -0x1, -0x2, -0x3, -0x6, -0xA, -0xF, -0x15
114 0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
115 0x090, 0x0A0, 0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120,
116 0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0,
117 0x1D0, 0x1E0, 0x1F0, 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230,
118 0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, 0x278, 0x280,
119 0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, 0x2C0, 0x2C8, 0x2D0,
120 0x2D8, 0x2E0, 0x2E8, 0x2F0, 0x2F8, 0x300, 0x308, 0x310, 0x318, 0x320,
121 0x328, 0x330, 0x338, 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370,
122 0x378, 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, 0x3B0, 0x3B8, 0x3C0,
123 0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, 0x3F0, 0x3F8, 0x400, 0x440, 0x480,
124 0x4C0, 0x500, 0x540, 0x580, 0x5C0, 0x600, 0x640, 0x680, 0x6C0, 0x700,
125 0x740, 0x780, 0x7C0, 0x800, 0x900, 0xA00, 0xB00, 0xC00, 0xD00, 0xE00,
126 0xF00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000
140 s->sample[0] =
s->sample[1] = 0;
146 for (
i = 0;
i < 128;
i++) {
157 s->sample[0] =
s->sample[1] = 0x80;
161 s->sample[0] =
s->sample[1] = 0x80;
172 for (
i = -128;
i < 128;
i++) {
184 for (
i = 0;
i < 127;
i++) {
210 int *got_frame_ptr,
AVPacket *avpkt)
212 int buf_size = avpkt->
size;
219 int16_t *output_samples, *samples_end;
222 if (stereo && (buf_size & 1))
261 output_samples = (int16_t *)
frame->data[0];
262 samples_end = output_samples +
out;
270 predictor[1] =
sign_extend(bytestream2_get_byteu(&gb) << 8, 16);
271 predictor[0] =
sign_extend(bytestream2_get_byteu(&gb) << 8, 16);
273 predictor[0] =
sign_extend(bytestream2_get_le16u(&gb), 16);
277 while (output_samples < samples_end) {
278 predictor[ch] +=
s->array[bytestream2_get_byteu(&gb)];
279 predictor[ch] = av_clip_int16(predictor[ch]);
280 *output_samples++ = predictor[ch];
290 for (ch = 0; ch < avctx->
channels; ch++) {
291 predictor[ch] =
sign_extend(bytestream2_get_le16u(&gb), 16);
292 *output_samples++ = predictor[ch];
296 while (output_samples < samples_end) {
298 predictor[ch] = av_clip_int16(predictor[ch]);
299 *output_samples++ = predictor[ch];
308 int shift[2] = { 4, 4 };
310 for (ch = 0; ch < avctx->
channels; ch++)
311 predictor[ch] =
sign_extend(bytestream2_get_le16u(&gb), 16);
314 while (output_samples < samples_end) {
315 int diff = bytestream2_get_byteu(&gb);
321 shift[ch] -= (2 * n);
328 predictor[ch] +=
diff;
330 predictor[ch] = av_clip_int16(predictor[ch]);
331 *output_samples++ = predictor[ch];
341 *samples_end_u8 = output_samples_u8 +
out;
342 while (output_samples_u8 < samples_end_u8) {
343 int n = bytestream2_get_byteu(&gb);
345 s->sample[0] +=
s->sol_table[n >> 4];
346 s->sample[0] = av_clip_uint8(
s->sample[0]);
347 *output_samples_u8++ =
s->sample[0];
349 s->sample[stereo] +=
s->sol_table[n & 0x0F];
350 s->sample[stereo] = av_clip_uint8(
s->sample[stereo]);
351 *output_samples_u8++ =
s->sample[stereo];
354 while (output_samples < samples_end) {
355 int n = bytestream2_get_byteu(&gb);
358 s->sample[ch] = av_clip_int16(
s->sample[ch]);
359 *output_samples++ =
s->sample[ch];
367 while (output_samples < samples_end) {
368 int8_t n = bytestream2_get_byteu(&gb);
372 s->sample[ch] +=
s->array[n + 128];
373 s->sample[ch] = av_clip_int16(
s->sample[ch]);
374 *output_samples++ =
s->sample[ch];
382 while (output_samples < samples_end) {
383 uint8_t n = bytestream2_get_byteu(&gb);
385 *output_samples++ =
s->sample[idx] += (unsigned)
s->array[n];
394 while (output_samples < samples_end) {
395 uint8_t n = bytestream2_get_byteu(&gb);
399 s->sample[idx] = av_clip_int16(
s->sample[idx]);
400 *output_samples++ =
s->sample[idx];
412 #define DPCM_DECODER(id_, name_, long_name_) \
413 AVCodec ff_ ## name_ ## _decoder = { \
415 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
416 .type = AVMEDIA_TYPE_AUDIO, \
418 .priv_data_size = sizeof(DPCMContext), \
419 .init = dpcm_decode_init, \
420 .decode = dpcm_decode_frame, \
421 .capabilities = AV_CODEC_CAP_DR1, \