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
146 for (i = 0; i < 128; i++) {
172 for (i = -128; i < 128; i++) {
173 int16_t
square = i * i * 2;
184 for (i = 0; i < 127; i++) {
185 delta += (code >> 5);
192 s->
array[255] = delta + (code >> 5);
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))
232 out = buf_size - 6 - avctx->
channels;
235 out = buf_size - 2 * avctx->
channels;
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);
325 shift[ch] = av_clip_uintp2(shift[ch], 5);
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);
347 *output_samples_u8++ = s->
sample[0];
351 *output_samples_u8++ = s->
sample[stereo];
354 while (output_samples < samples_end) {
355 int n = bytestream2_get_byteu(&gb);
359 *output_samples++ = s->
sample[ch];
367 while (output_samples < samples_end) {
368 int8_t n = bytestream2_get_byteu(&gb);
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);
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, \ const struct AVCodec * codec
static int shift(int a, int b)
This structure describes decoded (raw) audio or video data.
static const int8_t sol_table_old[16]
#define AV_LOG_WARNING
Something somehow does not look correct.
const int8_t * sol_table
delta table for SOL_DPCM
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
enum AVSampleFormat sample_fmt
audio sample format
static const int16_t interplay_delta_table[]
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const int8_t sol_table_new[16]
static int dpcm_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
static const int32_t derf_steps[96]
Libavcodec external API header.
static const int16_t sol_table_16[128]
main external API structure.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static av_const int sign_extend(int val, unsigned bits)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define DPCM_DECODER(id_, name_, long_name_)
common internal api header.
static av_cold int dpcm_decode_init(AVCodecContext *avctx)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int channels
number of audio channels
This structure stores compressed data.
int sample[2]
previous sample (for SOL_DPCM)
int nb_samples
number of audio samples (per channel) described by this frame