g726.c
Go to the documentation of this file.
1 /*
2  * G.726 ADPCM audio codec
3  * Copyright (c) 2004 Roman Shaposhnik
4  *
5  * This is a very straightforward rendition of the G.726
6  * Section 4 "Computational Details".
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 2.1 of the License, or (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with FFmpeg; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  */
24 #include <limits.h>
25 
26 #include "libavutil/avassert.h"
28 #include "libavutil/opt.h"
29 #include "avcodec.h"
30 #include "internal.h"
31 #include "get_bits.h"
32 #include "put_bits.h"
33 
34 /**
35  * G.726 11bit float.
36  * G.726 Standard uses rather odd 11bit floating point arithmentic for
37  * numerous occasions. It's a mystery to me why they did it this way
38  * instead of simply using 32bit integer arithmetic.
39  */
40 typedef struct Float11 {
41  uint8_t sign; /**< 1bit sign */
42  uint8_t exp; /**< 4bit exponent */
43  uint8_t mant; /**< 6bit mantissa */
44 } Float11;
45 
46 static inline Float11* i2f(int i, Float11* f)
47 {
48  f->sign = (i < 0);
49  if (f->sign)
50  i = -i;
51  f->exp = av_log2_16bit(i) + !!i;
52  f->mant = i? (i<<6) >> f->exp : 1<<5;
53  return f;
54 }
55 
56 static inline int16_t mult(Float11* f1, Float11* f2)
57 {
58  int res, exp;
59 
60  exp = f1->exp + f2->exp;
61  res = (((f1->mant * f2->mant) + 0x30) >> 4);
62  res = exp > 19 ? res << (exp - 19) : res >> (19 - exp);
63  return (f1->sign ^ f2->sign) ? -res : res;
64 }
65 
66 static inline int sgn(int value)
67 {
68  return (value < 0) ? -1 : 1;
69 }
70 
71 typedef struct G726Tables {
72  const int* quant; /**< quantization table */
73  const int16_t* iquant; /**< inverse quantization table */
74  const int16_t* W; /**< special table #1 ;-) */
75  const uint8_t* F; /**< special table #2 */
76 } G726Tables;
77 
78 typedef struct G726Context {
79  AVClass *class;
80  G726Tables tbls; /**< static tables needed for computation */
81 
82  Float11 sr[2]; /**< prev. reconstructed samples */
83  Float11 dq[6]; /**< prev. difference */
84  int a[2]; /**< second order predictor coeffs */
85  int b[6]; /**< sixth order predictor coeffs */
86  int pk[2]; /**< signs of prev. 2 sez + dq */
87 
88  int ap; /**< scale factor control */
89  int yu; /**< fast scale factor */
90  int yl; /**< slow scale factor */
91  int dms; /**< short average magnitude of F[i] */
92  int dml; /**< long average magnitude of F[i] */
93  int td; /**< tone detect */
94 
95  int se; /**< estimated signal for the next iteration */
96  int sez; /**< estimated second order prediction */
97  int y; /**< quantizer scaling factor for the next iteration */
98  int code_size;
99 } G726Context;
100 
101 static const int quant_tbl16[] = /**< 16kbit/s 2bits per sample */
102  { 260, INT_MAX };
103 static const int16_t iquant_tbl16[] =
104  { 116, 365, 365, 116 };
105 static const int16_t W_tbl16[] =
106  { -22, 439, 439, -22 };
107 static const uint8_t F_tbl16[] =
108  { 0, 7, 7, 0 };
109 
110 static const int quant_tbl24[] = /**< 24kbit/s 3bits per sample */
111  { 7, 217, 330, INT_MAX };
112 static const int16_t iquant_tbl24[] =
113  { INT16_MIN, 135, 273, 373, 373, 273, 135, INT16_MIN };
114 static const int16_t W_tbl24[] =
115  { -4, 30, 137, 582, 582, 137, 30, -4 };
116 static const uint8_t F_tbl24[] =
117  { 0, 1, 2, 7, 7, 2, 1, 0 };
118 
119 static const int quant_tbl32[] = /**< 32kbit/s 4bits per sample */
120  { -125, 79, 177, 245, 299, 348, 399, INT_MAX };
121 static const int16_t iquant_tbl32[] =
122  { INT16_MIN, 4, 135, 213, 273, 323, 373, 425,
123  425, 373, 323, 273, 213, 135, 4, INT16_MIN };
124 static const int16_t W_tbl32[] =
125  { -12, 18, 41, 64, 112, 198, 355, 1122,
126  1122, 355, 198, 112, 64, 41, 18, -12};
127 static const uint8_t F_tbl32[] =
128  { 0, 0, 0, 1, 1, 1, 3, 7, 7, 3, 1, 1, 1, 0, 0, 0 };
129 
130 static const int quant_tbl40[] = /**< 40kbit/s 5bits per sample */
131  { -122, -16, 67, 138, 197, 249, 297, 338,
132  377, 412, 444, 474, 501, 527, 552, INT_MAX };
133 static const int16_t iquant_tbl40[] =
134  { INT16_MIN, -66, 28, 104, 169, 224, 274, 318,
135  358, 395, 429, 459, 488, 514, 539, 566,
136  566, 539, 514, 488, 459, 429, 395, 358,
137  318, 274, 224, 169, 104, 28, -66, INT16_MIN };
138 static const int16_t W_tbl40[] =
139  { 14, 14, 24, 39, 40, 41, 58, 100,
140  141, 179, 219, 280, 358, 440, 529, 696,
141  696, 529, 440, 358, 280, 219, 179, 141,
142  100, 58, 41, 40, 39, 24, 14, 14 };
143 static const uint8_t F_tbl40[] =
144  { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 6,
145  6, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
146 
147 static const G726Tables G726Tables_pool[] =
152 
153 
154 /**
155  * Para 4.2.2 page 18: Adaptive quantizer.
156  */
157 static inline uint8_t quant(G726Context* c, int d)
158 {
159  int sign, exp, i, dln;
160 
161  sign = i = 0;
162  if (d < 0) {
163  sign = 1;
164  d = -d;
165  }
166  exp = av_log2_16bit(d);
167  dln = ((exp<<7) + (((d<<7)>>exp)&0x7f)) - (c->y>>2);
168 
169  while (c->tbls.quant[i] < INT_MAX && c->tbls.quant[i] < dln)
170  ++i;
171 
172  if (sign)
173  i = ~i;
174  if (c->code_size != 2 && i == 0) /* I'm not sure this is a good idea */
175  i = 0xff;
176 
177  return i;
178 }
179 
180 /**
181  * Para 4.2.3 page 22: Inverse adaptive quantizer.
182  */
183 static inline int16_t inverse_quant(G726Context* c, int i)
184 {
185  int dql, dex, dqt;
186 
187  dql = c->tbls.iquant[i] + (c->y >> 2);
188  dex = (dql>>7) & 0xf; /* 4bit exponent */
189  dqt = (1<<7) + (dql & 0x7f); /* log2 -> linear */
190  return (dql < 0) ? 0 : ((dqt<<dex) >> 7);
191 }
192 
193 static int16_t g726_decode(G726Context* c, int I)
194 {
195  int dq, re_signal, pk0, fa1, i, tr, ylint, ylfrac, thr2, al, dq0;
196  Float11 f;
197  int I_sig= I >> (c->code_size - 1);
198 
199  dq = inverse_quant(c, I);
200 
201  /* Transition detect */
202  ylint = (c->yl >> 15);
203  ylfrac = (c->yl >> 10) & 0x1f;
204  thr2 = (ylint > 9) ? 0x1f << 10 : (0x20 + ylfrac) << ylint;
205  tr= (c->td == 1 && dq > ((3*thr2)>>2));
206 
207  if (I_sig) /* get the sign */
208  dq = -dq;
209  re_signal = c->se + dq;
210 
211  /* Update second order predictor coefficient A2 and A1 */
212  pk0 = (c->sez + dq) ? sgn(c->sez + dq) : 0;
213  dq0 = dq ? sgn(dq) : 0;
214  if (tr) {
215  c->a[0] = 0;
216  c->a[1] = 0;
217  for (i=0; i<6; i++)
218  c->b[i] = 0;
219  } else {
220  /* This is a bit crazy, but it really is +255 not +256 */
221  fa1 = av_clip((-c->a[0]*c->pk[0]*pk0)>>5, -256, 255);
222 
223  c->a[1] += 128*pk0*c->pk[1] + fa1 - (c->a[1]>>7);
224  c->a[1] = av_clip(c->a[1], -12288, 12288);
225  c->a[0] += 64*3*pk0*c->pk[0] - (c->a[0] >> 8);
226  c->a[0] = av_clip(c->a[0], -(15360 - c->a[1]), 15360 - c->a[1]);
227 
228  for (i=0; i<6; i++)
229  c->b[i] += 128*dq0*sgn(-c->dq[i].sign) - (c->b[i]>>8);
230  }
231 
232  /* Update Dq and Sr and Pk */
233  c->pk[1] = c->pk[0];
234  c->pk[0] = pk0 ? pk0 : 1;
235  c->sr[1] = c->sr[0];
236  i2f(re_signal, &c->sr[0]);
237  for (i=5; i>0; i--)
238  c->dq[i] = c->dq[i-1];
239  i2f(dq, &c->dq[0]);
240  c->dq[0].sign = I_sig; /* Isn't it crazy ?!?! */
241 
242  c->td = c->a[1] < -11776;
243 
244  /* Update Ap */
245  c->dms += (c->tbls.F[I]<<4) + ((- c->dms) >> 5);
246  c->dml += (c->tbls.F[I]<<4) + ((- c->dml) >> 7);
247  if (tr)
248  c->ap = 256;
249  else {
250  c->ap += (-c->ap) >> 4;
251  if (c->y <= 1535 || c->td || abs((c->dms << 2) - c->dml) >= (c->dml >> 3))
252  c->ap += 0x20;
253  }
254 
255  /* Update Yu and Yl */
256  c->yu = av_clip(c->y + c->tbls.W[I] + ((-c->y)>>5), 544, 5120);
257  c->yl += c->yu + ((-c->yl)>>6);
258 
259  /* Next iteration for Y */
260  al = (c->ap >= 256) ? 1<<6 : c->ap >> 2;
261  c->y = (c->yl + (c->yu - (c->yl>>6))*al) >> 6;
262 
263  /* Next iteration for SE and SEZ */
264  c->se = 0;
265  for (i=0; i<6; i++)
266  c->se += mult(i2f(c->b[i] >> 2, &f), &c->dq[i]);
267  c->sez = c->se >> 1;
268  for (i=0; i<2; i++)
269  c->se += mult(i2f(c->a[i] >> 2, &f), &c->sr[i]);
270  c->se >>= 1;
271 
272  return av_clip(re_signal << 2, -0xffff, 0xffff);
273 }
274 
276 {
277  int i;
278 
279  c->tbls = G726Tables_pool[c->code_size - 2];
280  for (i=0; i<2; i++) {
281  c->sr[i].mant = 1<<5;
282  c->pk[i] = 1;
283  }
284  for (i=0; i<6; i++) {
285  c->dq[i].mant = 1<<5;
286  }
287  c->yu = 544;
288  c->yl = 34816;
289 
290  c->y = 544;
291 
292  return 0;
293 }
294 
295 #if CONFIG_ADPCM_G726_ENCODER
296 static int16_t g726_encode(G726Context* c, int16_t sig)
297 {
298  uint8_t i;
299 
300  i = quant(c, sig/4 - c->se) & ((1<<c->code_size) - 1);
301  g726_decode(c, i);
302  return i;
303 }
304 
305 /* Interfacing to the libavcodec */
306 
307 static av_cold int g726_encode_init(AVCodecContext *avctx)
308 {
309  G726Context* c = avctx->priv_data;
310 
312  avctx->sample_rate != 8000) {
313  av_log(avctx, AV_LOG_ERROR, "Sample rates other than 8kHz are not "
314  "allowed when the compliance level is higher than unofficial. "
315  "Resample or reduce the compliance level.\n");
316  return AVERROR(EINVAL);
317  }
318  av_assert0(avctx->sample_rate > 0);
319 
320  if(avctx->channels != 1){
321  av_log(avctx, AV_LOG_ERROR, "Only mono is supported\n");
322  return AVERROR(EINVAL);
323  }
324 
325  if (avctx->bit_rate)
326  c->code_size = (avctx->bit_rate + avctx->sample_rate/2) / avctx->sample_rate;
327 
328  c->code_size = av_clip(c->code_size, 2, 5);
329  avctx->bit_rate = c->code_size * avctx->sample_rate;
330  avctx->bits_per_coded_sample = c->code_size;
331 
332  g726_reset(c);
333 
334  /* select a frame size that will end on a byte boundary and have a size of
335  approximately 1024 bytes */
336  avctx->frame_size = ((int[]){ 4096, 2736, 2048, 1640 })[c->code_size - 2];
337 
338  return 0;
339 }
340 
341 static int g726_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
342  const AVFrame *frame, int *got_packet_ptr)
343 {
344  G726Context *c = avctx->priv_data;
345  const int16_t *samples = (const int16_t *)frame->data[0];
346  PutBitContext pb;
347  int i, ret, out_size;
348 
349  out_size = (frame->nb_samples * c->code_size + 7) / 8;
350  if ((ret = ff_alloc_packet2(avctx, avpkt, out_size)) < 0)
351  return ret;
352  init_put_bits(&pb, avpkt->data, avpkt->size);
353 
354  for (i = 0; i < frame->nb_samples; i++)
355  put_bits(&pb, c->code_size, g726_encode(c, *samples++));
356 
357  flush_put_bits(&pb);
358 
359  avpkt->size = out_size;
360  *got_packet_ptr = 1;
361  return 0;
362 }
363 
364 #define OFFSET(x) offsetof(G726Context, x)
365 #define AE AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
366 static const AVOption options[] = {
367  { "code_size", "Bits per code", OFFSET(code_size), AV_OPT_TYPE_INT, { .i64 = 4 }, 2, 5, AE },
368  { NULL },
369 };
370 
371 static const AVClass class = {
372  .class_name = "g726",
373  .item_name = av_default_item_name,
374  .option = options,
375  .version = LIBAVUTIL_VERSION_INT,
376 };
377 
378 static const AVCodecDefault defaults[] = {
379  { "b", "0" },
380  { NULL },
381 };
382 
383 AVCodec ff_adpcm_g726_encoder = {
384  .name = "g726",
385  .type = AVMEDIA_TYPE_AUDIO,
387  .priv_data_size = sizeof(G726Context),
388  .init = g726_encode_init,
389  .encode2 = g726_encode_frame,
390  .capabilities = CODEC_CAP_SMALL_LAST_FRAME,
391  .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
393  .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
394  .priv_class = &class,
395  .defaults = defaults,
396 };
397 #endif
398 
399 #if CONFIG_ADPCM_G726_DECODER
400 static av_cold int g726_decode_init(AVCodecContext *avctx)
401 {
402  G726Context* c = avctx->priv_data;
403 
404  avctx->channels = 1;
406 
407  c->code_size = avctx->bits_per_coded_sample;
408  if (c->code_size < 2 || c->code_size > 5) {
409  av_log(avctx, AV_LOG_ERROR, "Invalid number of bits %d\n", c->code_size);
410  return AVERROR(EINVAL);
411  }
412  g726_reset(c);
413 
414  avctx->sample_fmt = AV_SAMPLE_FMT_S16;
415 
416  return 0;
417 }
418 
419 static int g726_decode_frame(AVCodecContext *avctx, void *data,
420  int *got_frame_ptr, AVPacket *avpkt)
421 {
422  AVFrame *frame = data;
423  const uint8_t *buf = avpkt->data;
424  int buf_size = avpkt->size;
425  G726Context *c = avctx->priv_data;
426  int16_t *samples;
427  GetBitContext gb;
428  int out_samples, ret;
429 
430  out_samples = buf_size * 8 / c->code_size;
431 
432  /* get output buffer */
433  frame->nb_samples = out_samples;
434  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
435  return ret;
436  samples = (int16_t *)frame->data[0];
437 
438  init_get_bits(&gb, buf, buf_size * 8);
439 
440  while (out_samples--)
441  *samples++ = g726_decode(c, get_bits(&gb, c->code_size));
442 
443  if (get_bits_left(&gb) > 0)
444  av_log(avctx, AV_LOG_ERROR, "Frame invalidly split, missing parser?\n");
445 
446  *got_frame_ptr = 1;
447 
448  return buf_size;
449 }
450 
451 static void g726_decode_flush(AVCodecContext *avctx)
452 {
453  G726Context *c = avctx->priv_data;
454  g726_reset(c);
455 }
456 
457 AVCodec ff_adpcm_g726_decoder = {
458  .name = "g726",
459  .type = AVMEDIA_TYPE_AUDIO,
461  .priv_data_size = sizeof(G726Context),
462  .init = g726_decode_init,
463  .decode = g726_decode_frame,
464  .flush = g726_decode_flush,
465  .capabilities = CODEC_CAP_DR1,
466  .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM"),
467 };
468 #endif
static av_cold int g726_reset(G726Context *c)
Definition: g726.c:275
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
AVOption.
Definition: opt.h:251
const int16_t * W
special table #1 ;-)
Definition: g726.c:74
av_default_item_name
int pk[2]
signs of prev.
Definition: g726.c:86
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
uint8_t exp
4bit exponent
Definition: g726.c:42
static int16_t g726_decode(G726Context *c, int I)
Definition: g726.c:193
int yl
slow scale factor
Definition: g726.c:90
static Float11 * i2f(int i, Float11 *f)
Definition: g726.c:46
static const int16_t iquant_tbl32[]
Definition: g726.c:121
static const G726Tables G726Tables_pool[]
Definition: g726.c:147
Sinusoidal phase f
const uint8_t * F
special table #2
Definition: g726.c:75
static const uint8_t F_tbl32[]
Definition: g726.c:127
int b[6]
sixth order predictor coeffs
Definition: g726.c:85
Float11 dq[6]
prev.
Definition: g726.c:83
signed 16 bits
Definition: samplefmt.h:52
static int sgn(int value)
Definition: g726.c:66
static const int quant_tbl40[]
40kbit/s 5bits per sample
Definition: g726.c:130
set threshold d
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:55
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
const int * quant
quantization table
Definition: g726.c:72
static const int quant_tbl16[]
16kbit/s 2bits per sample
Definition: g726.c:101
int yu
fast scale factor
Definition: g726.c:89
static const uint8_t F_tbl24[]
Definition: g726.c:116
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define av_cold
Definition: attributes.h:78
AVOptions.
#define b
Definition: input.c:42
#define AE
Definition: libmp3lame.c:264
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
uint8_t * data
bitstream reader API header.
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
struct Float11 Float11
G.726 11bit float.
static const int16_t W_tbl32[]
Definition: g726.c:124
const OptionDef options[]
Definition: ffserver.c:4697
G.726 11bit float.
Definition: g726.c:40
int ap
scale factor control
Definition: g726.c:88
G726Tables tbls
static tables needed for computation
Definition: g726.c:80
frame
Definition: stft.m:14
f2
Definition: genspecsines3.m:4
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
static const AVCodecDefault defaults[]
Definition: libspeexenc.c:344
static const int quant_tbl24[]
24kbit/s 3bits per sample
Definition: g726.c:110
static const int16_t iquant_tbl16[]
Definition: g726.c:103
#define CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static uint8_t quant(G726Context *c, int d)
Para 4.2.2 page 18: Adaptive quantizer.
Definition: g726.c:157
Spectrum Plot time data
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
static void put_bits(J2kEncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:160
external API header
uint64_t channel_layout
Audio channel layout.
int bit_rate
the average bitrate
audio channel layout utility functions
uint8_t sign
1bit sign
Definition: g726.c:41
static const int16_t W_tbl24[]
Definition: g726.c:114
ret
Definition: avfilter.c:821
static const int16_t W_tbl40[]
Definition: g726.c:138
static const int16_t iquant_tbl24[]
Definition: g726.c:112
int se
estimated signal for the next iteration
Definition: g726.c:95
LIBAVUTIL_VERSION_INT
Definition: eval.c:55
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
int a[2]
second order predictor coeffs
Definition: g726.c:84
static void flush(AVCodecContext *avctx)
int td
tone detect
Definition: g726.c:93
int frame_size
Number of samples per channel in an audio frame.
NULL
Definition: eval.c:55
#define FF_COMPLIANCE_UNOFFICIAL
Allow unofficial extensions.
int sample_rate
samples per second
uint8_t mant
6bit mantissa
Definition: g726.c:43
main external API structure.
static const int16_t W_tbl16[]
Definition: g726.c:105
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
void * buf
Definition: avisynth_c.h:594
Float11 sr[2]
prev.
Definition: g726.c:82
static int16_t mult(Float11 *f1, Float11 *f2)
Definition: g726.c:56
double value
Definition: eval.c:82
Describe the class of an AVClass context structure.
Definition: log.h:50
synthesis window for stochastic i
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
struct G726Tables G726Tables
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:87
static const uint8_t F_tbl16[]
Definition: g726.c:107
int code_size
Definition: g726.c:98
#define OFFSET(x)
Definition: ffmpeg_opt.c:2553
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:81
int dml
long average magnitude of F[i]
Definition: g726.c:92
struct G726Context G726Context
static double c[64]
static const int16_t iquant_tbl40[]
Definition: g726.c:133
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:54
static const uint8_t F_tbl40[]
Definition: g726.c:143
int y
quantizer scaling factor for the next iteration
Definition: g726.c:97
const int16_t * iquant
inverse quantization table
Definition: g726.c:73
#define av_log2_16bit
Definition: intmath.h:90
int channels
number of audio channels
int sez
estimated second order prediction
Definition: g726.c:96
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:700
Filter the word “frame” indicates either a video frame or a group of audio samples
static int16_t inverse_quant(G726Context *c, int i)
Para 4.2.3 page 22: Inverse adaptive quantizer.
Definition: g726.c:183
static const int quant_tbl32[]
32kbit/s 4bits per sample
Definition: g726.c:119
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
int dms
short average magnitude of F[i]
Definition: g726.c:91
#define AV_CH_LAYOUT_MONO
This structure stores compressed data.
f1
Definition: genspecsines3.m:3
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
int strict_std_compliance
strictly follow the standard (MPEG4, ...).
bitstream writer API