54 0, 1, 2, 3, 4, 5, 6, 7,
55 8, 9, 10, 11, 12, 13, 14, 15,
56 16, 17, 18, 19, 20, 21, 22, 23,
57 24, 25, 26, 27, 28, 29, 30, 31,
58 32, 33, 34, 35, 36, 37, 38, 39,
59 40, 41, 42, 43, 47, 51, 56, 61,
60 66, 72, 79, 86, 94, 102, 112, 122,
61 133, 145, 158, 173, 189, 206, 225, 245,
62 267, 292, 318, 348, 379, 414, 452, 493,
63 538, 587, 640, 699, 763, 832, 908, 991,
64 1081, 1180, 1288, 1405, 1534, 1673, 1826, 1993,
65 2175, 2373, 2590, 2826, 3084, 3365, 3672, 4008,
66 4373, 4772, 5208, 5683, 6202, 6767, 7385, 8059,
67 8794, 9597, 10472, 11428, 12471, 13609, 14851, 16206,
68 17685, 19298, 21060, 22981, 25078, 27367, 29864, 32589,
69 -29973, -26728, -23186, -19322, -15105, -10503, -5481, -1,
70 1, 1, 5481, 10503, 15105, 19322, 23186, 26728,
71 29973, -32589, -29864, -27367, -25078, -22981, -21060, -19298,
72 -17685, -16206, -14851, -13609, -12471, -11428, -10472, -9597,
73 -8794, -8059, -7385, -6767, -6202, -5683, -5208, -4772,
74 -4373, -4008, -3672, -3365, -3084, -2826, -2590, -2373,
75 -2175, -1993, -1826, -1673, -1534, -1405, -1288, -1180,
76 -1081, -991, -908, -832, -763, -699, -640, -587,
77 -538, -493, -452, -414, -379, -348, -318, -292,
78 -267, -245, -225, -206, -189, -173, -158, -145,
79 -133, -122, -112, -102, -94, -86, -79, -72,
80 -66, -61, -56, -51, -47, -43, -42, -41,
81 -40, -39, -38, -37, -36, -35, -34, -33,
82 -32, -31, -30, -29, -28, -27, -26, -25,
83 -24, -23, -22, -21, -20, -19, -18, -17,
84 -16, -15, -14, -13, -12, -11, -10, -9,
85 -8, -7, -6, -5, -4, -3, -2, -1
90 0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
91 -0x15, -0xF, -0xA, -0x6, -0x3, -0x2, -0x1, 0x0
95 0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
96 0x0, -0x1, -0x2, -0x3, -0x6, -0xA, -0xF, -0x15
100 0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
101 0x090, 0x0A0, 0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120,
102 0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0,
103 0x1D0, 0x1E0, 0x1F0, 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230,
104 0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, 0x278, 0x280,
105 0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, 0x2C0, 0x2C8, 0x2D0,
106 0x2D8, 0x2E0, 0x2E8, 0x2F0, 0x2F8, 0x300, 0x308, 0x310, 0x318, 0x320,
107 0x328, 0x330, 0x338, 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370,
108 0x378, 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, 0x3B0, 0x3B8, 0x3C0,
109 0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, 0x3F0, 0x3F8, 0x400, 0x440, 0x480,
110 0x4C0, 0x500, 0x540, 0x580, 0x5C0, 0x600, 0x640, 0x680, 0x6C0, 0x700,
111 0x740, 0x780, 0x7C0, 0x800, 0x900, 0xA00, 0xB00, 0xC00, 0xD00, 0xE00,
112 0xF00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000
133 for (i = 0; i < 128; i++) {
175 int *got_frame_ptr,
AVPacket *avpkt)
177 const uint8_t *buf = avpkt->
data;
178 int buf_size = avpkt->
size;
179 const uint8_t *buf_end = buf + buf_size;
185 int16_t *output_samples;
187 if (stereo && (buf_size & 1)) {
221 output_samples = (int16_t *)s->
frame.
data[0];
229 predictor[1] = (int16_t)(bytestream_get_byte(&buf) << 8);
230 predictor[0] = (int16_t)(bytestream_get_byte(&buf) << 8);
232 predictor[0] = (int16_t)bytestream_get_le16(&buf);
236 while (buf < buf_end) {
238 predictor[ch] = av_clip_int16(predictor[ch]);
239 *output_samples++ = predictor[ch];
249 for (ch = 0; ch < s->
channels; ch++) {
250 predictor[ch] = (int16_t)bytestream_get_le16(&buf);
251 *output_samples++ = predictor[ch];
255 while (buf < buf_end) {
257 predictor[ch] = av_clip_int16(predictor[ch]);
258 *output_samples++ = predictor[ch];
267 int shift[2] = { 4, 4 };
269 for (ch = 0; ch < s->
channels; ch++)
270 predictor[ch] = (int16_t)bytestream_get_le16(&buf);
273 while (buf < buf_end) {
275 int16_t diff = (n & 0xFC) << 8;
279 shift[ch] -= (2 * (n & 3));
285 predictor[ch] += diff;
287 predictor[ch] = av_clip_int16(predictor[ch]);
288 *output_samples++ = predictor[ch];
297 uint8_t *output_samples_u8 = s->
frame.
data[0];
298 while (buf < buf_end) {
303 *output_samples_u8++ = s->
sample[0];
307 *output_samples_u8++ = s->
sample[stereo];
310 while (buf < buf_end) {
315 *output_samples++ = s->
sample[ch];
329 #define DPCM_DECODER(id_, name_, long_name_) \
330 AVCodec ff_ ## name_ ## _decoder = { \
332 .type = AVMEDIA_TYPE_AUDIO, \
334 .priv_data_size = sizeof(DPCMContext), \
335 .init = dpcm_decode_init, \
336 .decode = dpcm_decode_frame, \
337 .capabilities = CODEC_CAP_DR1, \
338 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
int16_t roq_square_array[256]
static const int8_t sol_table_old[16]
AVFrame * coded_frame
the picture in the bitstream
const int8_t * sol_table
delta table for SOL_DPCM
enum AVSampleFormat sample_fmt
audio sample format
static const int16_t interplay_delta_table[]
static const int8_t sol_table_new[16]
static int dpcm_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
void av_log(void *avcl, int level, const char *fmt,...)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame)
static const int16_t sol_table_16[128]
main external API structure.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
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)
struct DPCMContext DPCMContext
int channels
number of audio channels
void avcodec_get_frame_defaults(AVFrame *pic)
Set the fields of the given AVFrame to default values.
int sample[2]
previous sample (for SOL_DPCM)
int nb_samples
number of audio samples (per channel) described by this frame