39 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
40 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
41 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
42 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
43 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
44 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
52 -1, -1, 2, 6, -1, -1, 2, 6
56 -1, -1, -1, -1, 1, 2, 4, 6, -1, -1, -1, -1, 1, 2, 4, 6
60 -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 2, 2, 4, 5, 6,
61 -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 2, 2, 4, 5, 6
65 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
66 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 5, 5, 6, 6,
67 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
68 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 5, 5, 6, 6
72 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
73 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
74 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
75 2, 2, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6,
76 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
77 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
78 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
79 2, 2, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6
96 for (start_pos = 0; start_pos < 64; start_pos++) {
97 unsigned int dest_pos, table_pos;
99 for (table_pos = 0, dest_pos = start_pos;
101 table_pos++, dest_pos += 64) {
102 int put = 0,
count, table_value;
106 if (start_pos &
count)
125 int8_t channel_hint[2];
136 if (samples == 0xffffffff) {
141 if (samples > pkt->
size * 2)
145 if (channel_hint[0] & 0x80) {
146 channel_hint[0] = ~channel_hint[0];
162 for (chan = 0; chan <
channels; chan++) {
163 uint16_t *dest = (uint16_t *)frame->
data[0] + chan;
164 int step_index = channel_hint[chan];
165 int output = pcm_data[chan];
169 int lookup_size,
lookup, highbit, lowbits;
171 step_index = av_clip(step_index, 0, 88);
173 lookup =
get_bits(&gb, lookup_size);
174 highbit = 1 << (lookup_size - 1);
175 lowbits = highbit - 1;
177 if (lookup & highbit)
182 if (lookup == lowbits) {
185 int predict_index,
diff;
187 predict_index = (lookup << (7 - lookup_size)) | (step_index << 6);
188 predict_index = av_clip(predict_index, 0, 5785);
195 output = av_clip_int16(output + diff);
211 .
name =
"adpcm_vima",
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static const int8_t *const step_index_tables[]
static const int8_t index_table3[]
#define AV_CH_LAYOUT_STEREO
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *pkt)
static int predict_table_init
static int get_sbits(GetBitContext *s, int n)
enum AVSampleFormat sample_fmt
audio sample format
bitstream reader API header.
static const int8_t index_table2[]
static const uint8_t size_table[]
static const int8_t index_table6[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
const int16_t ff_adpcm_step_table[89]
This is the step table.
const char * name
Name of the codec implementation.
uint64_t channel_layout
Audio channel layout.
audio channel layout utility functions
static const int8_t index_table4[]
static const int8_t index_table5[]
static av_cold int decode_init(AVCodecContext *avctx)
#define FF_ARRAY_ELEMS(a)
static const int8_t index_table1[]
Libavcodec external API header.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
AVCodec ff_adpcm_vima_decoder
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int channels
number of audio channels
static uint16_t predict_table[5786 *2]
#define AV_CH_LAYOUT_MONO
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.