59 #define FREEZE_INTERVAL 128 
   81         int frontier  = 1 << avctx->
trellis;
 
   84                          max_paths * 
sizeof(*s->
paths), error);
 
   86                          2 * frontier * 
sizeof(*s->
node_buf),  error);
 
   88                          2 * frontier * 
sizeof(*s->
nodep_buf), error);
 
  120         bytestream_put_le16(&extradata, avctx->
frame_size);
 
  121         bytestream_put_le16(&extradata, 7); 
 
  122         for (i = 0; i < 7; i++) {
 
  169     int nibble = 
FFMIN(7, abs(delta) * 4 /
 
  183     int nibble = 8*(delta < 0);
 
  186     diff = delta + (step >> 3);
 
  229     nibble = (nibble + bias) / c->
idelta;
 
  230     nibble = av_clip(nibble, -8, 7) & 0x0F;
 
  232     predictor += ((nibble & 0x08) ? (nibble - 0x10) : nibble) * c->
idelta;
 
  235     c->
sample1 = av_clip_int16(predictor);
 
  256     nibble = 
FFMIN(7, abs(delta) * 4 / c->
step) + (delta < 0) * 8;
 
  261     c->
step = av_clip(c->
step, 127, 24567);
 
  267                                    const int16_t *samples, 
uint8_t *dst,
 
  272     const int frontier = 1 << avctx->
trellis;
 
  279     int pathn = 0, froze = -1, i, j, k, generation = 0;
 
  281     memset(hash, 0xff, 65536 * 
sizeof(*hash));
 
  283     memset(nodep_buf, 0, 2 * frontier * 
sizeof(*nodep_buf));
 
  284     nodes[0]          = node_buf + frontier;
 
  298             nodes[0]->
step    = 127;
 
  306     for (i = 0; i < 
n; i++) {
 
  311         memset(nodes_next, 0, frontier * 
sizeof(
TrellisNode*));
 
  312         for (j = 0; j < frontier && nodes[j]; j++) {
 
  315             const int range = (j < frontier / 2) ? 1 : 0;
 
  316             const int step  = nodes[j]->step;
 
  320                                        (nodes[j]->sample2 * c->
coeff2)) / 64;
 
  321                 const int div  = (sample - 
predictor) / step;
 
  322                 const int nmin = av_clip(div-range, -8, 6);
 
  323                 const int nmax = av_clip(div+range, -7, 7);
 
  324                 for (nidx = nmin; nidx <= nmax; nidx++) {
 
  325                     const int nibble = nidx & 0xf;
 
  326                     int dec_sample   = predictor + nidx * step;
 
  327 #define STORE_NODE(NAME, STEP_INDEX)\ 
  333                     dec_sample = av_clip_int16(dec_sample);\ 
  334                     d = sample - dec_sample;\ 
  335                     ssd = nodes[j]->ssd + d*d;\ 
  340                     if (ssd < nodes[j]->ssd)\ 
  353                     h = &hash[(uint16_t) dec_sample];\ 
  354                     if (*h == generation)\ 
  356                     if (heap_pos < frontier) {\ 
  361                         pos = (frontier >> 1) +\ 
  362                               (heap_pos & ((frontier >> 1) - 1));\ 
  363                         if (ssd > nodes_next[pos]->ssd)\ 
  368                     u  = nodes_next[pos];\ 
  370                         av_assert1(pathn < FREEZE_INTERVAL << avctx->trellis);\ 
  372                         nodes_next[pos] = u;\ 
  376                     u->step = STEP_INDEX;\ 
  377                     u->sample2 = nodes[j]->sample1;\ 
  378                     u->sample1 = dec_sample;\ 
  379                     paths[u->path].nibble = nibble;\ 
  380                     paths[u->path].prev   = nodes[j]->path;\ 
  384                         int parent = (pos - 1) >> 1;\ 
  385                         if (nodes_next[parent]->ssd <= ssd)\ 
  387                         FFSWAP(TrellisNode*, nodes_next[parent], nodes_next[pos]);\ 
  397 #define LOOP_NODES(NAME, STEP_TABLE, STEP_INDEX)\ 
  398                 const int predictor = nodes[j]->sample1;\ 
  399                 const int div = (sample - predictor) * 4 / STEP_TABLE;\ 
  400                 int nmin = av_clip(div - range, -7, 6);\ 
  401                 int nmax = av_clip(div + range, -6, 7);\ 
  406                 for (nidx = nmin; nidx <= nmax; nidx++) {\ 
  407                     const int nibble = nidx < 0 ? 7 - nidx : nidx;\ 
  408                     int dec_sample = predictor +\ 
  410                                      ff_adpcm_yamaha_difflookup[nibble]) / 8;\ 
  411                     STORE_NODE(NAME, STEP_INDEX);\ 
  429         if (generation == 255) {
 
  430             memset(hash, 0xff, 65536 * 
sizeof(*hash));
 
  435         if (nodes[0]->ssd > (1 << 28)) {
 
  436             for (j = 1; j < frontier && nodes[j]; j++)
 
  437                 nodes[j]->ssd -= nodes[0]->ssd;
 
  443             p = &paths[nodes[0]->path];
 
  444             for (k = i; k > froze; k--) {
 
  453             memset(nodes + 1, 0, (frontier - 1) * 
sizeof(
TrellisNode*));
 
  457     p = &paths[nodes[0]->
path];
 
  458     for (i = n - 1; i > froze; i--) {
 
  464     c->
sample1    = nodes[0]->sample1;
 
  465     c->
sample2    = nodes[0]->sample2;
 
  467     c->
step       = nodes[0]->step;
 
  468     c->
idelta     = nodes[0]->step;
 
  474     int n, i, ch, st, pkt_size, 
ret;
 
  475     const int16_t *samples;
 
  481     samples = (
const int16_t *)frame->
data[0];
 
  500         for (ch = 0; ch < avctx->
channels; ch++) {
 
  513             for (ch = 0; ch < avctx->
channels; ch++) {
 
  515                                        buf + ch * blocks * 8, &c->
status[ch],
 
  518             for (i = 0; i < blocks; i++) {
 
  519                 for (ch = 0; ch < avctx->
channels; ch++) {
 
  520                     uint8_t *buf1 = buf + ch * blocks * 8 + i * 8;
 
  521                     for (j = 0; j < 8; j += 2)
 
  522                         *dst++ = buf1[j] | (buf1[j + 1] << 4);
 
  527             for (i = 0; i < blocks; i++) {
 
  528                 for (ch = 0; ch < avctx->
channels; ch++) {
 
  530                     const int16_t *smp = &samples_p[ch][1 + i * 8];
 
  531                     for (j = 0; j < 8; j += 2) {
 
  546         for (ch = 0; ch < avctx->
channels; ch++) {
 
  554                 for (i = 0; i < 64; i++)
 
  557                 for (i = 0; i < 64; i += 2) {
 
  581         for (i = 0; i < avctx->
channels; i++) {
 
  595                                        buf + n, &c->
status[1], n,
 
  597             for (i = 0; i < 
n; i++) {
 
  609                              samples[2 * i + 1]));
 
  616         for (i = 0; i < avctx->
channels; i++) {
 
  622         for (i = 0; i < avctx->
channels; i++) {
 
  627         for (i = 0; i < avctx->
channels; i++)
 
  633         for (i = 0; i < avctx->
channels; i++)
 
  642                 for (i = 0; i < 
n; i += 2)
 
  643                     *dst++ = (buf[i] << 4) | buf[i + 1];
 
  649                 for (i = 0; i < 
n; i++)
 
  650                     *dst++ = (buf[i] << 4) | buf[n + i];
 
  654             for (i = 7 * avctx->
channels; i < avctx->block_align; i++) {
 
  670                 for (i = 0; i < 
n; i += 2)
 
  671                     *dst++ = buf[i] | (buf[i + 1] << 4);
 
  677                 for (i = 0; i < 
n; i++)
 
  678                     *dst++ = buf[i] | (buf[n + i] << 4);
 
  682             for (n *= avctx->
channels; n > 0; n--) {
 
  708 #define ADPCM_ENCODER(id_, name_, sample_fmts_, long_name_) \ 
  709 AVCodec ff_ ## name_ ## _encoder = {                        \ 
  711     .long_name      = NULL_IF_CONFIG_SMALL(long_name_),     \ 
  712     .type           = AVMEDIA_TYPE_AUDIO,                   \ 
  714     .priv_data_size = sizeof(ADPCMEncodeContext),           \ 
  715     .init           = adpcm_encode_init,                    \ 
  716     .encode2        = adpcm_encode_frame,                   \ 
  717     .close          = adpcm_encode_close,                   \ 
  718     .sample_fmts    = sample_fmts_,                         \