Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * MPEG-4 ALS decoder
  3.  * Copyright (c) 2009 Thilo Borgmann <thilo.borgmann _at_ mail.de>
  4.  *
  5.  * This file is part of FFmpeg.
  6.  *
  7.  * FFmpeg is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU Lesser General Public
  9.  * License as published by the Free Software Foundation; either
  10.  * version 2.1 of the License, or (at your option) any later version.
  11.  *
  12.  * FFmpeg is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * Lesser General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU Lesser General Public
  18.  * License along with FFmpeg; if not, write to the Free Software
  19.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20.  */
  21.  
  22. /**
  23.  * @file
  24.  * MPEG-4 ALS decoder
  25.  * @author Thilo Borgmann <thilo.borgmann _at_ mail.de>
  26.  */
  27.  
  28. #include <inttypes.h>
  29.  
  30. #include "avcodec.h"
  31. #include "get_bits.h"
  32. #include "unary.h"
  33. #include "mpeg4audio.h"
  34. #include "bytestream.h"
  35. #include "bgmc.h"
  36. #include "bswapdsp.h"
  37. #include "internal.h"
  38. #include "libavutil/samplefmt.h"
  39. #include "libavutil/crc.h"
  40.  
  41. #include <stdint.h>
  42.  
  43. /** Rice parameters and corresponding index offsets for decoding the
  44.  *  indices of scaled PARCOR values. The table chosen is set globally
  45.  *  by the encoder and stored in ALSSpecificConfig.
  46.  */
  47. static const int8_t parcor_rice_table[3][20][2] = {
  48.     { {-52, 4}, {-29, 5}, {-31, 4}, { 19, 4}, {-16, 4},
  49.       { 12, 3}, { -7, 3}, {  9, 3}, { -5, 3}, {  6, 3},
  50.       { -4, 3}, {  3, 3}, { -3, 2}, {  3, 2}, { -2, 2},
  51.       {  3, 2}, { -1, 2}, {  2, 2}, { -1, 2}, {  2, 2} },
  52.     { {-58, 3}, {-42, 4}, {-46, 4}, { 37, 5}, {-36, 4},
  53.       { 29, 4}, {-29, 4}, { 25, 4}, {-23, 4}, { 20, 4},
  54.       {-17, 4}, { 16, 4}, {-12, 4}, { 12, 3}, {-10, 4},
  55.       {  7, 3}, { -4, 4}, {  3, 3}, { -1, 3}, {  1, 3} },
  56.     { {-59, 3}, {-45, 5}, {-50, 4}, { 38, 4}, {-39, 4},
  57.       { 32, 4}, {-30, 4}, { 25, 3}, {-23, 3}, { 20, 3},
  58.       {-20, 3}, { 16, 3}, {-13, 3}, { 10, 3}, { -7, 3},
  59.       {  3, 3}, {  0, 3}, { -1, 3}, {  2, 3}, { -1, 2} }
  60. };
  61.  
  62.  
  63. /** Scaled PARCOR values used for the first two PARCOR coefficients.
  64.  *  To be indexed by the Rice coded indices.
  65.  *  Generated by: parcor_scaled_values[i] = 32 + ((i * (i+1)) << 7) - (1 << 20)
  66.  *  Actual values are divided by 32 in order to be stored in 16 bits.
  67.  */
  68. static const int16_t parcor_scaled_values[] = {
  69.     -1048544 / 32, -1048288 / 32, -1047776 / 32, -1047008 / 32,
  70.     -1045984 / 32, -1044704 / 32, -1043168 / 32, -1041376 / 32,
  71.     -1039328 / 32, -1037024 / 32, -1034464 / 32, -1031648 / 32,
  72.     -1028576 / 32, -1025248 / 32, -1021664 / 32, -1017824 / 32,
  73.     -1013728 / 32, -1009376 / 32, -1004768 / 32,  -999904 / 32,
  74.      -994784 / 32,  -989408 / 32,  -983776 / 32,  -977888 / 32,
  75.      -971744 / 32,  -965344 / 32,  -958688 / 32,  -951776 / 32,
  76.      -944608 / 32,  -937184 / 32,  -929504 / 32,  -921568 / 32,
  77.      -913376 / 32,  -904928 / 32,  -896224 / 32,  -887264 / 32,
  78.      -878048 / 32,  -868576 / 32,  -858848 / 32,  -848864 / 32,
  79.      -838624 / 32,  -828128 / 32,  -817376 / 32,  -806368 / 32,
  80.      -795104 / 32,  -783584 / 32,  -771808 / 32,  -759776 / 32,
  81.      -747488 / 32,  -734944 / 32,  -722144 / 32,  -709088 / 32,
  82.      -695776 / 32,  -682208 / 32,  -668384 / 32,  -654304 / 32,
  83.      -639968 / 32,  -625376 / 32,  -610528 / 32,  -595424 / 32,
  84.      -580064 / 32,  -564448 / 32,  -548576 / 32,  -532448 / 32,
  85.      -516064 / 32,  -499424 / 32,  -482528 / 32,  -465376 / 32,
  86.      -447968 / 32,  -430304 / 32,  -412384 / 32,  -394208 / 32,
  87.      -375776 / 32,  -357088 / 32,  -338144 / 32,  -318944 / 32,
  88.      -299488 / 32,  -279776 / 32,  -259808 / 32,  -239584 / 32,
  89.      -219104 / 32,  -198368 / 32,  -177376 / 32,  -156128 / 32,
  90.      -134624 / 32,  -112864 / 32,   -90848 / 32,   -68576 / 32,
  91.       -46048 / 32,   -23264 / 32,     -224 / 32,    23072 / 32,
  92.        46624 / 32,    70432 / 32,    94496 / 32,   118816 / 32,
  93.       143392 / 32,   168224 / 32,   193312 / 32,   218656 / 32,
  94.       244256 / 32,   270112 / 32,   296224 / 32,   322592 / 32,
  95.       349216 / 32,   376096 / 32,   403232 / 32,   430624 / 32,
  96.       458272 / 32,   486176 / 32,   514336 / 32,   542752 / 32,
  97.       571424 / 32,   600352 / 32,   629536 / 32,   658976 / 32,
  98.       688672 / 32,   718624 / 32,   748832 / 32,   779296 / 32,
  99.       810016 / 32,   840992 / 32,   872224 / 32,   903712 / 32,
  100.       935456 / 32,   967456 / 32,   999712 / 32,  1032224 / 32
  101. };
  102.  
  103.  
  104. /** Gain values of p(0) for long-term prediction.
  105.  *  To be indexed by the Rice coded indices.
  106.  */
  107. static const uint8_t ltp_gain_values [4][4] = {
  108.     { 0,  8, 16,  24},
  109.     {32, 40, 48,  56},
  110.     {64, 70, 76,  82},
  111.     {88, 92, 96, 100}
  112. };
  113.  
  114.  
  115. /** Inter-channel weighting factors for multi-channel correlation.
  116.  *  To be indexed by the Rice coded indices.
  117.  */
  118. static const int16_t mcc_weightings[] = {
  119.     204,  192,  179,  166,  153,  140,  128,  115,
  120.     102,   89,   76,   64,   51,   38,   25,   12,
  121.       0,  -12,  -25,  -38,  -51,  -64,  -76,  -89,
  122.    -102, -115, -128, -140, -153, -166, -179, -192
  123. };
  124.  
  125.  
  126. /** Tail codes used in arithmetic coding using block Gilbert-Moore codes.
  127.  */
  128. static const uint8_t tail_code[16][6] = {
  129.     { 74, 44, 25, 13,  7, 3},
  130.     { 68, 42, 24, 13,  7, 3},
  131.     { 58, 39, 23, 13,  7, 3},
  132.     {126, 70, 37, 19, 10, 5},
  133.     {132, 70, 37, 20, 10, 5},
  134.     {124, 70, 38, 20, 10, 5},
  135.     {120, 69, 37, 20, 11, 5},
  136.     {116, 67, 37, 20, 11, 5},
  137.     {108, 66, 36, 20, 10, 5},
  138.     {102, 62, 36, 20, 10, 5},
  139.     { 88, 58, 34, 19, 10, 5},
  140.     {162, 89, 49, 25, 13, 7},
  141.     {156, 87, 49, 26, 14, 7},
  142.     {150, 86, 47, 26, 14, 7},
  143.     {142, 84, 47, 26, 14, 7},
  144.     {131, 79, 46, 26, 14, 7}
  145. };
  146.  
  147.  
  148. enum RA_Flag {
  149.     RA_FLAG_NONE,
  150.     RA_FLAG_FRAMES,
  151.     RA_FLAG_HEADER
  152. };
  153.  
  154.  
  155. typedef struct ALSSpecificConfig {
  156.     uint32_t samples;         ///< number of samples, 0xFFFFFFFF if unknown
  157.     int resolution;           ///< 000 = 8-bit; 001 = 16-bit; 010 = 24-bit; 011 = 32-bit
  158.     int floating;             ///< 1 = IEEE 32-bit floating-point, 0 = integer
  159.     int msb_first;            ///< 1 = original CRC calculated on big-endian system, 0 = little-endian
  160.     int frame_length;         ///< frame length for each frame (last frame may differ)
  161.     int ra_distance;          ///< distance between RA frames (in frames, 0...255)
  162.     enum RA_Flag ra_flag;     ///< indicates where the size of ra units is stored
  163.     int adapt_order;          ///< adaptive order: 1 = on, 0 = off
  164.     int coef_table;           ///< table index of Rice code parameters
  165.     int long_term_prediction; ///< long term prediction (LTP): 1 = on, 0 = off
  166.     int max_order;            ///< maximum prediction order (0..1023)
  167.     int block_switching;      ///< number of block switching levels
  168.     int bgmc;                 ///< "Block Gilbert-Moore Code": 1 = on, 0 = off (Rice coding only)
  169.     int sb_part;              ///< sub-block partition
  170.     int joint_stereo;         ///< joint stereo: 1 = on, 0 = off
  171.     int mc_coding;            ///< extended inter-channel coding (multi channel coding): 1 = on, 0 = off
  172.     int chan_config;          ///< indicates that a chan_config_info field is present
  173.     int chan_sort;            ///< channel rearrangement: 1 = on, 0 = off
  174.     int rlslms;               ///< use "Recursive Least Square-Least Mean Square" predictor: 1 = on, 0 = off
  175.     int chan_config_info;     ///< mapping of channels to loudspeaker locations. Unused until setting channel configuration is implemented.
  176.     int *chan_pos;            ///< original channel positions
  177.     int crc_enabled;          ///< enable Cyclic Redundancy Checksum
  178. } ALSSpecificConfig;
  179.  
  180.  
  181. typedef struct ALSChannelData {
  182.     int stop_flag;
  183.     int master_channel;
  184.     int time_diff_flag;
  185.     int time_diff_sign;
  186.     int time_diff_index;
  187.     int weighting[6];
  188. } ALSChannelData;
  189.  
  190.  
  191. typedef struct ALSDecContext {
  192.     AVCodecContext *avctx;
  193.     ALSSpecificConfig sconf;
  194.     GetBitContext gb;
  195.     BswapDSPContext bdsp;
  196.     const AVCRC *crc_table;
  197.     uint32_t crc_org;               ///< CRC value of the original input data
  198.     uint32_t crc;                   ///< CRC value calculated from decoded data
  199.     unsigned int cur_frame_length;  ///< length of the current frame to decode
  200.     unsigned int frame_id;          ///< the frame ID / number of the current frame
  201.     unsigned int js_switch;         ///< if true, joint-stereo decoding is enforced
  202.     unsigned int cs_switch;         ///< if true, channel rearrangement is done
  203.     unsigned int num_blocks;        ///< number of blocks used in the current frame
  204.     unsigned int s_max;             ///< maximum Rice parameter allowed in entropy coding
  205.     uint8_t *bgmc_lut;              ///< pointer at lookup tables used for BGMC
  206.     int *bgmc_lut_status;           ///< pointer at lookup table status flags used for BGMC
  207.     int ltp_lag_length;             ///< number of bits used for ltp lag value
  208.     int *const_block;               ///< contains const_block flags for all channels
  209.     unsigned int *shift_lsbs;       ///< contains shift_lsbs flags for all channels
  210.     unsigned int *opt_order;        ///< contains opt_order flags for all channels
  211.     int *store_prev_samples;        ///< contains store_prev_samples flags for all channels
  212.     int *use_ltp;                   ///< contains use_ltp flags for all channels
  213.     int *ltp_lag;                   ///< contains ltp lag values for all channels
  214.     int **ltp_gain;                 ///< gain values for ltp 5-tap filter for a channel
  215.     int *ltp_gain_buffer;           ///< contains all gain values for ltp 5-tap filter
  216.     int32_t **quant_cof;            ///< quantized parcor coefficients for a channel
  217.     int32_t *quant_cof_buffer;      ///< contains all quantized parcor coefficients
  218.     int32_t **lpc_cof;              ///< coefficients of the direct form prediction filter for a channel
  219.     int32_t *lpc_cof_buffer;        ///< contains all coefficients of the direct form prediction filter
  220.     int32_t *lpc_cof_reversed_buffer; ///< temporary buffer to set up a reversed versio of lpc_cof_buffer
  221.     ALSChannelData **chan_data;     ///< channel data for multi-channel correlation
  222.     ALSChannelData *chan_data_buffer; ///< contains channel data for all channels
  223.     int *reverted_channels;         ///< stores a flag for each reverted channel
  224.     int32_t *prev_raw_samples;      ///< contains unshifted raw samples from the previous block
  225.     int32_t **raw_samples;          ///< decoded raw samples for each channel
  226.     int32_t *raw_buffer;            ///< contains all decoded raw samples including carryover samples
  227.     uint8_t *crc_buffer;            ///< buffer of byte order corrected samples used for CRC check
  228. } ALSDecContext;
  229.  
  230.  
  231. typedef struct ALSBlockData {
  232.     unsigned int block_length;      ///< number of samples within the block
  233.     unsigned int ra_block;          ///< if true, this is a random access block
  234.     int          *const_block;      ///< if true, this is a constant value block
  235.     int          js_blocks;         ///< true if this block contains a difference signal
  236.     unsigned int *shift_lsbs;       ///< shift of values for this block
  237.     unsigned int *opt_order;        ///< prediction order of this block
  238.     int          *store_prev_samples;///< if true, carryover samples have to be stored
  239.     int          *use_ltp;          ///< if true, long-term prediction is used
  240.     int          *ltp_lag;          ///< lag value for long-term prediction
  241.     int          *ltp_gain;         ///< gain values for ltp 5-tap filter
  242.     int32_t      *quant_cof;        ///< quantized parcor coefficients
  243.     int32_t      *lpc_cof;          ///< coefficients of the direct form prediction
  244.     int32_t      *raw_samples;      ///< decoded raw samples / residuals for this block
  245.     int32_t      *prev_raw_samples; ///< contains unshifted raw samples from the previous block
  246.     int32_t      *raw_other;        ///< decoded raw samples of the other channel of a channel pair
  247. } ALSBlockData;
  248.  
  249.  
  250. static av_cold void dprint_specific_config(ALSDecContext *ctx)
  251. {
  252. #ifdef DEBUG
  253.     AVCodecContext *avctx    = ctx->avctx;
  254.     ALSSpecificConfig *sconf = &ctx->sconf;
  255.  
  256.     ff_dlog(avctx, "resolution = %i\n",           sconf->resolution);
  257.     ff_dlog(avctx, "floating = %i\n",             sconf->floating);
  258.     ff_dlog(avctx, "frame_length = %i\n",         sconf->frame_length);
  259.     ff_dlog(avctx, "ra_distance = %i\n",          sconf->ra_distance);
  260.     ff_dlog(avctx, "ra_flag = %i\n",              sconf->ra_flag);
  261.     ff_dlog(avctx, "adapt_order = %i\n",          sconf->adapt_order);
  262.     ff_dlog(avctx, "coef_table = %i\n",           sconf->coef_table);
  263.     ff_dlog(avctx, "long_term_prediction = %i\n", sconf->long_term_prediction);
  264.     ff_dlog(avctx, "max_order = %i\n",            sconf->max_order);
  265.     ff_dlog(avctx, "block_switching = %i\n",      sconf->block_switching);
  266.     ff_dlog(avctx, "bgmc = %i\n",                 sconf->bgmc);
  267.     ff_dlog(avctx, "sb_part = %i\n",              sconf->sb_part);
  268.     ff_dlog(avctx, "joint_stereo = %i\n",         sconf->joint_stereo);
  269.     ff_dlog(avctx, "mc_coding = %i\n",            sconf->mc_coding);
  270.     ff_dlog(avctx, "chan_config = %i\n",          sconf->chan_config);
  271.     ff_dlog(avctx, "chan_sort = %i\n",            sconf->chan_sort);
  272.     ff_dlog(avctx, "RLSLMS = %i\n",               sconf->rlslms);
  273.     ff_dlog(avctx, "chan_config_info = %i\n",     sconf->chan_config_info);
  274. #endif
  275. }
  276.  
  277.  
  278. /** Read an ALSSpecificConfig from a buffer into the output struct.
  279.  */
  280. static av_cold int read_specific_config(ALSDecContext *ctx)
  281. {
  282.     GetBitContext gb;
  283.     uint64_t ht_size;
  284.     int i, config_offset;
  285.     MPEG4AudioConfig m4ac = {0};
  286.     ALSSpecificConfig *sconf = &ctx->sconf;
  287.     AVCodecContext *avctx    = ctx->avctx;
  288.     uint32_t als_id, header_size, trailer_size;
  289.     int ret;
  290.  
  291.     if ((ret = init_get_bits8(&gb, avctx->extradata, avctx->extradata_size)) < 0)
  292.         return ret;
  293.  
  294.     config_offset = avpriv_mpeg4audio_get_config(&m4ac, avctx->extradata,
  295.                                                  avctx->extradata_size * 8, 1);
  296.  
  297.     if (config_offset < 0)
  298.         return AVERROR_INVALIDDATA;
  299.  
  300.     skip_bits_long(&gb, config_offset);
  301.  
  302.     if (get_bits_left(&gb) < (30 << 3))
  303.         return AVERROR_INVALIDDATA;
  304.  
  305.     // read the fixed items
  306.     als_id                      = get_bits_long(&gb, 32);
  307.     avctx->sample_rate          = m4ac.sample_rate;
  308.     skip_bits_long(&gb, 32); // sample rate already known
  309.     sconf->samples              = get_bits_long(&gb, 32);
  310.     avctx->channels             = m4ac.channels;
  311.     skip_bits(&gb, 16);      // number of channels already known
  312.     skip_bits(&gb, 3);       // skip file_type
  313.     sconf->resolution           = get_bits(&gb, 3);
  314.     sconf->floating             = get_bits1(&gb);
  315.     sconf->msb_first            = get_bits1(&gb);
  316.     sconf->frame_length         = get_bits(&gb, 16) + 1;
  317.     sconf->ra_distance          = get_bits(&gb, 8);
  318.     sconf->ra_flag              = get_bits(&gb, 2);
  319.     sconf->adapt_order          = get_bits1(&gb);
  320.     sconf->coef_table           = get_bits(&gb, 2);
  321.     sconf->long_term_prediction = get_bits1(&gb);
  322.     sconf->max_order            = get_bits(&gb, 10);
  323.     sconf->block_switching      = get_bits(&gb, 2);
  324.     sconf->bgmc                 = get_bits1(&gb);
  325.     sconf->sb_part              = get_bits1(&gb);
  326.     sconf->joint_stereo         = get_bits1(&gb);
  327.     sconf->mc_coding            = get_bits1(&gb);
  328.     sconf->chan_config          = get_bits1(&gb);
  329.     sconf->chan_sort            = get_bits1(&gb);
  330.     sconf->crc_enabled          = get_bits1(&gb);
  331.     sconf->rlslms               = get_bits1(&gb);
  332.     skip_bits(&gb, 5);       // skip 5 reserved bits
  333.     skip_bits1(&gb);         // skip aux_data_enabled
  334.  
  335.  
  336.     // check for ALSSpecificConfig struct
  337.     if (als_id != MKBETAG('A','L','S','\0'))
  338.         return AVERROR_INVALIDDATA;
  339.  
  340.     ctx->cur_frame_length = sconf->frame_length;
  341.  
  342.     // read channel config
  343.     if (sconf->chan_config)
  344.         sconf->chan_config_info = get_bits(&gb, 16);
  345.     // TODO: use this to set avctx->channel_layout
  346.  
  347.  
  348.     // read channel sorting
  349.     if (sconf->chan_sort && avctx->channels > 1) {
  350.         int chan_pos_bits = av_ceil_log2(avctx->channels);
  351.         int bits_needed  = avctx->channels * chan_pos_bits + 7;
  352.         if (get_bits_left(&gb) < bits_needed)
  353.             return AVERROR_INVALIDDATA;
  354.  
  355.         if (!(sconf->chan_pos = av_malloc_array(avctx->channels, sizeof(*sconf->chan_pos))))
  356.             return AVERROR(ENOMEM);
  357.  
  358.         ctx->cs_switch = 1;
  359.  
  360.         for (i = 0; i < avctx->channels; i++) {
  361.             sconf->chan_pos[i] = -1;
  362.         }
  363.  
  364.         for (i = 0; i < avctx->channels; i++) {
  365.             int idx;
  366.  
  367.             idx = get_bits(&gb, chan_pos_bits);
  368.             if (idx >= avctx->channels || sconf->chan_pos[idx] != -1) {
  369.                 av_log(avctx, AV_LOG_WARNING, "Invalid channel reordering.\n");
  370.                 ctx->cs_switch = 0;
  371.                 break;
  372.             }
  373.             sconf->chan_pos[idx] = i;
  374.         }
  375.  
  376.         align_get_bits(&gb);
  377.     }
  378.  
  379.  
  380.     // read fixed header and trailer sizes,
  381.     // if size = 0xFFFFFFFF then there is no data field!
  382.     if (get_bits_left(&gb) < 64)
  383.         return AVERROR_INVALIDDATA;
  384.  
  385.     header_size  = get_bits_long(&gb, 32);
  386.     trailer_size = get_bits_long(&gb, 32);
  387.     if (header_size  == 0xFFFFFFFF)
  388.         header_size  = 0;
  389.     if (trailer_size == 0xFFFFFFFF)
  390.         trailer_size = 0;
  391.  
  392.     ht_size = ((int64_t)(header_size) + (int64_t)(trailer_size)) << 3;
  393.  
  394.  
  395.     // skip the header and trailer data
  396.     if (get_bits_left(&gb) < ht_size)
  397.         return AVERROR_INVALIDDATA;
  398.  
  399.     if (ht_size > INT32_MAX)
  400.         return AVERROR_PATCHWELCOME;
  401.  
  402.     skip_bits_long(&gb, ht_size);
  403.  
  404.  
  405.     // initialize CRC calculation
  406.     if (sconf->crc_enabled) {
  407.         if (get_bits_left(&gb) < 32)
  408.             return AVERROR_INVALIDDATA;
  409.  
  410.         if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
  411.             ctx->crc_table = av_crc_get_table(AV_CRC_32_IEEE_LE);
  412.             ctx->crc       = 0xFFFFFFFF;
  413.             ctx->crc_org   = ~get_bits_long(&gb, 32);
  414.         } else
  415.             skip_bits_long(&gb, 32);
  416.     }
  417.  
  418.  
  419.     // no need to read the rest of ALSSpecificConfig (ra_unit_size & aux data)
  420.  
  421.     dprint_specific_config(ctx);
  422.  
  423.     return 0;
  424. }
  425.  
  426.  
  427. /** Check the ALSSpecificConfig for unsupported features.
  428.  */
  429. static int check_specific_config(ALSDecContext *ctx)
  430. {
  431.     ALSSpecificConfig *sconf = &ctx->sconf;
  432.     int error = 0;
  433.  
  434.     // report unsupported feature and set error value
  435.     #define MISSING_ERR(cond, str, errval)              \
  436.     {                                                   \
  437.         if (cond) {                                     \
  438.             avpriv_report_missing_feature(ctx->avctx,   \
  439.                                           str);         \
  440.             error = errval;                             \
  441.         }                                               \
  442.     }
  443.  
  444.     MISSING_ERR(sconf->floating,  "Floating point decoding",     AVERROR_PATCHWELCOME);
  445.     MISSING_ERR(sconf->rlslms,    "Adaptive RLS-LMS prediction", AVERROR_PATCHWELCOME);
  446.  
  447.     return error;
  448. }
  449.  
  450.  
  451. /** Parse the bs_info field to extract the block partitioning used in
  452.  *  block switching mode, refer to ISO/IEC 14496-3, section 11.6.2.
  453.  */
  454. static void parse_bs_info(const uint32_t bs_info, unsigned int n,
  455.                           unsigned int div, unsigned int **div_blocks,
  456.                           unsigned int *num_blocks)
  457. {
  458.     if (n < 31 && ((bs_info << n) & 0x40000000)) {
  459.         // if the level is valid and the investigated bit n is set
  460.         // then recursively check both children at bits (2n+1) and (2n+2)
  461.         n   *= 2;
  462.         div += 1;
  463.         parse_bs_info(bs_info, n + 1, div, div_blocks, num_blocks);
  464.         parse_bs_info(bs_info, n + 2, div, div_blocks, num_blocks);
  465.     } else {
  466.         // else the bit is not set or the last level has been reached
  467.         // (bit implicitly not set)
  468.         **div_blocks = div;
  469.         (*div_blocks)++;
  470.         (*num_blocks)++;
  471.     }
  472. }
  473.  
  474.  
  475. /** Read and decode a Rice codeword.
  476.  */
  477. static int32_t decode_rice(GetBitContext *gb, unsigned int k)
  478. {
  479.     int max = get_bits_left(gb) - k;
  480.     int q   = get_unary(gb, 0, max);
  481.     int r   = k ? get_bits1(gb) : !(q & 1);
  482.  
  483.     if (k > 1) {
  484.         q <<= (k - 1);
  485.         q  += get_bits_long(gb, k - 1);
  486.     } else if (!k) {
  487.         q >>= 1;
  488.     }
  489.     return r ? q : ~q;
  490. }
  491.  
  492.  
  493. /** Convert PARCOR coefficient k to direct filter coefficient.
  494.  */
  495. static void parcor_to_lpc(unsigned int k, const int32_t *par, int32_t *cof)
  496. {
  497.     int i, j;
  498.  
  499.     for (i = 0, j = k - 1; i < j; i++, j--) {
  500.         int tmp1 = ((MUL64(par[k], cof[j]) + (1 << 19)) >> 20);
  501.         cof[j]  += ((MUL64(par[k], cof[i]) + (1 << 19)) >> 20);
  502.         cof[i]  += tmp1;
  503.     }
  504.     if (i == j)
  505.         cof[i] += ((MUL64(par[k], cof[j]) + (1 << 19)) >> 20);
  506.  
  507.     cof[k] = par[k];
  508. }
  509.  
  510.  
  511. /** Read block switching field if necessary and set actual block sizes.
  512.  *  Also assure that the block sizes of the last frame correspond to the
  513.  *  actual number of samples.
  514.  */
  515. static void get_block_sizes(ALSDecContext *ctx, unsigned int *div_blocks,
  516.                             uint32_t *bs_info)
  517. {
  518.     ALSSpecificConfig *sconf     = &ctx->sconf;
  519.     GetBitContext *gb            = &ctx->gb;
  520.     unsigned int *ptr_div_blocks = div_blocks;
  521.     unsigned int b;
  522.  
  523.     if (sconf->block_switching) {
  524.         unsigned int bs_info_len = 1 << (sconf->block_switching + 2);
  525.         *bs_info = get_bits_long(gb, bs_info_len);
  526.         *bs_info <<= (32 - bs_info_len);
  527.     }
  528.  
  529.     ctx->num_blocks = 0;
  530.     parse_bs_info(*bs_info, 0, 0, &ptr_div_blocks, &ctx->num_blocks);
  531.  
  532.     // The last frame may have an overdetermined block structure given in
  533.     // the bitstream. In that case the defined block structure would need
  534.     // more samples than available to be consistent.
  535.     // The block structure is actually used but the block sizes are adapted
  536.     // to fit the actual number of available samples.
  537.     // Example: 5 samples, 2nd level block sizes: 2 2 2 2.
  538.     // This results in the actual block sizes:    2 2 1 0.
  539.     // This is not specified in 14496-3 but actually done by the reference
  540.     // codec RM22 revision 2.
  541.     // This appears to happen in case of an odd number of samples in the last
  542.     // frame which is actually not allowed by the block length switching part
  543.     // of 14496-3.
  544.     // The ALS conformance files feature an odd number of samples in the last
  545.     // frame.
  546.  
  547.     for (b = 0; b < ctx->num_blocks; b++)
  548.         div_blocks[b] = ctx->sconf.frame_length >> div_blocks[b];
  549.  
  550.     if (ctx->cur_frame_length != ctx->sconf.frame_length) {
  551.         unsigned int remaining = ctx->cur_frame_length;
  552.  
  553.         for (b = 0; b < ctx->num_blocks; b++) {
  554.             if (remaining <= div_blocks[b]) {
  555.                 div_blocks[b] = remaining;
  556.                 ctx->num_blocks = b + 1;
  557.                 break;
  558.             }
  559.  
  560.             remaining -= div_blocks[b];
  561.         }
  562.     }
  563. }
  564.  
  565.  
  566. /** Read the block data for a constant block
  567.  */
  568. static int read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
  569. {
  570.     ALSSpecificConfig *sconf = &ctx->sconf;
  571.     AVCodecContext *avctx    = ctx->avctx;
  572.     GetBitContext *gb        = &ctx->gb;
  573.  
  574.     if (bd->block_length <= 0)
  575.         return AVERROR_INVALIDDATA;
  576.  
  577.     *bd->raw_samples = 0;
  578.     *bd->const_block = get_bits1(gb);    // 1 = constant value, 0 = zero block (silence)
  579.     bd->js_blocks    = get_bits1(gb);
  580.  
  581.     // skip 5 reserved bits
  582.     skip_bits(gb, 5);
  583.  
  584.     if (*bd->const_block) {
  585.         unsigned int const_val_bits = sconf->floating ? 24 : avctx->bits_per_raw_sample;
  586.         *bd->raw_samples = get_sbits_long(gb, const_val_bits);
  587.     }
  588.  
  589.     // ensure constant block decoding by reusing this field
  590.     *bd->const_block = 1;
  591.  
  592.     return 0;
  593. }
  594.  
  595.  
  596. /** Decode the block data for a constant block
  597.  */
  598. static void decode_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
  599. {
  600.     int      smp = bd->block_length - 1;
  601.     int32_t  val = *bd->raw_samples;
  602.     int32_t *dst = bd->raw_samples + 1;
  603.  
  604.     // write raw samples into buffer
  605.     for (; smp; smp--)
  606.         *dst++ = val;
  607. }
  608.  
  609.  
  610. /** Read the block data for a non-constant block
  611.  */
  612. static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
  613. {
  614.     ALSSpecificConfig *sconf = &ctx->sconf;
  615.     AVCodecContext *avctx    = ctx->avctx;
  616.     GetBitContext *gb        = &ctx->gb;
  617.     unsigned int k;
  618.     unsigned int s[8];
  619.     unsigned int sx[8];
  620.     unsigned int sub_blocks, log2_sub_blocks, sb_length;
  621.     unsigned int start      = 0;
  622.     unsigned int opt_order;
  623.     int          sb;
  624.     int32_t      *quant_cof = bd->quant_cof;
  625.     int32_t      *current_res;
  626.  
  627.  
  628.     // ensure variable block decoding by reusing this field
  629.     *bd->const_block = 0;
  630.  
  631.     *bd->opt_order  = 1;
  632.     bd->js_blocks   = get_bits1(gb);
  633.  
  634.     opt_order       = *bd->opt_order;
  635.  
  636.     // determine the number of subblocks for entropy decoding
  637.     if (!sconf->bgmc && !sconf->sb_part) {
  638.         log2_sub_blocks = 0;
  639.     } else {
  640.         if (sconf->bgmc && sconf->sb_part)
  641.             log2_sub_blocks = get_bits(gb, 2);
  642.         else
  643.             log2_sub_blocks = 2 * get_bits1(gb);
  644.     }
  645.  
  646.     sub_blocks = 1 << log2_sub_blocks;
  647.  
  648.     // do not continue in case of a damaged stream since
  649.     // block_length must be evenly divisible by sub_blocks
  650.     if (bd->block_length & (sub_blocks - 1)) {
  651.         av_log(avctx, AV_LOG_WARNING,
  652.                "Block length is not evenly divisible by the number of subblocks.\n");
  653.         return AVERROR_INVALIDDATA;
  654.     }
  655.  
  656.     sb_length = bd->block_length >> log2_sub_blocks;
  657.  
  658.     if (sconf->bgmc) {
  659.         s[0] = get_bits(gb, 8 + (sconf->resolution > 1));
  660.         for (k = 1; k < sub_blocks; k++)
  661.             s[k] = s[k - 1] + decode_rice(gb, 2);
  662.  
  663.         for (k = 0; k < sub_blocks; k++) {
  664.             sx[k]   = s[k] & 0x0F;
  665.             s [k] >>= 4;
  666.         }
  667.     } else {
  668.         s[0] = get_bits(gb, 4 + (sconf->resolution > 1));
  669.         for (k = 1; k < sub_blocks; k++)
  670.             s[k] = s[k - 1] + decode_rice(gb, 0);
  671.     }
  672.     for (k = 1; k < sub_blocks; k++)
  673.         if (s[k] > 32) {
  674.             av_log(avctx, AV_LOG_ERROR, "k invalid for rice code.\n");
  675.             return AVERROR_INVALIDDATA;
  676.         }
  677.  
  678.     if (get_bits1(gb))
  679.         *bd->shift_lsbs = get_bits(gb, 4) + 1;
  680.  
  681.     *bd->store_prev_samples = (bd->js_blocks && bd->raw_other) || *bd->shift_lsbs;
  682.  
  683.  
  684.     if (!sconf->rlslms) {
  685.         if (sconf->adapt_order && sconf->max_order) {
  686.             int opt_order_length = av_ceil_log2(av_clip((bd->block_length >> 3) - 1,
  687.                                                 2, sconf->max_order + 1));
  688.             *bd->opt_order       = get_bits(gb, opt_order_length);
  689.             if (*bd->opt_order > sconf->max_order) {
  690.                 *bd->opt_order = sconf->max_order;
  691.                 av_log(avctx, AV_LOG_ERROR, "Predictor order too large.\n");
  692.                 return AVERROR_INVALIDDATA;
  693.             }
  694.         } else {
  695.             *bd->opt_order = sconf->max_order;
  696.         }
  697.         if (*bd->opt_order > bd->block_length) {
  698.             *bd->opt_order = bd->block_length;
  699.             av_log(avctx, AV_LOG_ERROR, "Predictor order too large.\n");
  700.             return AVERROR_INVALIDDATA;
  701.         }
  702.         opt_order = *bd->opt_order;
  703.  
  704.         if (opt_order) {
  705.             int add_base;
  706.  
  707.             if (sconf->coef_table == 3) {
  708.                 add_base = 0x7F;
  709.  
  710.                 // read coefficient 0
  711.                 quant_cof[0] = 32 * parcor_scaled_values[get_bits(gb, 7)];
  712.  
  713.                 // read coefficient 1
  714.                 if (opt_order > 1)
  715.                     quant_cof[1] = -32 * parcor_scaled_values[get_bits(gb, 7)];
  716.  
  717.                 // read coefficients 2 to opt_order
  718.                 for (k = 2; k < opt_order; k++)
  719.                     quant_cof[k] = get_bits(gb, 7);
  720.             } else {
  721.                 int k_max;
  722.                 add_base = 1;
  723.  
  724.                 // read coefficient 0 to 19
  725.                 k_max = FFMIN(opt_order, 20);
  726.                 for (k = 0; k < k_max; k++) {
  727.                     int rice_param = parcor_rice_table[sconf->coef_table][k][1];
  728.                     int offset     = parcor_rice_table[sconf->coef_table][k][0];
  729.                     quant_cof[k] = decode_rice(gb, rice_param) + offset;
  730.                     if (quant_cof[k] < -64 || quant_cof[k] > 63) {
  731.                         av_log(avctx, AV_LOG_ERROR,
  732.                                "quant_cof %"PRIu32" is out of range.\n",
  733.                                quant_cof[k]);
  734.                         return AVERROR_INVALIDDATA;
  735.                     }
  736.                 }
  737.  
  738.                 // read coefficients 20 to 126
  739.                 k_max = FFMIN(opt_order, 127);
  740.                 for (; k < k_max; k++)
  741.                     quant_cof[k] = decode_rice(gb, 2) + (k & 1);
  742.  
  743.                 // read coefficients 127 to opt_order
  744.                 for (; k < opt_order; k++)
  745.                     quant_cof[k] = decode_rice(gb, 1);
  746.  
  747.                 quant_cof[0] = 32 * parcor_scaled_values[quant_cof[0] + 64];
  748.  
  749.                 if (opt_order > 1)
  750.                     quant_cof[1] = -32 * parcor_scaled_values[quant_cof[1] + 64];
  751.             }
  752.  
  753.             for (k = 2; k < opt_order; k++)
  754.                 quant_cof[k] = (quant_cof[k] << 14) + (add_base << 13);
  755.         }
  756.     }
  757.  
  758.     // read LTP gain and lag values
  759.     if (sconf->long_term_prediction) {
  760.         *bd->use_ltp = get_bits1(gb);
  761.  
  762.         if (*bd->use_ltp) {
  763.             int r, c;
  764.  
  765.             bd->ltp_gain[0]   = decode_rice(gb, 1) << 3;
  766.             bd->ltp_gain[1]   = decode_rice(gb, 2) << 3;
  767.  
  768.             r                 = get_unary(gb, 0, 3);
  769.             c                 = get_bits(gb, 2);
  770.             bd->ltp_gain[2]   = ltp_gain_values[r][c];
  771.  
  772.             bd->ltp_gain[3]   = decode_rice(gb, 2) << 3;
  773.             bd->ltp_gain[4]   = decode_rice(gb, 1) << 3;
  774.  
  775.             *bd->ltp_lag      = get_bits(gb, ctx->ltp_lag_length);
  776.             *bd->ltp_lag     += FFMAX(4, opt_order + 1);
  777.         }
  778.     }
  779.  
  780.     // read first value and residuals in case of a random access block
  781.     if (bd->ra_block) {
  782.         if (opt_order)
  783.             bd->raw_samples[0] = decode_rice(gb, avctx->bits_per_raw_sample - 4);
  784.         if (opt_order > 1)
  785.             bd->raw_samples[1] = decode_rice(gb, FFMIN(s[0] + 3, ctx->s_max));
  786.         if (opt_order > 2)
  787.             bd->raw_samples[2] = decode_rice(gb, FFMIN(s[0] + 1, ctx->s_max));
  788.  
  789.         start = FFMIN(opt_order, 3);
  790.     }
  791.  
  792.     // read all residuals
  793.     if (sconf->bgmc) {
  794.         int          delta[8];
  795.         unsigned int k    [8];
  796.         unsigned int b = av_clip((av_ceil_log2(bd->block_length) - 3) >> 1, 0, 5);
  797.  
  798.         // read most significant bits
  799.         unsigned int high;
  800.         unsigned int low;
  801.         unsigned int value;
  802.  
  803.         ff_bgmc_decode_init(gb, &high, &low, &value);
  804.  
  805.         current_res = bd->raw_samples + start;
  806.  
  807.         for (sb = 0; sb < sub_blocks; sb++) {
  808.             unsigned int sb_len  = sb_length - (sb ? 0 : start);
  809.  
  810.             k    [sb] = s[sb] > b ? s[sb] - b : 0;
  811.             delta[sb] = 5 - s[sb] + k[sb];
  812.  
  813.             ff_bgmc_decode(gb, sb_len, current_res,
  814.                         delta[sb], sx[sb], &high, &low, &value, ctx->bgmc_lut, ctx->bgmc_lut_status);
  815.  
  816.             current_res += sb_len;
  817.         }
  818.  
  819.         ff_bgmc_decode_end(gb);
  820.  
  821.  
  822.         // read least significant bits and tails
  823.         current_res = bd->raw_samples + start;
  824.  
  825.         for (sb = 0; sb < sub_blocks; sb++, start = 0) {
  826.             unsigned int cur_tail_code = tail_code[sx[sb]][delta[sb]];
  827.             unsigned int cur_k         = k[sb];
  828.             unsigned int cur_s         = s[sb];
  829.  
  830.             for (; start < sb_length; start++) {
  831.                 int32_t res = *current_res;
  832.  
  833.                 if (res == cur_tail_code) {
  834.                     unsigned int max_msb =   (2 + (sx[sb] > 2) + (sx[sb] > 10))
  835.                                           << (5 - delta[sb]);
  836.  
  837.                     res = decode_rice(gb, cur_s);
  838.  
  839.                     if (res >= 0) {
  840.                         res += (max_msb    ) << cur_k;
  841.                     } else {
  842.                         res -= (max_msb - 1) << cur_k;
  843.                     }
  844.                 } else {
  845.                     if (res > cur_tail_code)
  846.                         res--;
  847.  
  848.                     if (res & 1)
  849.                         res = -res;
  850.  
  851.                     res >>= 1;
  852.  
  853.                     if (cur_k) {
  854.                         res <<= cur_k;
  855.                         res  |= get_bits_long(gb, cur_k);
  856.                     }
  857.                 }
  858.  
  859.                 *current_res++ = res;
  860.             }
  861.         }
  862.     } else {
  863.         current_res = bd->raw_samples + start;
  864.  
  865.         for (sb = 0; sb < sub_blocks; sb++, start = 0)
  866.             for (; start < sb_length; start++)
  867.                 *current_res++ = decode_rice(gb, s[sb]);
  868.      }
  869.  
  870.     if (!sconf->mc_coding || ctx->js_switch)
  871.         align_get_bits(gb);
  872.  
  873.     return 0;
  874. }
  875.  
  876.  
  877. /** Decode the block data for a non-constant block
  878.  */
  879. static int decode_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
  880. {
  881.     ALSSpecificConfig *sconf = &ctx->sconf;
  882.     unsigned int block_length = bd->block_length;
  883.     unsigned int smp = 0;
  884.     unsigned int k;
  885.     int opt_order             = *bd->opt_order;
  886.     int sb;
  887.     int64_t y;
  888.     int32_t *quant_cof        = bd->quant_cof;
  889.     int32_t *lpc_cof          = bd->lpc_cof;
  890.     int32_t *raw_samples      = bd->raw_samples;
  891.     int32_t *raw_samples_end  = bd->raw_samples + bd->block_length;
  892.     int32_t *lpc_cof_reversed = ctx->lpc_cof_reversed_buffer;
  893.  
  894.     // reverse long-term prediction
  895.     if (*bd->use_ltp) {
  896.         int ltp_smp;
  897.  
  898.         for (ltp_smp = FFMAX(*bd->ltp_lag - 2, 0); ltp_smp < block_length; ltp_smp++) {
  899.             int center = ltp_smp - *bd->ltp_lag;
  900.             int begin  = FFMAX(0, center - 2);
  901.             int end    = center + 3;
  902.             int tab    = 5 - (end - begin);
  903.             int base;
  904.  
  905.             y = 1 << 6;
  906.  
  907.             for (base = begin; base < end; base++, tab++)
  908.                 y += MUL64(bd->ltp_gain[tab], raw_samples[base]);
  909.  
  910.             raw_samples[ltp_smp] += y >> 7;
  911.         }
  912.     }
  913.  
  914.     // reconstruct all samples from residuals
  915.     if (bd->ra_block) {
  916.         for (smp = 0; smp < opt_order; smp++) {
  917.             y = 1 << 19;
  918.  
  919.             for (sb = 0; sb < smp; sb++)
  920.                 y += MUL64(lpc_cof[sb], raw_samples[-(sb + 1)]);
  921.  
  922.             *raw_samples++ -= y >> 20;
  923.             parcor_to_lpc(smp, quant_cof, lpc_cof);
  924.         }
  925.     } else {
  926.         for (k = 0; k < opt_order; k++)
  927.             parcor_to_lpc(k, quant_cof, lpc_cof);
  928.  
  929.         // store previous samples in case that they have to be altered
  930.         if (*bd->store_prev_samples)
  931.             memcpy(bd->prev_raw_samples, raw_samples - sconf->max_order,
  932.                    sizeof(*bd->prev_raw_samples) * sconf->max_order);
  933.  
  934.         // reconstruct difference signal for prediction (joint-stereo)
  935.         if (bd->js_blocks && bd->raw_other) {
  936.             int32_t *left, *right;
  937.  
  938.             if (bd->raw_other > raw_samples) {  // D = R - L
  939.                 left  = raw_samples;
  940.                 right = bd->raw_other;
  941.             } else {                                // D = R - L
  942.                 left  = bd->raw_other;
  943.                 right = raw_samples;
  944.             }
  945.  
  946.             for (sb = -1; sb >= -sconf->max_order; sb--)
  947.                 raw_samples[sb] = right[sb] - left[sb];
  948.         }
  949.  
  950.         // reconstruct shifted signal
  951.         if (*bd->shift_lsbs)
  952.             for (sb = -1; sb >= -sconf->max_order; sb--)
  953.                 raw_samples[sb] >>= *bd->shift_lsbs;
  954.     }
  955.  
  956.     // reverse linear prediction coefficients for efficiency
  957.     lpc_cof = lpc_cof + opt_order;
  958.  
  959.     for (sb = 0; sb < opt_order; sb++)
  960.         lpc_cof_reversed[sb] = lpc_cof[-(sb + 1)];
  961.  
  962.     // reconstruct raw samples
  963.     raw_samples = bd->raw_samples + smp;
  964.     lpc_cof     = lpc_cof_reversed + opt_order;
  965.  
  966.     for (; raw_samples < raw_samples_end; raw_samples++) {
  967.         y = 1 << 19;
  968.  
  969.         for (sb = -opt_order; sb < 0; sb++)
  970.             y += MUL64(lpc_cof[sb], raw_samples[sb]);
  971.  
  972.         *raw_samples -= y >> 20;
  973.     }
  974.  
  975.     raw_samples = bd->raw_samples;
  976.  
  977.     // restore previous samples in case that they have been altered
  978.     if (*bd->store_prev_samples)
  979.         memcpy(raw_samples - sconf->max_order, bd->prev_raw_samples,
  980.                sizeof(*raw_samples) * sconf->max_order);
  981.  
  982.     return 0;
  983. }
  984.  
  985.  
  986. /** Read the block data.
  987.  */
  988. static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
  989. {
  990.     int ret;
  991.     GetBitContext *gb        = &ctx->gb;
  992.  
  993.     *bd->shift_lsbs = 0;
  994.     // read block type flag and read the samples accordingly
  995.     if (get_bits1(gb)) {
  996.         ret = read_var_block_data(ctx, bd);
  997.     } else {
  998.         ret = read_const_block_data(ctx, bd);
  999.     }
  1000.  
  1001.     return ret;
  1002. }
  1003.  
  1004.  
  1005. /** Decode the block data.
  1006.  */
  1007. static int decode_block(ALSDecContext *ctx, ALSBlockData *bd)
  1008. {
  1009.     unsigned int smp;
  1010.     int ret = 0;
  1011.  
  1012.     // read block type flag and read the samples accordingly
  1013.     if (*bd->const_block)
  1014.         decode_const_block_data(ctx, bd);
  1015.     else
  1016.         ret = decode_var_block_data(ctx, bd); // always return 0
  1017.  
  1018.     if (ret < 0)
  1019.         return ret;
  1020.  
  1021.     // TODO: read RLSLMS extension data
  1022.  
  1023.     if (*bd->shift_lsbs)
  1024.         for (smp = 0; smp < bd->block_length; smp++)
  1025.             bd->raw_samples[smp] <<= *bd->shift_lsbs;
  1026.  
  1027.     return 0;
  1028. }
  1029.  
  1030.  
  1031. /** Read and decode block data successively.
  1032.  */
  1033. static int read_decode_block(ALSDecContext *ctx, ALSBlockData *bd)
  1034. {
  1035.     int ret;
  1036.  
  1037.     if ((ret = read_block(ctx, bd)) < 0)
  1038.         return ret;
  1039.  
  1040.     return decode_block(ctx, bd);
  1041. }
  1042.  
  1043.  
  1044. /** Compute the number of samples left to decode for the current frame and
  1045.  *  sets these samples to zero.
  1046.  */
  1047. static void zero_remaining(unsigned int b, unsigned int b_max,
  1048.                            const unsigned int *div_blocks, int32_t *buf)
  1049. {
  1050.     unsigned int count = 0;
  1051.  
  1052.     while (b < b_max)
  1053.         count += div_blocks[b++];
  1054.  
  1055.     if (count)
  1056.         memset(buf, 0, sizeof(*buf) * count);
  1057. }
  1058.  
  1059.  
  1060. /** Decode blocks independently.
  1061.  */
  1062. static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
  1063.                              unsigned int c, const unsigned int *div_blocks,
  1064.                              unsigned int *js_blocks)
  1065. {
  1066.     int ret;
  1067.     unsigned int b;
  1068.     ALSBlockData bd = { 0 };
  1069.  
  1070.     bd.ra_block         = ra_frame;
  1071.     bd.const_block      = ctx->const_block;
  1072.     bd.shift_lsbs       = ctx->shift_lsbs;
  1073.     bd.opt_order        = ctx->opt_order;
  1074.     bd.store_prev_samples = ctx->store_prev_samples;
  1075.     bd.use_ltp          = ctx->use_ltp;
  1076.     bd.ltp_lag          = ctx->ltp_lag;
  1077.     bd.ltp_gain         = ctx->ltp_gain[0];
  1078.     bd.quant_cof        = ctx->quant_cof[0];
  1079.     bd.lpc_cof          = ctx->lpc_cof[0];
  1080.     bd.prev_raw_samples = ctx->prev_raw_samples;
  1081.     bd.raw_samples      = ctx->raw_samples[c];
  1082.  
  1083.  
  1084.     for (b = 0; b < ctx->num_blocks; b++) {
  1085.         bd.block_length     = div_blocks[b];
  1086.  
  1087.         if ((ret = read_decode_block(ctx, &bd)) < 0) {
  1088.             // damaged block, write zero for the rest of the frame
  1089.             zero_remaining(b, ctx->num_blocks, div_blocks, bd.raw_samples);
  1090.             return ret;
  1091.         }
  1092.         bd.raw_samples += div_blocks[b];
  1093.         bd.ra_block     = 0;
  1094.     }
  1095.  
  1096.     return 0;
  1097. }
  1098.  
  1099.  
  1100. /** Decode blocks dependently.
  1101.  */
  1102. static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
  1103.                          unsigned int c, const unsigned int *div_blocks,
  1104.                          unsigned int *js_blocks)
  1105. {
  1106.     ALSSpecificConfig *sconf = &ctx->sconf;
  1107.     unsigned int offset = 0;
  1108.     unsigned int b;
  1109.     int ret;
  1110.     ALSBlockData bd[2] = { { 0 } };
  1111.  
  1112.     bd[0].ra_block         = ra_frame;
  1113.     bd[0].const_block      = ctx->const_block;
  1114.     bd[0].shift_lsbs       = ctx->shift_lsbs;
  1115.     bd[0].opt_order        = ctx->opt_order;
  1116.     bd[0].store_prev_samples = ctx->store_prev_samples;
  1117.     bd[0].use_ltp          = ctx->use_ltp;
  1118.     bd[0].ltp_lag          = ctx->ltp_lag;
  1119.     bd[0].ltp_gain         = ctx->ltp_gain[0];
  1120.     bd[0].quant_cof        = ctx->quant_cof[0];
  1121.     bd[0].lpc_cof          = ctx->lpc_cof[0];
  1122.     bd[0].prev_raw_samples = ctx->prev_raw_samples;
  1123.     bd[0].js_blocks        = *js_blocks;
  1124.  
  1125.     bd[1].ra_block         = ra_frame;
  1126.     bd[1].const_block      = ctx->const_block;
  1127.     bd[1].shift_lsbs       = ctx->shift_lsbs;
  1128.     bd[1].opt_order        = ctx->opt_order;
  1129.     bd[1].store_prev_samples = ctx->store_prev_samples;
  1130.     bd[1].use_ltp          = ctx->use_ltp;
  1131.     bd[1].ltp_lag          = ctx->ltp_lag;
  1132.     bd[1].ltp_gain         = ctx->ltp_gain[0];
  1133.     bd[1].quant_cof        = ctx->quant_cof[0];
  1134.     bd[1].lpc_cof          = ctx->lpc_cof[0];
  1135.     bd[1].prev_raw_samples = ctx->prev_raw_samples;
  1136.     bd[1].js_blocks        = *(js_blocks + 1);
  1137.  
  1138.     // decode all blocks
  1139.     for (b = 0; b < ctx->num_blocks; b++) {
  1140.         unsigned int s;
  1141.  
  1142.         bd[0].block_length = div_blocks[b];
  1143.         bd[1].block_length = div_blocks[b];
  1144.  
  1145.         bd[0].raw_samples  = ctx->raw_samples[c    ] + offset;
  1146.         bd[1].raw_samples  = ctx->raw_samples[c + 1] + offset;
  1147.  
  1148.         bd[0].raw_other    = bd[1].raw_samples;
  1149.         bd[1].raw_other    = bd[0].raw_samples;
  1150.  
  1151.         if ((ret = read_decode_block(ctx, &bd[0])) < 0 ||
  1152.             (ret = read_decode_block(ctx, &bd[1])) < 0)
  1153.             goto fail;
  1154.  
  1155.         // reconstruct joint-stereo blocks
  1156.         if (bd[0].js_blocks) {
  1157.             if (bd[1].js_blocks)
  1158.                 av_log(ctx->avctx, AV_LOG_WARNING, "Invalid channel pair.\n");
  1159.  
  1160.             for (s = 0; s < div_blocks[b]; s++)
  1161.                 bd[0].raw_samples[s] = bd[1].raw_samples[s] - bd[0].raw_samples[s];
  1162.         } else if (bd[1].js_blocks) {
  1163.             for (s = 0; s < div_blocks[b]; s++)
  1164.                 bd[1].raw_samples[s] = bd[1].raw_samples[s] + bd[0].raw_samples[s];
  1165.         }
  1166.  
  1167.         offset  += div_blocks[b];
  1168.         bd[0].ra_block = 0;
  1169.         bd[1].ra_block = 0;
  1170.     }
  1171.  
  1172.     // store carryover raw samples,
  1173.     // the others channel raw samples are stored by the calling function.
  1174.     memmove(ctx->raw_samples[c] - sconf->max_order,
  1175.             ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
  1176.             sizeof(*ctx->raw_samples[c]) * sconf->max_order);
  1177.  
  1178.     return 0;
  1179. fail:
  1180.     // damaged block, write zero for the rest of the frame
  1181.     zero_remaining(b, ctx->num_blocks, div_blocks, bd[0].raw_samples);
  1182.     zero_remaining(b, ctx->num_blocks, div_blocks, bd[1].raw_samples);
  1183.     return ret;
  1184. }
  1185.  
  1186. static inline int als_weighting(GetBitContext *gb, int k, int off)
  1187. {
  1188.     int idx = av_clip(decode_rice(gb, k) + off,
  1189.                       0, FF_ARRAY_ELEMS(mcc_weightings) - 1);
  1190.     return mcc_weightings[idx];
  1191. }
  1192.  
  1193. /** Read the channel data.
  1194.   */
  1195. static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
  1196. {
  1197.     GetBitContext *gb       = &ctx->gb;
  1198.     ALSChannelData *current = cd;
  1199.     unsigned int channels   = ctx->avctx->channels;
  1200.     int entries             = 0;
  1201.  
  1202.     while (entries < channels && !(current->stop_flag = get_bits1(gb))) {
  1203.         current->master_channel = get_bits_long(gb, av_ceil_log2(channels));
  1204.  
  1205.         if (current->master_channel >= channels) {
  1206.             av_log(ctx->avctx, AV_LOG_ERROR, "Invalid master channel.\n");
  1207.             return AVERROR_INVALIDDATA;
  1208.         }
  1209.  
  1210.         if (current->master_channel != c) {
  1211.             current->time_diff_flag = get_bits1(gb);
  1212.             current->weighting[0]   = als_weighting(gb, 1, 16);
  1213.             current->weighting[1]   = als_weighting(gb, 2, 14);
  1214.             current->weighting[2]   = als_weighting(gb, 1, 16);
  1215.  
  1216.             if (current->time_diff_flag) {
  1217.                 current->weighting[3] = als_weighting(gb, 1, 16);
  1218.                 current->weighting[4] = als_weighting(gb, 1, 16);
  1219.                 current->weighting[5] = als_weighting(gb, 1, 16);
  1220.  
  1221.                 current->time_diff_sign  = get_bits1(gb);
  1222.                 current->time_diff_index = get_bits(gb, ctx->ltp_lag_length - 3) + 3;
  1223.             }
  1224.         }
  1225.  
  1226.         current++;
  1227.         entries++;
  1228.     }
  1229.  
  1230.     if (entries == channels) {
  1231.         av_log(ctx->avctx, AV_LOG_ERROR, "Damaged channel data.\n");
  1232.         return AVERROR_INVALIDDATA;
  1233.     }
  1234.  
  1235.     align_get_bits(gb);
  1236.     return 0;
  1237. }
  1238.  
  1239.  
  1240. /** Recursively reverts the inter-channel correlation for a block.
  1241.  */
  1242. static int revert_channel_correlation(ALSDecContext *ctx, ALSBlockData *bd,
  1243.                                        ALSChannelData **cd, int *reverted,
  1244.                                        unsigned int offset, int c)
  1245. {
  1246.     ALSChannelData *ch = cd[c];
  1247.     unsigned int   dep = 0;
  1248.     unsigned int channels = ctx->avctx->channels;
  1249.     unsigned int channel_size = ctx->sconf.frame_length + ctx->sconf.max_order;
  1250.  
  1251.     if (reverted[c])
  1252.         return 0;
  1253.  
  1254.     reverted[c] = 1;
  1255.  
  1256.     while (dep < channels && !ch[dep].stop_flag) {
  1257.         revert_channel_correlation(ctx, bd, cd, reverted, offset,
  1258.                                    ch[dep].master_channel);
  1259.  
  1260.         dep++;
  1261.     }
  1262.  
  1263.     if (dep == channels) {
  1264.         av_log(ctx->avctx, AV_LOG_WARNING, "Invalid channel correlation.\n");
  1265.         return AVERROR_INVALIDDATA;
  1266.     }
  1267.  
  1268.     bd->const_block = ctx->const_block + c;
  1269.     bd->shift_lsbs  = ctx->shift_lsbs + c;
  1270.     bd->opt_order   = ctx->opt_order + c;
  1271.     bd->store_prev_samples = ctx->store_prev_samples + c;
  1272.     bd->use_ltp     = ctx->use_ltp + c;
  1273.     bd->ltp_lag     = ctx->ltp_lag + c;
  1274.     bd->ltp_gain    = ctx->ltp_gain[c];
  1275.     bd->lpc_cof     = ctx->lpc_cof[c];
  1276.     bd->quant_cof   = ctx->quant_cof[c];
  1277.     bd->raw_samples = ctx->raw_samples[c] + offset;
  1278.  
  1279.     for (dep = 0; !ch[dep].stop_flag; dep++) {
  1280.         ptrdiff_t smp;
  1281.         ptrdiff_t begin = 1;
  1282.         ptrdiff_t end   = bd->block_length - 1;
  1283.         int64_t y;
  1284.         int32_t *master = ctx->raw_samples[ch[dep].master_channel] + offset;
  1285.  
  1286.         if (ch[dep].master_channel == c)
  1287.             continue;
  1288.  
  1289.         if (ch[dep].time_diff_flag) {
  1290.             int t = ch[dep].time_diff_index;
  1291.  
  1292.             if (ch[dep].time_diff_sign) {
  1293.                 t      = -t;
  1294.                 if (begin < t) {
  1295.                     av_log(ctx->avctx, AV_LOG_ERROR, "begin %td smaller than time diff index %d.\n", begin, t);
  1296.                     return AVERROR_INVALIDDATA;
  1297.                 }
  1298.                 begin -= t;
  1299.             } else {
  1300.                 if (end < t) {
  1301.                     av_log(ctx->avctx, AV_LOG_ERROR, "end %td smaller than time diff index %d.\n", end, t);
  1302.                     return AVERROR_INVALIDDATA;
  1303.                 }
  1304.                 end   -= t;
  1305.             }
  1306.  
  1307.             if (FFMIN(begin - 1, begin - 1 + t) < ctx->raw_buffer - master ||
  1308.                 FFMAX(end   + 1,   end + 1 + t) > ctx->raw_buffer + channels * channel_size - master) {
  1309.                 av_log(ctx->avctx, AV_LOG_ERROR,
  1310.                        "sample pointer range [%p, %p] not contained in raw_buffer [%p, %p].\n",
  1311.                        master + FFMIN(begin - 1, begin - 1 + t), master + FFMAX(end + 1,   end + 1 + t),
  1312.                        ctx->raw_buffer, ctx->raw_buffer + channels * channel_size);
  1313.                 return AVERROR_INVALIDDATA;
  1314.             }
  1315.  
  1316.             for (smp = begin; smp < end; smp++) {
  1317.                 y  = (1 << 6) +
  1318.                      MUL64(ch[dep].weighting[0], master[smp - 1    ]) +
  1319.                      MUL64(ch[dep].weighting[1], master[smp        ]) +
  1320.                      MUL64(ch[dep].weighting[2], master[smp + 1    ]) +
  1321.                      MUL64(ch[dep].weighting[3], master[smp - 1 + t]) +
  1322.                      MUL64(ch[dep].weighting[4], master[smp     + t]) +
  1323.                      MUL64(ch[dep].weighting[5], master[smp + 1 + t]);
  1324.  
  1325.                 bd->raw_samples[smp] += y >> 7;
  1326.             }
  1327.         } else {
  1328.  
  1329.             if (begin - 1 < ctx->raw_buffer - master ||
  1330.                 end   + 1 > ctx->raw_buffer + channels * channel_size - master) {
  1331.                 av_log(ctx->avctx, AV_LOG_ERROR,
  1332.                        "sample pointer range [%p, %p] not contained in raw_buffer [%p, %p].\n",
  1333.                        master + begin - 1, master + end + 1,
  1334.                        ctx->raw_buffer, ctx->raw_buffer + channels * channel_size);
  1335.                 return AVERROR_INVALIDDATA;
  1336.             }
  1337.  
  1338.             for (smp = begin; smp < end; smp++) {
  1339.                 y  = (1 << 6) +
  1340.                      MUL64(ch[dep].weighting[0], master[smp - 1]) +
  1341.                      MUL64(ch[dep].weighting[1], master[smp    ]) +
  1342.                      MUL64(ch[dep].weighting[2], master[smp + 1]);
  1343.  
  1344.                 bd->raw_samples[smp] += y >> 7;
  1345.             }
  1346.         }
  1347.     }
  1348.  
  1349.     return 0;
  1350. }
  1351.  
  1352.  
  1353. /** Read the frame data.
  1354.  */
  1355. static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
  1356. {
  1357.     ALSSpecificConfig *sconf = &ctx->sconf;
  1358.     AVCodecContext *avctx    = ctx->avctx;
  1359.     GetBitContext *gb = &ctx->gb;
  1360.     unsigned int div_blocks[32];                ///< block sizes.
  1361.     unsigned int c;
  1362.     unsigned int js_blocks[2];
  1363.     uint32_t bs_info = 0;
  1364.     int ret;
  1365.  
  1366.     // skip the size of the ra unit if present in the frame
  1367.     if (sconf->ra_flag == RA_FLAG_FRAMES && ra_frame)
  1368.         skip_bits_long(gb, 32);
  1369.  
  1370.     if (sconf->mc_coding && sconf->joint_stereo) {
  1371.         ctx->js_switch = get_bits1(gb);
  1372.         align_get_bits(gb);
  1373.     }
  1374.  
  1375.     if (!sconf->mc_coding || ctx->js_switch) {
  1376.         int independent_bs = !sconf->joint_stereo;
  1377.  
  1378.         for (c = 0; c < avctx->channels; c++) {
  1379.             js_blocks[0] = 0;
  1380.             js_blocks[1] = 0;
  1381.  
  1382.             get_block_sizes(ctx, div_blocks, &bs_info);
  1383.  
  1384.             // if joint_stereo and block_switching is set, independent decoding
  1385.             // is signaled via the first bit of bs_info
  1386.             if (sconf->joint_stereo && sconf->block_switching)
  1387.                 if (bs_info >> 31)
  1388.                     independent_bs = 2;
  1389.  
  1390.             // if this is the last channel, it has to be decoded independently
  1391.             if (c == avctx->channels - 1)
  1392.                 independent_bs = 1;
  1393.  
  1394.             if (independent_bs) {
  1395.                 ret = decode_blocks_ind(ctx, ra_frame, c,
  1396.                                         div_blocks, js_blocks);
  1397.                 if (ret < 0)
  1398.                     return ret;
  1399.                 independent_bs--;
  1400.             } else {
  1401.                 ret = decode_blocks(ctx, ra_frame, c, div_blocks, js_blocks);
  1402.                 if (ret < 0)
  1403.                     return ret;
  1404.  
  1405.                 c++;
  1406.             }
  1407.  
  1408.             // store carryover raw samples
  1409.             memmove(ctx->raw_samples[c] - sconf->max_order,
  1410.                     ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
  1411.                     sizeof(*ctx->raw_samples[c]) * sconf->max_order);
  1412.         }
  1413.     } else { // multi-channel coding
  1414.         ALSBlockData   bd = { 0 };
  1415.         int            b, ret;
  1416.         int            *reverted_channels = ctx->reverted_channels;
  1417.         unsigned int   offset             = 0;
  1418.  
  1419.         for (c = 0; c < avctx->channels; c++)
  1420.             if (ctx->chan_data[c] < ctx->chan_data_buffer) {
  1421.                 av_log(ctx->avctx, AV_LOG_ERROR, "Invalid channel data.\n");
  1422.                 return AVERROR_INVALIDDATA;
  1423.             }
  1424.  
  1425.         memset(reverted_channels, 0, sizeof(*reverted_channels) * avctx->channels);
  1426.  
  1427.         bd.ra_block         = ra_frame;
  1428.         bd.prev_raw_samples = ctx->prev_raw_samples;
  1429.  
  1430.         get_block_sizes(ctx, div_blocks, &bs_info);
  1431.  
  1432.         for (b = 0; b < ctx->num_blocks; b++) {
  1433.             bd.block_length = div_blocks[b];
  1434.             if (bd.block_length <= 0) {
  1435.                 av_log(ctx->avctx, AV_LOG_WARNING,
  1436.                        "Invalid block length %u in channel data!\n",
  1437.                        bd.block_length);
  1438.                 continue;
  1439.             }
  1440.  
  1441.             for (c = 0; c < avctx->channels; c++) {
  1442.                 bd.const_block = ctx->const_block + c;
  1443.                 bd.shift_lsbs  = ctx->shift_lsbs + c;
  1444.                 bd.opt_order   = ctx->opt_order + c;
  1445.                 bd.store_prev_samples = ctx->store_prev_samples + c;
  1446.                 bd.use_ltp     = ctx->use_ltp + c;
  1447.                 bd.ltp_lag     = ctx->ltp_lag + c;
  1448.                 bd.ltp_gain    = ctx->ltp_gain[c];
  1449.                 bd.lpc_cof     = ctx->lpc_cof[c];
  1450.                 bd.quant_cof   = ctx->quant_cof[c];
  1451.                 bd.raw_samples = ctx->raw_samples[c] + offset;
  1452.                 bd.raw_other   = NULL;
  1453.  
  1454.                 if ((ret = read_block(ctx, &bd)) < 0)
  1455.                     return ret;
  1456.                 if ((ret = read_channel_data(ctx, ctx->chan_data[c], c)) < 0)
  1457.                     return ret;
  1458.             }
  1459.  
  1460.             for (c = 0; c < avctx->channels; c++) {
  1461.                 ret = revert_channel_correlation(ctx, &bd, ctx->chan_data,
  1462.                                                  reverted_channels, offset, c);
  1463.                 if (ret < 0)
  1464.                     return ret;
  1465.             }
  1466.             for (c = 0; c < avctx->channels; c++) {
  1467.                 bd.const_block = ctx->const_block + c;
  1468.                 bd.shift_lsbs  = ctx->shift_lsbs + c;
  1469.                 bd.opt_order   = ctx->opt_order + c;
  1470.                 bd.store_prev_samples = ctx->store_prev_samples + c;
  1471.                 bd.use_ltp     = ctx->use_ltp + c;
  1472.                 bd.ltp_lag     = ctx->ltp_lag + c;
  1473.                 bd.ltp_gain    = ctx->ltp_gain[c];
  1474.                 bd.lpc_cof     = ctx->lpc_cof[c];
  1475.                 bd.quant_cof   = ctx->quant_cof[c];
  1476.                 bd.raw_samples = ctx->raw_samples[c] + offset;
  1477.  
  1478.                 if ((ret = decode_block(ctx, &bd)) < 0)
  1479.                     return ret;
  1480.             }
  1481.  
  1482.             memset(reverted_channels, 0, avctx->channels * sizeof(*reverted_channels));
  1483.             offset      += div_blocks[b];
  1484.             bd.ra_block  = 0;
  1485.         }
  1486.  
  1487.         // store carryover raw samples
  1488.         for (c = 0; c < avctx->channels; c++)
  1489.             memmove(ctx->raw_samples[c] - sconf->max_order,
  1490.                     ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
  1491.                     sizeof(*ctx->raw_samples[c]) * sconf->max_order);
  1492.     }
  1493.  
  1494.     // TODO: read_diff_float_data
  1495.  
  1496.     if (get_bits_left(gb) < 0) {
  1497.         av_log(ctx->avctx, AV_LOG_ERROR, "Overread %d\n", -get_bits_left(gb));
  1498.         return AVERROR_INVALIDDATA;
  1499.     }
  1500.  
  1501.     return 0;
  1502. }
  1503.  
  1504.  
  1505. /** Decode an ALS frame.
  1506.  */
  1507. static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr,
  1508.                         AVPacket *avpkt)
  1509. {
  1510.     ALSDecContext *ctx       = avctx->priv_data;
  1511.     AVFrame *frame           = data;
  1512.     ALSSpecificConfig *sconf = &ctx->sconf;
  1513.     const uint8_t *buffer    = avpkt->data;
  1514.     int buffer_size          = avpkt->size;
  1515.     int invalid_frame, ret;
  1516.     unsigned int c, sample, ra_frame, bytes_read, shift;
  1517.  
  1518.     if ((ret = init_get_bits8(&ctx->gb, buffer, buffer_size)) < 0)
  1519.         return ret;
  1520.  
  1521.     // In the case that the distance between random access frames is set to zero
  1522.     // (sconf->ra_distance == 0) no frame is treated as a random access frame.
  1523.     // For the first frame, if prediction is used, all samples used from the
  1524.     // previous frame are assumed to be zero.
  1525.     ra_frame = sconf->ra_distance && !(ctx->frame_id % sconf->ra_distance);
  1526.  
  1527.     // the last frame to decode might have a different length
  1528.     if (sconf->samples != 0xFFFFFFFF)
  1529.         ctx->cur_frame_length = FFMIN(sconf->samples - ctx->frame_id * (uint64_t) sconf->frame_length,
  1530.                                       sconf->frame_length);
  1531.     else
  1532.         ctx->cur_frame_length = sconf->frame_length;
  1533.  
  1534.     // decode the frame data
  1535.     if ((invalid_frame = read_frame_data(ctx, ra_frame)) < 0)
  1536.         av_log(ctx->avctx, AV_LOG_WARNING,
  1537.                "Reading frame data failed. Skipping RA unit.\n");
  1538.  
  1539.     ctx->frame_id++;
  1540.  
  1541.     /* get output buffer */
  1542.     frame->nb_samples = ctx->cur_frame_length;
  1543.     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
  1544.         return ret;
  1545.  
  1546.     // transform decoded frame into output format
  1547.     #define INTERLEAVE_OUTPUT(bps)                                                   \
  1548.     {                                                                                \
  1549.         int##bps##_t *dest = (int##bps##_t*)frame->data[0];                          \
  1550.         shift = bps - ctx->avctx->bits_per_raw_sample;                               \
  1551.         if (!ctx->cs_switch) {                                                       \
  1552.             for (sample = 0; sample < ctx->cur_frame_length; sample++)               \
  1553.                 for (c = 0; c < avctx->channels; c++)                                \
  1554.                     *dest++ = ctx->raw_samples[c][sample] << shift;                  \
  1555.         } else {                                                                     \
  1556.             for (sample = 0; sample < ctx->cur_frame_length; sample++)               \
  1557.                 for (c = 0; c < avctx->channels; c++)                                \
  1558.                     *dest++ = ctx->raw_samples[sconf->chan_pos[c]][sample] << shift; \
  1559.         }                                                                            \
  1560.     }
  1561.  
  1562.     if (ctx->avctx->bits_per_raw_sample <= 16) {
  1563.         INTERLEAVE_OUTPUT(16)
  1564.     } else {
  1565.         INTERLEAVE_OUTPUT(32)
  1566.     }
  1567.  
  1568.     // update CRC
  1569.     if (sconf->crc_enabled && (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL))) {
  1570.         int swap = HAVE_BIGENDIAN != sconf->msb_first;
  1571.  
  1572.         if (ctx->avctx->bits_per_raw_sample == 24) {
  1573.             int32_t *src = (int32_t *)frame->data[0];
  1574.  
  1575.             for (sample = 0;
  1576.                  sample < ctx->cur_frame_length * avctx->channels;
  1577.                  sample++) {
  1578.                 int32_t v;
  1579.  
  1580.                 if (swap)
  1581.                     v = av_bswap32(src[sample]);
  1582.                 else
  1583.                     v = src[sample];
  1584.                 if (!HAVE_BIGENDIAN)
  1585.                     v >>= 8;
  1586.  
  1587.                 ctx->crc = av_crc(ctx->crc_table, ctx->crc, (uint8_t*)(&v), 3);
  1588.             }
  1589.         } else {
  1590.             uint8_t *crc_source;
  1591.  
  1592.             if (swap) {
  1593.                 if (ctx->avctx->bits_per_raw_sample <= 16) {
  1594.                     int16_t *src  = (int16_t*) frame->data[0];
  1595.                     int16_t *dest = (int16_t*) ctx->crc_buffer;
  1596.                     for (sample = 0;
  1597.                          sample < ctx->cur_frame_length * avctx->channels;
  1598.                          sample++)
  1599.                         *dest++ = av_bswap16(src[sample]);
  1600.                 } else {
  1601.                     ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
  1602.                                         (uint32_t *) frame->data[0],
  1603.                                         ctx->cur_frame_length * avctx->channels);
  1604.                 }
  1605.                 crc_source = ctx->crc_buffer;
  1606.             } else {
  1607.                 crc_source = frame->data[0];
  1608.             }
  1609.  
  1610.             ctx->crc = av_crc(ctx->crc_table, ctx->crc, crc_source,
  1611.                               ctx->cur_frame_length * avctx->channels *
  1612.                               av_get_bytes_per_sample(avctx->sample_fmt));
  1613.         }
  1614.  
  1615.  
  1616.         // check CRC sums if this is the last frame
  1617.         if (ctx->cur_frame_length != sconf->frame_length &&
  1618.             ctx->crc_org != ctx->crc) {
  1619.             av_log(avctx, AV_LOG_ERROR, "CRC error.\n");
  1620.             if (avctx->err_recognition & AV_EF_EXPLODE)
  1621.                 return AVERROR_INVALIDDATA;
  1622.         }
  1623.     }
  1624.  
  1625.     *got_frame_ptr = 1;
  1626.  
  1627.     bytes_read = invalid_frame ? buffer_size :
  1628.                                  (get_bits_count(&ctx->gb) + 7) >> 3;
  1629.  
  1630.     return bytes_read;
  1631. }
  1632.  
  1633.  
  1634. /** Uninitialize the ALS decoder.
  1635.  */
  1636. static av_cold int decode_end(AVCodecContext *avctx)
  1637. {
  1638.     ALSDecContext *ctx = avctx->priv_data;
  1639.  
  1640.     av_freep(&ctx->sconf.chan_pos);
  1641.  
  1642.     ff_bgmc_end(&ctx->bgmc_lut, &ctx->bgmc_lut_status);
  1643.  
  1644.     av_freep(&ctx->const_block);
  1645.     av_freep(&ctx->shift_lsbs);
  1646.     av_freep(&ctx->opt_order);
  1647.     av_freep(&ctx->store_prev_samples);
  1648.     av_freep(&ctx->use_ltp);
  1649.     av_freep(&ctx->ltp_lag);
  1650.     av_freep(&ctx->ltp_gain);
  1651.     av_freep(&ctx->ltp_gain_buffer);
  1652.     av_freep(&ctx->quant_cof);
  1653.     av_freep(&ctx->lpc_cof);
  1654.     av_freep(&ctx->quant_cof_buffer);
  1655.     av_freep(&ctx->lpc_cof_buffer);
  1656.     av_freep(&ctx->lpc_cof_reversed_buffer);
  1657.     av_freep(&ctx->prev_raw_samples);
  1658.     av_freep(&ctx->raw_samples);
  1659.     av_freep(&ctx->raw_buffer);
  1660.     av_freep(&ctx->chan_data);
  1661.     av_freep(&ctx->chan_data_buffer);
  1662.     av_freep(&ctx->reverted_channels);
  1663.     av_freep(&ctx->crc_buffer);
  1664.  
  1665.     return 0;
  1666. }
  1667.  
  1668.  
  1669. /** Initialize the ALS decoder.
  1670.  */
  1671. static av_cold int decode_init(AVCodecContext *avctx)
  1672. {
  1673.     unsigned int c;
  1674.     unsigned int channel_size;
  1675.     int num_buffers, ret;
  1676.     ALSDecContext *ctx = avctx->priv_data;
  1677.     ALSSpecificConfig *sconf = &ctx->sconf;
  1678.     ctx->avctx = avctx;
  1679.  
  1680.     if (!avctx->extradata) {
  1681.         av_log(avctx, AV_LOG_ERROR, "Missing required ALS extradata.\n");
  1682.         return AVERROR_INVALIDDATA;
  1683.     }
  1684.  
  1685.     if ((ret = read_specific_config(ctx)) < 0) {
  1686.         av_log(avctx, AV_LOG_ERROR, "Reading ALSSpecificConfig failed.\n");
  1687.         goto fail;
  1688.     }
  1689.  
  1690.     if ((ret = check_specific_config(ctx)) < 0) {
  1691.         goto fail;
  1692.     }
  1693.  
  1694.     if (sconf->bgmc) {
  1695.         ret = ff_bgmc_init(avctx, &ctx->bgmc_lut, &ctx->bgmc_lut_status);
  1696.         if (ret < 0)
  1697.             goto fail;
  1698.     }
  1699.     if (sconf->floating) {
  1700.         avctx->sample_fmt          = AV_SAMPLE_FMT_FLT;
  1701.         avctx->bits_per_raw_sample = 32;
  1702.     } else {
  1703.         avctx->sample_fmt          = sconf->resolution > 1
  1704.                                      ? AV_SAMPLE_FMT_S32 : AV_SAMPLE_FMT_S16;
  1705.         avctx->bits_per_raw_sample = (sconf->resolution + 1) * 8;
  1706.         if (avctx->bits_per_raw_sample > 32) {
  1707.             av_log(avctx, AV_LOG_ERROR, "Bits per raw sample %d larger than 32.\n",
  1708.                    avctx->bits_per_raw_sample);
  1709.             ret = AVERROR_INVALIDDATA;
  1710.             goto fail;
  1711.         }
  1712.     }
  1713.  
  1714.     // set maximum Rice parameter for progressive decoding based on resolution
  1715.     // This is not specified in 14496-3 but actually done by the reference
  1716.     // codec RM22 revision 2.
  1717.     ctx->s_max = sconf->resolution > 1 ? 31 : 15;
  1718.  
  1719.     // set lag value for long-term prediction
  1720.     ctx->ltp_lag_length = 8 + (avctx->sample_rate >=  96000) +
  1721.                               (avctx->sample_rate >= 192000);
  1722.  
  1723.     // allocate quantized parcor coefficient buffer
  1724.     num_buffers = sconf->mc_coding ? avctx->channels : 1;
  1725.  
  1726.     ctx->quant_cof        = av_malloc_array(num_buffers, sizeof(*ctx->quant_cof));
  1727.     ctx->lpc_cof          = av_malloc_array(num_buffers, sizeof(*ctx->lpc_cof));
  1728.     ctx->quant_cof_buffer = av_malloc_array(num_buffers * sconf->max_order,
  1729.                                             sizeof(*ctx->quant_cof_buffer));
  1730.     ctx->lpc_cof_buffer   = av_malloc_array(num_buffers * sconf->max_order,
  1731.                                             sizeof(*ctx->lpc_cof_buffer));
  1732.     ctx->lpc_cof_reversed_buffer = av_malloc_array(sconf->max_order,
  1733.                                                    sizeof(*ctx->lpc_cof_buffer));
  1734.  
  1735.     if (!ctx->quant_cof              || !ctx->lpc_cof        ||
  1736.         !ctx->quant_cof_buffer       || !ctx->lpc_cof_buffer ||
  1737.         !ctx->lpc_cof_reversed_buffer) {
  1738.         av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
  1739.         ret = AVERROR(ENOMEM);
  1740.         goto fail;
  1741.     }
  1742.  
  1743.     // assign quantized parcor coefficient buffers
  1744.     for (c = 0; c < num_buffers; c++) {
  1745.         ctx->quant_cof[c] = ctx->quant_cof_buffer + c * sconf->max_order;
  1746.         ctx->lpc_cof[c]   = ctx->lpc_cof_buffer   + c * sconf->max_order;
  1747.     }
  1748.  
  1749.     // allocate and assign lag and gain data buffer for ltp mode
  1750.     ctx->const_block     = av_malloc_array(num_buffers, sizeof(*ctx->const_block));
  1751.     ctx->shift_lsbs      = av_malloc_array(num_buffers, sizeof(*ctx->shift_lsbs));
  1752.     ctx->opt_order       = av_malloc_array(num_buffers, sizeof(*ctx->opt_order));
  1753.     ctx->store_prev_samples = av_malloc_array(num_buffers, sizeof(*ctx->store_prev_samples));
  1754.     ctx->use_ltp         = av_mallocz_array(num_buffers, sizeof(*ctx->use_ltp));
  1755.     ctx->ltp_lag         = av_malloc_array(num_buffers, sizeof(*ctx->ltp_lag));
  1756.     ctx->ltp_gain        = av_malloc_array(num_buffers, sizeof(*ctx->ltp_gain));
  1757.     ctx->ltp_gain_buffer = av_malloc_array(num_buffers * 5, sizeof(*ctx->ltp_gain_buffer));
  1758.  
  1759.     if (!ctx->const_block || !ctx->shift_lsbs ||
  1760.         !ctx->opt_order || !ctx->store_prev_samples ||
  1761.         !ctx->use_ltp  || !ctx->ltp_lag ||
  1762.         !ctx->ltp_gain || !ctx->ltp_gain_buffer) {
  1763.         av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
  1764.         ret = AVERROR(ENOMEM);
  1765.         goto fail;
  1766.     }
  1767.  
  1768.     for (c = 0; c < num_buffers; c++)
  1769.         ctx->ltp_gain[c] = ctx->ltp_gain_buffer + c * 5;
  1770.  
  1771.     // allocate and assign channel data buffer for mcc mode
  1772.     if (sconf->mc_coding) {
  1773.         ctx->chan_data_buffer  = av_mallocz_array(num_buffers * num_buffers,
  1774.                                                  sizeof(*ctx->chan_data_buffer));
  1775.         ctx->chan_data         = av_mallocz_array(num_buffers,
  1776.                                                  sizeof(*ctx->chan_data));
  1777.         ctx->reverted_channels = av_malloc_array(num_buffers,
  1778.                                                  sizeof(*ctx->reverted_channels));
  1779.  
  1780.         if (!ctx->chan_data_buffer || !ctx->chan_data || !ctx->reverted_channels) {
  1781.             av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
  1782.             ret = AVERROR(ENOMEM);
  1783.             goto fail;
  1784.         }
  1785.  
  1786.         for (c = 0; c < num_buffers; c++)
  1787.             ctx->chan_data[c] = ctx->chan_data_buffer + c * num_buffers;
  1788.     } else {
  1789.         ctx->chan_data         = NULL;
  1790.         ctx->chan_data_buffer  = NULL;
  1791.         ctx->reverted_channels = NULL;
  1792.     }
  1793.  
  1794.     channel_size      = sconf->frame_length + sconf->max_order;
  1795.  
  1796.     ctx->prev_raw_samples = av_malloc_array(sconf->max_order, sizeof(*ctx->prev_raw_samples));
  1797.     ctx->raw_buffer       = av_mallocz_array(avctx->channels * channel_size, sizeof(*ctx->raw_buffer));
  1798.     ctx->raw_samples      = av_malloc_array(avctx->channels, sizeof(*ctx->raw_samples));
  1799.  
  1800.     // allocate previous raw sample buffer
  1801.     if (!ctx->prev_raw_samples || !ctx->raw_buffer|| !ctx->raw_samples) {
  1802.         av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
  1803.         ret = AVERROR(ENOMEM);
  1804.         goto fail;
  1805.     }
  1806.  
  1807.     // assign raw samples buffers
  1808.     ctx->raw_samples[0] = ctx->raw_buffer + sconf->max_order;
  1809.     for (c = 1; c < avctx->channels; c++)
  1810.         ctx->raw_samples[c] = ctx->raw_samples[c - 1] + channel_size;
  1811.  
  1812.     // allocate crc buffer
  1813.     if (HAVE_BIGENDIAN != sconf->msb_first && sconf->crc_enabled &&
  1814.         (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL))) {
  1815.         ctx->crc_buffer = av_malloc_array(ctx->cur_frame_length *
  1816.                                           avctx->channels *
  1817.                                           av_get_bytes_per_sample(avctx->sample_fmt),
  1818.                                           sizeof(*ctx->crc_buffer));
  1819.         if (!ctx->crc_buffer) {
  1820.             av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
  1821.             ret = AVERROR(ENOMEM);
  1822.             goto fail;
  1823.         }
  1824.     }
  1825.  
  1826.     ff_bswapdsp_init(&ctx->bdsp);
  1827.  
  1828.     return 0;
  1829.  
  1830. fail:
  1831.     decode_end(avctx);
  1832.     return ret;
  1833. }
  1834.  
  1835.  
  1836. /** Flush (reset) the frame ID after seeking.
  1837.  */
  1838. static av_cold void flush(AVCodecContext *avctx)
  1839. {
  1840.     ALSDecContext *ctx = avctx->priv_data;
  1841.  
  1842.     ctx->frame_id = 0;
  1843. }
  1844.  
  1845.  
  1846. AVCodec ff_als_decoder = {
  1847.     .name           = "als",
  1848.     .long_name      = NULL_IF_CONFIG_SMALL("MPEG-4 Audio Lossless Coding (ALS)"),
  1849.     .type           = AVMEDIA_TYPE_AUDIO,
  1850.     .id             = AV_CODEC_ID_MP4ALS,
  1851.     .priv_data_size = sizeof(ALSDecContext),
  1852.     .init           = decode_init,
  1853.     .close          = decode_end,
  1854.     .decode         = decode_frame,
  1855.     .flush          = flush,
  1856.     .capabilities   = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1,
  1857. };
  1858.