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
132 for (i = 0; i < 128; i++) {
174 int *got_frame_ptr,
AVPacket *avpkt)
176 int buf_size = avpkt->
size;
182 int16_t *output_samples, *samples_end;
185 if (stereo && (buf_size & 1))
195 out = buf_size - 6 - avctx->
channels;
198 out = buf_size - 2 * avctx->
channels;
218 output_samples = (int16_t *)s->
frame.
data[0];
219 samples_end = output_samples + out;
227 predictor[1] =
sign_extend(bytestream2_get_byteu(&gb) << 8, 16);
228 predictor[0] =
sign_extend(bytestream2_get_byteu(&gb) << 8, 16);
230 predictor[0] =
sign_extend(bytestream2_get_le16u(&gb), 16);
234 while (output_samples < samples_end) {
236 predictor[ch] = av_clip_int16(predictor[ch]);
237 *output_samples++ = predictor[ch];
247 for (ch = 0; ch < avctx->
channels; ch++) {
248 predictor[ch] =
sign_extend(bytestream2_get_le16u(&gb), 16);
249 *output_samples++ = predictor[ch];
253 while (output_samples < samples_end) {
255 predictor[ch] = av_clip_int16(predictor[ch]);
256 *output_samples++ = predictor[ch];
265 int shift[2] = { 4, 4 };
267 for (ch = 0; ch < avctx->
channels; ch++)
268 predictor[ch] =
sign_extend(bytestream2_get_le16u(&gb), 16);
271 while (output_samples < samples_end) {
272 int diff = bytestream2_get_byteu(&gb);
278 shift[ch] -= (2 * n);
286 predictor[ch] += diff;
288 predictor[ch] = av_clip_int16(predictor[ch]);
289 *output_samples++ = predictor[ch];
299 *samples_end_u8 = output_samples_u8 + out;
300 while (output_samples_u8 < samples_end_u8) {
301 int n = bytestream2_get_byteu(&gb);
305 *output_samples_u8++ = s->
sample[0];
309 *output_samples_u8++ = s->
sample[stereo];
312 while (output_samples < samples_end) {
313 int n = bytestream2_get_byteu(&gb);
317 *output_samples++ = s->
sample[ch];
331 #define DPCM_DECODER(id_, name_, long_name_) \
332 AVCodec ff_ ## name_ ## _decoder = { \
334 .type = AVMEDIA_TYPE_AUDIO, \
336 .priv_data_size = sizeof(DPCMContext), \
337 .init = dpcm_decode_init, \
338 .decode = dpcm_decode_frame, \
339 .capabilities = CODEC_CAP_DR1, \
340 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
const struct AVCodec * codec
int16_t roq_square_array[256]
This structure describes decoded (raw) audio or video data.
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
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)
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)
Get a buffer for a frame.
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').
void avcodec_get_frame_defaults(AVFrame *frame)
Set the fields of the given AVFrame to default values.
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)
struct DPCMContext DPCMContext
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