Subversion Repositories Kolibri OS

Rev

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