FFmpeg
alsdec.c
Go to the documentation of this file.
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 "bgmc.h"
35 #include "bswapdsp.h"
36 #include "codec_internal.h"
37 #include "decode.h"
38 #include "internal.h"
39 #include "mlz.h"
40 #include "libavutil/mem.h"
41 #include "libavutil/opt.h"
42 #include "libavutil/samplefmt.h"
43 #include "libavutil/crc.h"
45 #include "libavutil/intreadwrite.h"
46 
47 #include <stdint.h>
48 
49 /** Rice parameters and corresponding index offsets for decoding the
50  * indices of scaled PARCOR values. The table chosen is set globally
51  * by the encoder and stored in ALSSpecificConfig.
52  */
53 static const int8_t parcor_rice_table[3][20][2] = {
54  { {-52, 4}, {-29, 5}, {-31, 4}, { 19, 4}, {-16, 4},
55  { 12, 3}, { -7, 3}, { 9, 3}, { -5, 3}, { 6, 3},
56  { -4, 3}, { 3, 3}, { -3, 2}, { 3, 2}, { -2, 2},
57  { 3, 2}, { -1, 2}, { 2, 2}, { -1, 2}, { 2, 2} },
58  { {-58, 3}, {-42, 4}, {-46, 4}, { 37, 5}, {-36, 4},
59  { 29, 4}, {-29, 4}, { 25, 4}, {-23, 4}, { 20, 4},
60  {-17, 4}, { 16, 4}, {-12, 4}, { 12, 3}, {-10, 4},
61  { 7, 3}, { -4, 4}, { 3, 3}, { -1, 3}, { 1, 3} },
62  { {-59, 3}, {-45, 5}, {-50, 4}, { 38, 4}, {-39, 4},
63  { 32, 4}, {-30, 4}, { 25, 3}, {-23, 3}, { 20, 3},
64  {-20, 3}, { 16, 3}, {-13, 3}, { 10, 3}, { -7, 3},
65  { 3, 3}, { 0, 3}, { -1, 3}, { 2, 3}, { -1, 2} }
66 };
67 
68 
69 /** Scaled PARCOR values used for the first two PARCOR coefficients.
70  * To be indexed by the Rice coded indices.
71  * Generated by: parcor_scaled_values[i] = 32 + ((i * (i+1)) << 7) - (1 << 20)
72  * Actual values are divided by 32 in order to be stored in 16 bits.
73  */
74 static const int16_t parcor_scaled_values[] = {
75  -1048544 / 32, -1048288 / 32, -1047776 / 32, -1047008 / 32,
76  -1045984 / 32, -1044704 / 32, -1043168 / 32, -1041376 / 32,
77  -1039328 / 32, -1037024 / 32, -1034464 / 32, -1031648 / 32,
78  -1028576 / 32, -1025248 / 32, -1021664 / 32, -1017824 / 32,
79  -1013728 / 32, -1009376 / 32, -1004768 / 32, -999904 / 32,
80  -994784 / 32, -989408 / 32, -983776 / 32, -977888 / 32,
81  -971744 / 32, -965344 / 32, -958688 / 32, -951776 / 32,
82  -944608 / 32, -937184 / 32, -929504 / 32, -921568 / 32,
83  -913376 / 32, -904928 / 32, -896224 / 32, -887264 / 32,
84  -878048 / 32, -868576 / 32, -858848 / 32, -848864 / 32,
85  -838624 / 32, -828128 / 32, -817376 / 32, -806368 / 32,
86  -795104 / 32, -783584 / 32, -771808 / 32, -759776 / 32,
87  -747488 / 32, -734944 / 32, -722144 / 32, -709088 / 32,
88  -695776 / 32, -682208 / 32, -668384 / 32, -654304 / 32,
89  -639968 / 32, -625376 / 32, -610528 / 32, -595424 / 32,
90  -580064 / 32, -564448 / 32, -548576 / 32, -532448 / 32,
91  -516064 / 32, -499424 / 32, -482528 / 32, -465376 / 32,
92  -447968 / 32, -430304 / 32, -412384 / 32, -394208 / 32,
93  -375776 / 32, -357088 / 32, -338144 / 32, -318944 / 32,
94  -299488 / 32, -279776 / 32, -259808 / 32, -239584 / 32,
95  -219104 / 32, -198368 / 32, -177376 / 32, -156128 / 32,
96  -134624 / 32, -112864 / 32, -90848 / 32, -68576 / 32,
97  -46048 / 32, -23264 / 32, -224 / 32, 23072 / 32,
98  46624 / 32, 70432 / 32, 94496 / 32, 118816 / 32,
99  143392 / 32, 168224 / 32, 193312 / 32, 218656 / 32,
100  244256 / 32, 270112 / 32, 296224 / 32, 322592 / 32,
101  349216 / 32, 376096 / 32, 403232 / 32, 430624 / 32,
102  458272 / 32, 486176 / 32, 514336 / 32, 542752 / 32,
103  571424 / 32, 600352 / 32, 629536 / 32, 658976 / 32,
104  688672 / 32, 718624 / 32, 748832 / 32, 779296 / 32,
105  810016 / 32, 840992 / 32, 872224 / 32, 903712 / 32,
106  935456 / 32, 967456 / 32, 999712 / 32, 1032224 / 32
107 };
108 
109 
110 /** Gain values of p(0) for long-term prediction.
111  * To be indexed by the Rice coded indices.
112  */
113 static const uint8_t ltp_gain_values [4][4] = {
114  { 0, 8, 16, 24},
115  {32, 40, 48, 56},
116  {64, 70, 76, 82},
117  {88, 92, 96, 100}
118 };
119 
120 
121 /** Inter-channel weighting factors for multi-channel correlation.
122  * To be indexed by the Rice coded indices.
123  */
124 static const int16_t mcc_weightings[] = {
125  204, 192, 179, 166, 153, 140, 128, 115,
126  102, 89, 76, 64, 51, 38, 25, 12,
127  0, -12, -25, -38, -51, -64, -76, -89,
128  -102, -115, -128, -140, -153, -166, -179, -192
129 };
130 
131 
132 /** Tail codes used in arithmetic coding using block Gilbert-Moore codes.
133  */
134 static const uint8_t tail_code[16][6] = {
135  { 74, 44, 25, 13, 7, 3},
136  { 68, 42, 24, 13, 7, 3},
137  { 58, 39, 23, 13, 7, 3},
138  {126, 70, 37, 19, 10, 5},
139  {132, 70, 37, 20, 10, 5},
140  {124, 70, 38, 20, 10, 5},
141  {120, 69, 37, 20, 11, 5},
142  {116, 67, 37, 20, 11, 5},
143  {108, 66, 36, 20, 10, 5},
144  {102, 62, 36, 20, 10, 5},
145  { 88, 58, 34, 19, 10, 5},
146  {162, 89, 49, 25, 13, 7},
147  {156, 87, 49, 26, 14, 7},
148  {150, 86, 47, 26, 14, 7},
149  {142, 84, 47, 26, 14, 7},
150  {131, 79, 46, 26, 14, 7}
151 };
152 
153 
154 enum RA_Flag {
158 };
159 
160 
161 typedef struct ALSSpecificConfig {
162  uint32_t samples; ///< number of samples, 0xFFFFFFFF if unknown
163  int resolution; ///< 000 = 8-bit; 001 = 16-bit; 010 = 24-bit; 011 = 32-bit
164  int floating; ///< 1 = IEEE 32-bit floating-point, 0 = integer
165  int msb_first; ///< 1 = original CRC calculated on big-endian system, 0 = little-endian
166  int frame_length; ///< frame length for each frame (last frame may differ)
167  int ra_distance; ///< distance between RA frames (in frames, 0...255)
168  enum RA_Flag ra_flag; ///< indicates where the size of ra units is stored
169  int adapt_order; ///< adaptive order: 1 = on, 0 = off
170  int coef_table; ///< table index of Rice code parameters
171  int long_term_prediction; ///< long term prediction (LTP): 1 = on, 0 = off
172  int max_order; ///< maximum prediction order (0..1023)
173  int block_switching; ///< number of block switching levels
174  int bgmc; ///< "Block Gilbert-Moore Code": 1 = on, 0 = off (Rice coding only)
175  int sb_part; ///< sub-block partition
176  int joint_stereo; ///< joint stereo: 1 = on, 0 = off
177  int mc_coding; ///< extended inter-channel coding (multi channel coding): 1 = on, 0 = off
178  int chan_config; ///< indicates that a chan_config_info field is present
179  int chan_sort; ///< channel rearrangement: 1 = on, 0 = off
180  int rlslms; ///< use "Recursive Least Square-Least Mean Square" predictor: 1 = on, 0 = off
181  int chan_config_info; ///< mapping of channels to loudspeaker locations. Unused until setting channel configuration is implemented.
182  int *chan_pos; ///< original channel positions
183  int crc_enabled; ///< enable Cyclic Redundancy Checksum
185 
186 
187 typedef struct ALSChannelData {
193  int weighting[6];
195 
196 
197 typedef struct ALSDecContext {
203  const AVCRC *crc_table;
204  uint32_t crc_org; ///< CRC value of the original input data
205  uint32_t crc; ///< CRC value calculated from decoded data
206  unsigned int cur_frame_length; ///< length of the current frame to decode
207  unsigned int frame_id; ///< the frame ID / number of the current frame
208  unsigned int js_switch; ///< if true, joint-stereo decoding is enforced
209  unsigned int cs_switch; ///< if true, channel rearrangement is done
210  unsigned int num_blocks; ///< number of blocks used in the current frame
211  unsigned int s_max; ///< maximum Rice parameter allowed in entropy coding
212  uint8_t *bgmc_lut; ///< pointer at lookup tables used for BGMC
213  int *bgmc_lut_status; ///< pointer at lookup table status flags used for BGMC
214  int ltp_lag_length; ///< number of bits used for ltp lag value
215  int *const_block; ///< contains const_block flags for all channels
216  unsigned int *shift_lsbs; ///< contains shift_lsbs flags for all channels
217  unsigned int *opt_order; ///< contains opt_order flags for all channels
218  int *store_prev_samples; ///< contains store_prev_samples flags for all channels
219  int *use_ltp; ///< contains use_ltp flags for all channels
220  int *ltp_lag; ///< contains ltp lag values for all channels
221  int **ltp_gain; ///< gain values for ltp 5-tap filter for a channel
222  int *ltp_gain_buffer; ///< contains all gain values for ltp 5-tap filter
223  int32_t **quant_cof; ///< quantized parcor coefficients for a channel
224  int32_t *quant_cof_buffer; ///< contains all quantized parcor coefficients
225  int32_t **lpc_cof; ///< coefficients of the direct form prediction filter for a channel
226  int32_t *lpc_cof_buffer; ///< contains all coefficients of the direct form prediction filter
227  int32_t *lpc_cof_reversed_buffer; ///< temporary buffer to set up a reversed versio of lpc_cof_buffer
228  ALSChannelData **chan_data; ///< channel data for multi-channel correlation
229  ALSChannelData *chan_data_buffer; ///< contains channel data for all channels
230  int *reverted_channels; ///< stores a flag for each reverted channel
231  int32_t *prev_raw_samples; ///< contains unshifted raw samples from the previous block
232  int32_t **raw_samples; ///< decoded raw samples for each channel
233  int32_t *raw_buffer; ///< contains all decoded raw samples including carryover samples
234  uint8_t *crc_buffer; ///< buffer of byte order corrected samples used for CRC check
235  MLZ* mlz; ///< masked lz decompression structure
236  SoftFloat_IEEE754 *acf; ///< contains common multiplier for all channels
237  int *last_acf_mantissa; ///< contains the last acf mantissa data of common multiplier for all channels
238  int *shift_value; ///< value by which the binary point is to be shifted for all channels
239  int *last_shift_value; ///< contains last shift value for all channels
240  int **raw_mantissa; ///< decoded mantissa bits of the difference signal
241  unsigned char *larray; ///< buffer to store the output of masked lz decompression
242  int *nbits; ///< contains the number of bits to read for masked lz decompression for all samples
244  int user_max_order; ///< user specified maximum prediction order
245 } ALSDecContext;
246 
247 
248 typedef struct ALSBlockData {
249  unsigned int block_length; ///< number of samples within the block
250  unsigned int ra_block; ///< if true, this is a random access block
251  int *const_block; ///< if true, this is a constant value block
252  int js_blocks; ///< true if this block contains a difference signal
253  unsigned int *shift_lsbs; ///< shift of values for this block
254  unsigned int *opt_order; ///< prediction order of this block
255  int *store_prev_samples;///< if true, carryover samples have to be stored
256  int *use_ltp; ///< if true, long-term prediction is used
257  int *ltp_lag; ///< lag value for long-term prediction
258  int *ltp_gain; ///< gain values for ltp 5-tap filter
259  int32_t *quant_cof; ///< quantized parcor coefficients
260  int32_t *lpc_cof; ///< coefficients of the direct form prediction
261  int32_t *raw_samples; ///< decoded raw samples / residuals for this block
262  int32_t *prev_raw_samples; ///< contains unshifted raw samples from the previous block
263  int32_t *raw_other; ///< decoded raw samples of the other channel of a channel pair
264 } ALSBlockData;
265 
266 
268 {
269 #ifdef DEBUG
270  AVCodecContext *avctx = ctx->avctx;
271  ALSSpecificConfig *sconf = &ctx->sconf;
272 
273  ff_dlog(avctx, "resolution = %i\n", sconf->resolution);
274  ff_dlog(avctx, "floating = %i\n", sconf->floating);
275  ff_dlog(avctx, "frame_length = %i\n", sconf->frame_length);
276  ff_dlog(avctx, "ra_distance = %i\n", sconf->ra_distance);
277  ff_dlog(avctx, "ra_flag = %i\n", sconf->ra_flag);
278  ff_dlog(avctx, "adapt_order = %i\n", sconf->adapt_order);
279  ff_dlog(avctx, "coef_table = %i\n", sconf->coef_table);
280  ff_dlog(avctx, "long_term_prediction = %i\n", sconf->long_term_prediction);
281  ff_dlog(avctx, "max_order = %i\n", sconf->max_order);
282  ff_dlog(avctx, "block_switching = %i\n", sconf->block_switching);
283  ff_dlog(avctx, "bgmc = %i\n", sconf->bgmc);
284  ff_dlog(avctx, "sb_part = %i\n", sconf->sb_part);
285  ff_dlog(avctx, "joint_stereo = %i\n", sconf->joint_stereo);
286  ff_dlog(avctx, "mc_coding = %i\n", sconf->mc_coding);
287  ff_dlog(avctx, "chan_config = %i\n", sconf->chan_config);
288  ff_dlog(avctx, "chan_sort = %i\n", sconf->chan_sort);
289  ff_dlog(avctx, "RLSLMS = %i\n", sconf->rlslms);
290  ff_dlog(avctx, "chan_config_info = %i\n", sconf->chan_config_info);
291 #endif
292 }
293 
294 
295 /** Read an ALSSpecificConfig from a buffer into the output struct.
296  */
298 {
299  GetBitContext gb;
300  uint64_t ht_size;
301  int i, config_offset;
302  MPEG4AudioConfig m4ac = {0};
303  ALSSpecificConfig *sconf = &ctx->sconf;
304  AVCodecContext *avctx = ctx->avctx;
305  uint32_t als_id, header_size, trailer_size;
306  int ret;
307 
308  if ((ret = init_get_bits8(&gb, avctx->extradata, avctx->extradata_size)) < 0)
309  return ret;
310 
311  config_offset = avpriv_mpeg4audio_get_config2(&m4ac, avctx->extradata,
312  avctx->extradata_size, 1, avctx);
313 
314  if (config_offset < 0)
315  return AVERROR_INVALIDDATA;
316 
317  skip_bits_long(&gb, config_offset);
318 
319  if (get_bits_left(&gb) < (30 << 3))
320  return AVERROR_INVALIDDATA;
321 
322  // read the fixed items
323  als_id = get_bits_long(&gb, 32);
324  avctx->sample_rate = m4ac.sample_rate;
325  skip_bits_long(&gb, 32); // sample rate already known
326  sconf->samples = get_bits_long(&gb, 32);
327 
328  if (avctx->ch_layout.nb_channels != m4ac.channels) {
331  avctx->ch_layout.nb_channels = m4ac.channels;
332  }
333 
334  skip_bits(&gb, 16); // number of channels already known
335  skip_bits(&gb, 3); // skip file_type
336  sconf->resolution = get_bits(&gb, 3);
337  sconf->floating = get_bits1(&gb);
338  sconf->msb_first = get_bits1(&gb);
339  sconf->frame_length = get_bits(&gb, 16) + 1;
340  sconf->ra_distance = get_bits(&gb, 8);
341  sconf->ra_flag = get_bits(&gb, 2);
342  sconf->adapt_order = get_bits1(&gb);
343  sconf->coef_table = get_bits(&gb, 2);
344  sconf->long_term_prediction = get_bits1(&gb);
345  sconf->max_order = get_bits(&gb, 10);
346  sconf->block_switching = get_bits(&gb, 2);
347  sconf->bgmc = get_bits1(&gb);
348  sconf->sb_part = get_bits1(&gb);
349  sconf->joint_stereo = get_bits1(&gb);
350  sconf->mc_coding = get_bits1(&gb);
351  sconf->chan_config = get_bits1(&gb);
352  sconf->chan_sort = get_bits1(&gb);
353  sconf->crc_enabled = get_bits1(&gb);
354  sconf->rlslms = get_bits1(&gb);
355  skip_bits(&gb, 5); // skip 5 reserved bits
356  skip_bits1(&gb); // skip aux_data_enabled
357 
358  if (sconf->max_order > ctx->user_max_order) {
359  av_log(avctx, AV_LOG_ERROR, "order %d exceeds specified max %d\n", sconf->max_order, ctx->user_max_order);
360  return AVERROR_INVALIDDATA;
361  }
362 
363 
364  // check for ALSSpecificConfig struct
365  if (als_id != MKBETAG('A','L','S','\0'))
366  return AVERROR_INVALIDDATA;
367 
369  avpriv_request_sample(avctx, "Huge number of channels");
370  return AVERROR_PATCHWELCOME;
371  }
372 
373  if (avctx->ch_layout.nb_channels == 0)
374  return AVERROR_INVALIDDATA;
375 
376  ctx->cur_frame_length = sconf->frame_length;
377 
378  // read channel config
379  if (sconf->chan_config)
380  sconf->chan_config_info = get_bits(&gb, 16);
381  // TODO: use this to set avctx->channel_layout
382 
383 
384  // read channel sorting
385  if (sconf->chan_sort && avctx->ch_layout.nb_channels > 1) {
386  int chan_pos_bits = av_ceil_log2(avctx->ch_layout.nb_channels);
387  int bits_needed = avctx->ch_layout.nb_channels * chan_pos_bits + 7;
388  if (get_bits_left(&gb) < bits_needed)
389  return AVERROR_INVALIDDATA;
390 
391  if (!(sconf->chan_pos = av_malloc_array(avctx->ch_layout.nb_channels, sizeof(*sconf->chan_pos))))
392  return AVERROR(ENOMEM);
393 
394  ctx->cs_switch = 1;
395 
396  for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
397  sconf->chan_pos[i] = -1;
398  }
399 
400  for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
401  int idx;
402 
403  idx = get_bits(&gb, chan_pos_bits);
404  if (idx >= avctx->ch_layout.nb_channels || sconf->chan_pos[idx] != -1) {
405  av_log(avctx, AV_LOG_WARNING, "Invalid channel reordering.\n");
406  ctx->cs_switch = 0;
407  break;
408  }
409  sconf->chan_pos[idx] = i;
410  }
411 
412  align_get_bits(&gb);
413  }
414 
415 
416  // read fixed header and trailer sizes,
417  // if size = 0xFFFFFFFF then there is no data field!
418  if (get_bits_left(&gb) < 64)
419  return AVERROR_INVALIDDATA;
420 
421  header_size = get_bits_long(&gb, 32);
422  trailer_size = get_bits_long(&gb, 32);
423  if (header_size == 0xFFFFFFFF)
424  header_size = 0;
425  if (trailer_size == 0xFFFFFFFF)
426  trailer_size = 0;
427 
428  ht_size = ((int64_t)(header_size) + (int64_t)(trailer_size)) << 3;
429 
430 
431  // skip the header and trailer data
432  if (get_bits_left(&gb) < ht_size)
433  return AVERROR_INVALIDDATA;
434 
435  if (ht_size > INT32_MAX)
436  return AVERROR_PATCHWELCOME;
437 
438  skip_bits_long(&gb, ht_size);
439 
440 
441  // initialize CRC calculation
442  if (sconf->crc_enabled) {
443  if (get_bits_left(&gb) < 32)
444  return AVERROR_INVALIDDATA;
445 
447  ctx->crc_table = av_crc_get_table(AV_CRC_32_IEEE_LE);
448  ctx->crc = 0xFFFFFFFF;
449  ctx->crc_org = ~get_bits_long(&gb, 32);
450  } else
451  skip_bits_long(&gb, 32);
452  }
453 
454 
455  // no need to read the rest of ALSSpecificConfig (ra_unit_size & aux data)
456 
458 
459  return 0;
460 }
461 
462 
463 /** Check the ALSSpecificConfig for unsupported features.
464  */
466 {
467  ALSSpecificConfig *sconf = &ctx->sconf;
468  int error = 0;
469 
470  // report unsupported feature and set error value
471  #define MISSING_ERR(cond, str, errval) \
472  { \
473  if (cond) { \
474  avpriv_report_missing_feature(ctx->avctx, \
475  str); \
476  error = errval; \
477  } \
478  }
479 
480  MISSING_ERR(sconf->rlslms, "Adaptive RLS-LMS prediction", AVERROR_PATCHWELCOME);
481 
482  return error;
483 }
484 
485 
486 /** Parse the bs_info field to extract the block partitioning used in
487  * block switching mode, refer to ISO/IEC 14496-3, section 11.6.2.
488  */
489 static void parse_bs_info(const uint32_t bs_info, unsigned int n,
490  unsigned int div, unsigned int **div_blocks,
491  unsigned int *num_blocks)
492 {
493  if (n < 31 && ((bs_info << n) & 0x40000000)) {
494  // if the level is valid and the investigated bit n is set
495  // then recursively check both children at bits (2n+1) and (2n+2)
496  n *= 2;
497  div += 1;
498  parse_bs_info(bs_info, n + 1, div, div_blocks, num_blocks);
499  parse_bs_info(bs_info, n + 2, div, div_blocks, num_blocks);
500  } else {
501  // else the bit is not set or the last level has been reached
502  // (bit implicitly not set)
503  **div_blocks = div;
504  (*div_blocks)++;
505  (*num_blocks)++;
506  }
507 }
508 
509 
510 /** Read and decode a Rice codeword.
511  */
512 static int32_t decode_rice(GetBitContext *gb, unsigned int k)
513 {
514  int max = get_bits_left(gb) - k;
515  unsigned q = get_unary(gb, 0, max);
516  int r = k ? get_bits1(gb) : !(q & 1);
517 
518  if (k > 1) {
519  q <<= (k - 1);
520  q += get_bits_long(gb, k - 1);
521  } else if (!k) {
522  q >>= 1;
523  }
524  return r ? q : ~q;
525 }
526 
527 
528 /** Convert PARCOR coefficient k to direct filter coefficient.
529  */
530 static void parcor_to_lpc(unsigned int k, const int32_t *par, int32_t *cof)
531 {
532  int i, j;
533 
534  for (i = 0, j = k - 1; i < j; i++, j--) {
535  unsigned tmp1 = ((MUL64(par[k], cof[j]) + (1 << 19)) >> 20);
536  cof[j] += ((MUL64(par[k], cof[i]) + (1 << 19)) >> 20);
537  cof[i] += tmp1;
538  }
539  if (i == j)
540  cof[i] += ((MUL64(par[k], cof[j]) + (1 << 19)) >> 20);
541 
542  cof[k] = par[k];
543 }
544 
545 
546 /** Read block switching field if necessary and set actual block sizes.
547  * Also assure that the block sizes of the last frame correspond to the
548  * actual number of samples.
549  */
550 static void get_block_sizes(ALSDecContext *ctx, unsigned int *div_blocks,
551  uint32_t *bs_info)
552 {
553  ALSSpecificConfig *sconf = &ctx->sconf;
554  GetBitContext *gb = &ctx->gb;
555  unsigned int *ptr_div_blocks = div_blocks;
556  unsigned int b;
557 
558  if (sconf->block_switching) {
559  unsigned int bs_info_len = 1 << (sconf->block_switching + 2);
560  *bs_info = get_bits_long(gb, bs_info_len);
561  *bs_info <<= (32 - bs_info_len);
562  }
563 
564  ctx->num_blocks = 0;
565  parse_bs_info(*bs_info, 0, 0, &ptr_div_blocks, &ctx->num_blocks);
566 
567  // The last frame may have an overdetermined block structure given in
568  // the bitstream. In that case the defined block structure would need
569  // more samples than available to be consistent.
570  // The block structure is actually used but the block sizes are adapted
571  // to fit the actual number of available samples.
572  // Example: 5 samples, 2nd level block sizes: 2 2 2 2.
573  // This results in the actual block sizes: 2 2 1 0.
574  // This is not specified in 14496-3 but actually done by the reference
575  // codec RM22 revision 2.
576  // This appears to happen in case of an odd number of samples in the last
577  // frame which is actually not allowed by the block length switching part
578  // of 14496-3.
579  // The ALS conformance files feature an odd number of samples in the last
580  // frame.
581 
582  for (b = 0; b < ctx->num_blocks; b++)
583  div_blocks[b] = ctx->sconf.frame_length >> div_blocks[b];
584 
585  if (ctx->cur_frame_length != ctx->sconf.frame_length) {
586  unsigned int remaining = ctx->cur_frame_length;
587 
588  for (b = 0; b < ctx->num_blocks; b++) {
589  if (remaining <= div_blocks[b]) {
590  div_blocks[b] = remaining;
591  ctx->num_blocks = b + 1;
592  break;
593  }
594 
595  remaining -= div_blocks[b];
596  }
597  }
598 }
599 
600 
601 /** Read the block data for a constant block
602  */
604 {
605  ALSSpecificConfig *sconf = &ctx->sconf;
606  AVCodecContext *avctx = ctx->avctx;
607  GetBitContext *gb = &ctx->gb;
608 
609  if (bd->block_length <= 0)
610  return AVERROR_INVALIDDATA;
611 
612  *bd->raw_samples = 0;
613  *bd->const_block = get_bits1(gb); // 1 = constant value, 0 = zero block (silence)
614  bd->js_blocks = get_bits1(gb);
615 
616  // skip 5 reserved bits
617  skip_bits(gb, 5);
618 
619  if (*bd->const_block) {
620  unsigned int const_val_bits = sconf->floating ? 24 : avctx->bits_per_raw_sample;
621  *bd->raw_samples = get_sbits_long(gb, const_val_bits);
622  }
623 
624  // ensure constant block decoding by reusing this field
625  *bd->const_block = 1;
626 
627  return 0;
628 }
629 
630 
631 /** Decode the block data for a constant block
632  */
634 {
635  int smp = bd->block_length - 1;
636  int32_t val = *bd->raw_samples;
637  int32_t *dst = bd->raw_samples + 1;
638 
639  // write raw samples into buffer
640  for (; smp; smp--)
641  *dst++ = val;
642 }
643 
644 
645 /** Read the block data for a non-constant block
646  */
648 {
649  ALSSpecificConfig *sconf = &ctx->sconf;
650  AVCodecContext *avctx = ctx->avctx;
651  GetBitContext *gb = &ctx->gb;
652  unsigned int k;
653  unsigned int s[8];
654  unsigned int sx[8];
655  unsigned int sub_blocks, log2_sub_blocks, sb_length;
656  unsigned int start = 0;
657  unsigned int opt_order;
658  int sb;
659  int32_t *quant_cof = bd->quant_cof;
660  int32_t *current_res;
661 
662 
663  // ensure variable block decoding by reusing this field
664  *bd->const_block = 0;
665 
666  *bd->opt_order = 1;
667  bd->js_blocks = get_bits1(gb);
668 
669  opt_order = *bd->opt_order;
670 
671  // determine the number of subblocks for entropy decoding
672  if (!sconf->bgmc && !sconf->sb_part) {
673  log2_sub_blocks = 0;
674  } else {
675  if (sconf->bgmc && sconf->sb_part)
676  log2_sub_blocks = get_bits(gb, 2);
677  else
678  log2_sub_blocks = 2 * get_bits1(gb);
679  }
680 
681  sub_blocks = 1 << log2_sub_blocks;
682 
683  // do not continue in case of a damaged stream since
684  // block_length must be evenly divisible by sub_blocks
685  if (bd->block_length & (sub_blocks - 1) || bd->block_length <= 0) {
686  av_log(avctx, AV_LOG_WARNING,
687  "Block length is not evenly divisible by the number of subblocks.\n");
688  return AVERROR_INVALIDDATA;
689  }
690 
691  sb_length = bd->block_length >> log2_sub_blocks;
692 
693  if (sconf->bgmc) {
694  s[0] = get_bits(gb, 8 + (sconf->resolution > 1));
695  for (k = 1; k < sub_blocks; k++)
696  s[k] = s[k - 1] + decode_rice(gb, 2);
697 
698  for (k = 0; k < sub_blocks; k++) {
699  sx[k] = s[k] & 0x0F;
700  s [k] >>= 4;
701  }
702  } else {
703  s[0] = get_bits(gb, 4 + (sconf->resolution > 1));
704  for (k = 1; k < sub_blocks; k++)
705  s[k] = s[k - 1] + decode_rice(gb, 0);
706  }
707  for (k = 1; k < sub_blocks; k++)
708  if (s[k] > 32) {
709  av_log(avctx, AV_LOG_ERROR, "k invalid for rice code.\n");
710  return AVERROR_INVALIDDATA;
711  }
712 
713  if (get_bits1(gb))
714  *bd->shift_lsbs = get_bits(gb, 4) + 1;
715 
716  *bd->store_prev_samples = (bd->js_blocks && bd->raw_other) || *bd->shift_lsbs;
717 
718 
719  if (!sconf->rlslms) {
720  if (sconf->adapt_order && sconf->max_order) {
721  int opt_order_length = av_ceil_log2(av_clip((bd->block_length >> 3) - 1,
722  2, sconf->max_order + 1));
723  *bd->opt_order = get_bits(gb, opt_order_length);
724  if (*bd->opt_order > sconf->max_order) {
725  *bd->opt_order = sconf->max_order;
726  av_log(avctx, AV_LOG_ERROR, "Predictor order too large.\n");
727  return AVERROR_INVALIDDATA;
728  }
729  } else {
730  *bd->opt_order = sconf->max_order;
731  }
732  opt_order = *bd->opt_order;
733 
734  if (opt_order) {
735  int add_base;
736 
737  if (sconf->coef_table == 3) {
738  add_base = 0x7F;
739 
740  // read coefficient 0
741  quant_cof[0] = 32 * parcor_scaled_values[get_bits(gb, 7)];
742 
743  // read coefficient 1
744  if (opt_order > 1)
745  quant_cof[1] = -32 * parcor_scaled_values[get_bits(gb, 7)];
746 
747  // read coefficients 2 to opt_order
748  for (k = 2; k < opt_order; k++)
749  quant_cof[k] = get_bits(gb, 7);
750  } else {
751  int k_max;
752  add_base = 1;
753 
754  // read coefficient 0 to 19
755  k_max = FFMIN(opt_order, 20);
756  for (k = 0; k < k_max; k++) {
757  int rice_param = parcor_rice_table[sconf->coef_table][k][1];
758  int offset = parcor_rice_table[sconf->coef_table][k][0];
759  quant_cof[k] = decode_rice(gb, rice_param) + offset;
760  if (quant_cof[k] < -64 || quant_cof[k] > 63) {
761  av_log(avctx, AV_LOG_ERROR,
762  "quant_cof %"PRId32" is out of range.\n",
763  quant_cof[k]);
764  return AVERROR_INVALIDDATA;
765  }
766  }
767 
768  // read coefficients 20 to 126
769  k_max = FFMIN(opt_order, 127);
770  for (; k < k_max; k++)
771  quant_cof[k] = decode_rice(gb, 2) + (k & 1);
772 
773  // read coefficients 127 to opt_order
774  for (; k < opt_order; k++)
775  quant_cof[k] = decode_rice(gb, 1);
776 
777  quant_cof[0] = 32 * parcor_scaled_values[quant_cof[0] + 64];
778 
779  if (opt_order > 1)
780  quant_cof[1] = -32 * parcor_scaled_values[quant_cof[1] + 64];
781  }
782 
783  for (k = 2; k < opt_order; k++)
784  quant_cof[k] = (quant_cof[k] * (1U << 14)) + (add_base << 13);
785  }
786  }
787 
788  // read LTP gain and lag values
789  if (sconf->long_term_prediction) {
790  *bd->use_ltp = get_bits1(gb);
791 
792  if (*bd->use_ltp) {
793  int r, c;
794 
795  bd->ltp_gain[0] = decode_rice(gb, 1) * 8;
796  bd->ltp_gain[1] = decode_rice(gb, 2) * 8;
797 
798  r = get_unary(gb, 0, 4);
799  c = get_bits(gb, 2);
800  if (r >= 4) {
801  av_log(avctx, AV_LOG_ERROR, "r overflow\n");
802  return AVERROR_INVALIDDATA;
803  }
804 
805  bd->ltp_gain[2] = ltp_gain_values[r][c];
806 
807  bd->ltp_gain[3] = decode_rice(gb, 2) * 8;
808  bd->ltp_gain[4] = decode_rice(gb, 1) * 8;
809 
810  *bd->ltp_lag = get_bits(gb, ctx->ltp_lag_length);
811  *bd->ltp_lag += FFMAX(4, opt_order + 1);
812  }
813  }
814 
815  // read first value and residuals in case of a random access block
816  if (bd->ra_block) {
817  start = FFMIN(opt_order, 3);
818  av_assert0(sb_length <= sconf->frame_length);
819  if (sb_length <= start) {
820  // opt_order or sb_length may be corrupted, either way this is unsupported and not well defined in the specification
821  av_log(avctx, AV_LOG_ERROR, "Sub block length smaller or equal start\n");
822  return AVERROR_PATCHWELCOME;
823  }
824 
825  if (opt_order)
826  bd->raw_samples[0] = decode_rice(gb, avctx->bits_per_raw_sample - 4);
827  if (opt_order > 1)
828  bd->raw_samples[1] = decode_rice(gb, FFMIN(s[0] + 3, ctx->s_max));
829  if (opt_order > 2)
830  bd->raw_samples[2] = decode_rice(gb, FFMIN(s[0] + 1, ctx->s_max));
831  }
832 
833  // read all residuals
834  if (sconf->bgmc) {
835  int delta[8];
836  unsigned int k [8];
837  unsigned int b = av_clip((av_ceil_log2(bd->block_length) - 3) >> 1, 0, 5);
838 
839  // read most significant bits
840  unsigned int high;
841  unsigned int low;
842  unsigned int value;
843 
844  int ret = ff_bgmc_decode_init(gb, &high, &low, &value);
845  if (ret < 0)
846  return ret;
847 
848  current_res = bd->raw_samples + start;
849 
850  for (sb = 0; sb < sub_blocks; sb++) {
851  unsigned int sb_len = sb_length - (sb ? 0 : start);
852 
853  k [sb] = s[sb] > b ? s[sb] - b : 0;
854  delta[sb] = 5 - s[sb] + k[sb];
855 
856  if (k[sb] >= 32)
857  return AVERROR_INVALIDDATA;
858 
859  ff_bgmc_decode(gb, sb_len, current_res,
860  delta[sb], sx[sb], &high, &low, &value, ctx->bgmc_lut, ctx->bgmc_lut_status);
861 
862  current_res += sb_len;
863  }
864 
865  ff_bgmc_decode_end(gb);
866 
867 
868  // read least significant bits and tails
869  current_res = bd->raw_samples + start;
870 
871  for (sb = 0; sb < sub_blocks; sb++, start = 0) {
872  unsigned int cur_tail_code = tail_code[sx[sb]][delta[sb]];
873  unsigned int cur_k = k[sb];
874  unsigned int cur_s = s[sb];
875 
876  for (; start < sb_length; start++) {
877  int32_t res = *current_res;
878 
879  if (res == cur_tail_code) {
880  unsigned int max_msb = (2 + (sx[sb] > 2) + (sx[sb] > 10))
881  << (5 - delta[sb]);
882 
883  res = decode_rice(gb, cur_s);
884 
885  if (res >= 0) {
886  res += (max_msb ) << cur_k;
887  } else {
888  res -= (max_msb - 1) << cur_k;
889  }
890  } else {
891  if (res > cur_tail_code)
892  res--;
893 
894  if (res & 1)
895  res = -res;
896 
897  res >>= 1;
898 
899  if (cur_k) {
900  res *= 1U << cur_k;
901  res |= get_bits_long(gb, cur_k);
902  }
903  }
904 
905  *current_res++ = res;
906  }
907  }
908  } else {
909  current_res = bd->raw_samples + start;
910 
911  for (sb = 0; sb < sub_blocks; sb++, start = 0)
912  for (; start < sb_length; start++)
913  *current_res++ = decode_rice(gb, s[sb]);
914  }
915 
916  return 0;
917 }
918 
919 
920 /** Decode the block data for a non-constant block
921  */
923 {
924  ALSSpecificConfig *sconf = &ctx->sconf;
925  unsigned int block_length = bd->block_length;
926  unsigned int smp = 0;
927  unsigned int k;
928  int opt_order = *bd->opt_order;
929  int sb;
930  int64_t y;
931  int32_t *quant_cof = bd->quant_cof;
932  int32_t *lpc_cof = bd->lpc_cof;
933  int32_t *raw_samples = bd->raw_samples;
934  int32_t *raw_samples_end = bd->raw_samples + bd->block_length;
935  int32_t *lpc_cof_reversed = ctx->lpc_cof_reversed_buffer;
936 
937  // reverse long-term prediction
938  if (*bd->use_ltp) {
939  int ltp_smp;
940 
941  for (ltp_smp = FFMAX(*bd->ltp_lag - 2, 0); ltp_smp < block_length; ltp_smp++) {
942  int center = ltp_smp - *bd->ltp_lag;
943  int begin = FFMAX(0, center - 2);
944  int end = center + 3;
945  int tab = 5 - (end - begin);
946  int base;
947 
948  y = 1 << 6;
949 
950  for (base = begin; base < end; base++, tab++)
951  y += (uint64_t)MUL64(bd->ltp_gain[tab], raw_samples[base]);
952 
953  raw_samples[ltp_smp] += y >> 7;
954  }
955  }
956 
957  // reconstruct all samples from residuals
958  if (bd->ra_block) {
959  for (smp = 0; smp < FFMIN(opt_order, block_length); smp++) {
960  y = 1 << 19;
961 
962  for (sb = 0; sb < smp; sb++)
963  y += (uint64_t)MUL64(lpc_cof[sb], raw_samples[-(sb + 1)]);
964 
965  *raw_samples++ -= y >> 20;
966  parcor_to_lpc(smp, quant_cof, lpc_cof);
967  }
968  } else {
969  for (k = 0; k < opt_order; k++)
970  parcor_to_lpc(k, quant_cof, lpc_cof);
971 
972  // store previous samples in case that they have to be altered
973  if (*bd->store_prev_samples)
974  memcpy(bd->prev_raw_samples, raw_samples - sconf->max_order,
975  sizeof(*bd->prev_raw_samples) * sconf->max_order);
976 
977  // reconstruct difference signal for prediction (joint-stereo)
978  if (bd->js_blocks && bd->raw_other) {
979  uint32_t *left, *right;
980 
981  if (bd->raw_other > raw_samples) { // D = R - L
982  left = raw_samples;
983  right = bd->raw_other;
984  } else { // D = R - L
985  left = bd->raw_other;
986  right = raw_samples;
987  }
988 
989  for (sb = -1; sb >= -sconf->max_order; sb--)
990  raw_samples[sb] = right[sb] - left[sb];
991  }
992 
993  // reconstruct shifted signal
994  if (*bd->shift_lsbs)
995  for (sb = -1; sb >= -sconf->max_order; sb--)
996  raw_samples[sb] >>= *bd->shift_lsbs;
997  }
998 
999  // reverse linear prediction coefficients for efficiency
1000  lpc_cof = lpc_cof + opt_order;
1001 
1002  for (sb = 0; sb < opt_order; sb++)
1003  lpc_cof_reversed[sb] = lpc_cof[-(sb + 1)];
1004 
1005  // reconstruct raw samples
1006  raw_samples = bd->raw_samples + smp;
1007  lpc_cof = lpc_cof_reversed + opt_order;
1008 
1009  for (; raw_samples < raw_samples_end; raw_samples++) {
1010  y = 1 << 19;
1011 
1012  for (sb = -opt_order; sb < 0; sb++)
1013  y += (uint64_t)MUL64(lpc_cof[sb], raw_samples[sb]);
1014 
1015  *raw_samples -= y >> 20;
1016  }
1017 
1018  raw_samples = bd->raw_samples;
1019 
1020  // restore previous samples in case that they have been altered
1021  if (*bd->store_prev_samples)
1022  memcpy(raw_samples - sconf->max_order, bd->prev_raw_samples,
1023  sizeof(*raw_samples) * sconf->max_order);
1024 
1025  return 0;
1026 }
1027 
1028 
1029 /** Read the block data.
1030  */
1032 {
1033  int ret;
1034  GetBitContext *gb = &ctx->gb;
1035  ALSSpecificConfig *sconf = &ctx->sconf;
1036 
1037  *bd->shift_lsbs = 0;
1038 
1039  if (get_bits_left(gb) < 7)
1040  return AVERROR_INVALIDDATA;
1041 
1042  // read block type flag and read the samples accordingly
1043  if (get_bits1(gb)) {
1044  ret = read_var_block_data(ctx, bd);
1045  } else {
1046  ret = read_const_block_data(ctx, bd);
1047  }
1048 
1049  if (!sconf->mc_coding || ctx->js_switch)
1050  align_get_bits(gb);
1051 
1052  return ret;
1053 }
1054 
1055 
1056 /** Decode the block data.
1057  */
1059 {
1060  unsigned int smp;
1061  int ret = 0;
1062 
1063  // read block type flag and read the samples accordingly
1064  if (*bd->const_block)
1066  else
1067  ret = decode_var_block_data(ctx, bd); // always return 0
1068 
1069  if (ret < 0)
1070  return ret;
1071 
1072  // TODO: read RLSLMS extension data
1073 
1074  if (*bd->shift_lsbs)
1075  for (smp = 0; smp < bd->block_length; smp++)
1076  bd->raw_samples[smp] = (unsigned)bd->raw_samples[smp] << *bd->shift_lsbs;
1077 
1078  return 0;
1079 }
1080 
1081 
1082 /** Read and decode block data successively.
1083  */
1085 {
1086  int ret;
1087 
1088  if ((ret = read_block(ctx, bd)) < 0)
1089  return ret;
1090 
1091  return decode_block(ctx, bd);
1092 }
1093 
1094 
1095 /** Compute the number of samples left to decode for the current frame and
1096  * sets these samples to zero.
1097  */
1098 static void zero_remaining(unsigned int b, unsigned int b_max,
1099  const unsigned int *div_blocks, int32_t *buf)
1100 {
1101  unsigned int count = 0;
1102 
1103  while (b < b_max)
1104  count += div_blocks[b++];
1105 
1106  if (count)
1107  memset(buf, 0, sizeof(*buf) * count);
1108 }
1109 
1110 
1111 /** Decode blocks independently.
1112  */
1113 static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame,
1114  unsigned int c, const unsigned int *div_blocks,
1115  unsigned int *js_blocks)
1116 {
1117  int ret;
1118  unsigned int b;
1119  ALSBlockData bd = { 0 };
1120 
1121  bd.ra_block = ra_frame;
1122  bd.const_block = ctx->const_block;
1123  bd.shift_lsbs = ctx->shift_lsbs;
1124  bd.opt_order = ctx->opt_order;
1125  bd.store_prev_samples = ctx->store_prev_samples;
1126  bd.use_ltp = ctx->use_ltp;
1127  bd.ltp_lag = ctx->ltp_lag;
1128  bd.ltp_gain = ctx->ltp_gain[0];
1129  bd.quant_cof = ctx->quant_cof[0];
1130  bd.lpc_cof = ctx->lpc_cof[0];
1131  bd.prev_raw_samples = ctx->prev_raw_samples;
1132  bd.raw_samples = ctx->raw_samples[c];
1133 
1134 
1135  for (b = 0; b < ctx->num_blocks; b++) {
1136  bd.block_length = div_blocks[b];
1137 
1138  if ((ret = read_decode_block(ctx, &bd)) < 0) {
1139  // damaged block, write zero for the rest of the frame
1140  zero_remaining(b, ctx->num_blocks, div_blocks, bd.raw_samples);
1141  return ret;
1142  }
1143  bd.raw_samples += div_blocks[b];
1144  bd.ra_block = 0;
1145  }
1146 
1147  return 0;
1148 }
1149 
1150 
1151 /** Decode blocks dependently.
1152  */
1153 static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame,
1154  unsigned int c, const unsigned int *div_blocks,
1155  unsigned int *js_blocks)
1156 {
1157  ALSSpecificConfig *sconf = &ctx->sconf;
1158  unsigned int offset = 0;
1159  unsigned int b;
1160  int ret;
1161  ALSBlockData bd[2] = { { 0 } };
1162 
1163  bd[0].ra_block = ra_frame;
1164  bd[0].const_block = ctx->const_block;
1165  bd[0].shift_lsbs = ctx->shift_lsbs;
1166  bd[0].opt_order = ctx->opt_order;
1167  bd[0].store_prev_samples = ctx->store_prev_samples;
1168  bd[0].use_ltp = ctx->use_ltp;
1169  bd[0].ltp_lag = ctx->ltp_lag;
1170  bd[0].ltp_gain = ctx->ltp_gain[0];
1171  bd[0].quant_cof = ctx->quant_cof[0];
1172  bd[0].lpc_cof = ctx->lpc_cof[0];
1173  bd[0].prev_raw_samples = ctx->prev_raw_samples;
1174  bd[0].js_blocks = *js_blocks;
1175 
1176  bd[1].ra_block = ra_frame;
1177  bd[1].const_block = ctx->const_block;
1178  bd[1].shift_lsbs = ctx->shift_lsbs;
1179  bd[1].opt_order = ctx->opt_order;
1180  bd[1].store_prev_samples = ctx->store_prev_samples;
1181  bd[1].use_ltp = ctx->use_ltp;
1182  bd[1].ltp_lag = ctx->ltp_lag;
1183  bd[1].ltp_gain = ctx->ltp_gain[0];
1184  bd[1].quant_cof = ctx->quant_cof[0];
1185  bd[1].lpc_cof = ctx->lpc_cof[0];
1186  bd[1].prev_raw_samples = ctx->prev_raw_samples;
1187  bd[1].js_blocks = *(js_blocks + 1);
1188 
1189  // decode all blocks
1190  for (b = 0; b < ctx->num_blocks; b++) {
1191  unsigned int s;
1192 
1193  bd[0].block_length = div_blocks[b];
1194  bd[1].block_length = div_blocks[b];
1195 
1196  bd[0].raw_samples = ctx->raw_samples[c ] + offset;
1197  bd[1].raw_samples = ctx->raw_samples[c + 1] + offset;
1198 
1199  bd[0].raw_other = bd[1].raw_samples;
1200  bd[1].raw_other = bd[0].raw_samples;
1201 
1202  if ((ret = read_decode_block(ctx, &bd[0])) < 0 ||
1203  (ret = read_decode_block(ctx, &bd[1])) < 0)
1204  goto fail;
1205 
1206  // reconstruct joint-stereo blocks
1207  if (bd[0].js_blocks) {
1208  if (bd[1].js_blocks)
1209  av_log(ctx->avctx, AV_LOG_WARNING, "Invalid channel pair.\n");
1210 
1211  for (s = 0; s < div_blocks[b]; s++)
1212  bd[0].raw_samples[s] = bd[1].raw_samples[s] - (unsigned)bd[0].raw_samples[s];
1213  } else if (bd[1].js_blocks) {
1214  for (s = 0; s < div_blocks[b]; s++)
1215  bd[1].raw_samples[s] = bd[1].raw_samples[s] + (unsigned)bd[0].raw_samples[s];
1216  }
1217 
1218  offset += div_blocks[b];
1219  bd[0].ra_block = 0;
1220  bd[1].ra_block = 0;
1221  }
1222 
1223  // store carryover raw samples,
1224  // the others channel raw samples are stored by the calling function.
1225  memmove(ctx->raw_samples[c] - sconf->max_order,
1226  ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
1227  sizeof(*ctx->raw_samples[c]) * sconf->max_order);
1228 
1229  return 0;
1230 fail:
1231  // damaged block, write zero for the rest of the frame
1232  zero_remaining(b, ctx->num_blocks, div_blocks, bd[0].raw_samples);
1233  zero_remaining(b, ctx->num_blocks, div_blocks, bd[1].raw_samples);
1234  return ret;
1235 }
1236 
1237 static inline int als_weighting(GetBitContext *gb, int k, int off)
1238 {
1239  int idx = av_clip(decode_rice(gb, k) + off,
1240  0, FF_ARRAY_ELEMS(mcc_weightings) - 1);
1241  return mcc_weightings[idx];
1242 }
1243 
1244 /** Read the channel data.
1245  */
1247 {
1248  GetBitContext *gb = &ctx->gb;
1249  ALSChannelData *current = cd;
1250  unsigned int channels = ctx->avctx->ch_layout.nb_channels;
1251  int entries = 0;
1252 
1253  while (entries < channels && !(current->stop_flag = get_bits1(gb))) {
1255 
1256  if (current->master_channel >= channels) {
1257  av_log(ctx->avctx, AV_LOG_ERROR, "Invalid master channel.\n");
1258  return AVERROR_INVALIDDATA;
1259  }
1260 
1261  if (current->master_channel != c) {
1262  current->time_diff_flag = get_bits1(gb);
1263  current->weighting[0] = als_weighting(gb, 1, 16);
1264  current->weighting[1] = als_weighting(gb, 2, 14);
1265  current->weighting[2] = als_weighting(gb, 1, 16);
1266 
1267  if (current->time_diff_flag) {
1268  current->weighting[3] = als_weighting(gb, 1, 16);
1269  current->weighting[4] = als_weighting(gb, 1, 16);
1270  current->weighting[5] = als_weighting(gb, 1, 16);
1271 
1272  current->time_diff_sign = get_bits1(gb);
1273  current->time_diff_index = get_bits(gb, ctx->ltp_lag_length - 3) + 3;
1274  }
1275  }
1276 
1277  current++;
1278  entries++;
1279  }
1280 
1281  if (entries == channels) {
1282  av_log(ctx->avctx, AV_LOG_ERROR, "Damaged channel data.\n");
1283  return AVERROR_INVALIDDATA;
1284  }
1285 
1286  align_get_bits(gb);
1287  return 0;
1288 }
1289 
1290 
1291 /** Recursively reverts the inter-channel correlation for a block.
1292  */
1294  ALSChannelData **cd, int *reverted,
1295  unsigned int offset, int c)
1296 {
1297  ALSChannelData *ch = cd[c];
1298  unsigned int dep = 0;
1299  unsigned int channels = ctx->avctx->ch_layout.nb_channels;
1300  unsigned int channel_size = ctx->sconf.frame_length + ctx->sconf.max_order;
1301 
1302  if (reverted[c])
1303  return 0;
1304 
1305  reverted[c] = 1;
1306 
1307  while (dep < channels && !ch[dep].stop_flag) {
1308  revert_channel_correlation(ctx, bd, cd, reverted, offset,
1309  ch[dep].master_channel);
1310 
1311  dep++;
1312  }
1313 
1314  if (dep == channels) {
1315  av_log(ctx->avctx, AV_LOG_WARNING, "Invalid channel correlation.\n");
1316  return AVERROR_INVALIDDATA;
1317  }
1318 
1319  bd->const_block = ctx->const_block + c;
1320  bd->shift_lsbs = ctx->shift_lsbs + c;
1321  bd->opt_order = ctx->opt_order + c;
1322  bd->store_prev_samples = ctx->store_prev_samples + c;
1323  bd->use_ltp = ctx->use_ltp + c;
1324  bd->ltp_lag = ctx->ltp_lag + c;
1325  bd->ltp_gain = ctx->ltp_gain[c];
1326  bd->lpc_cof = ctx->lpc_cof[c];
1327  bd->quant_cof = ctx->quant_cof[c];
1328  bd->raw_samples = ctx->raw_samples[c] + offset;
1329 
1330  for (dep = 0; !ch[dep].stop_flag; dep++) {
1331  ptrdiff_t smp;
1332  ptrdiff_t begin = 1;
1333  ptrdiff_t end = bd->block_length - 1;
1334  int64_t y;
1335  int32_t *master = ctx->raw_samples[ch[dep].master_channel] + offset;
1336 
1337  if (ch[dep].master_channel == c)
1338  continue;
1339 
1340  if (ch[dep].time_diff_flag) {
1341  int t = ch[dep].time_diff_index;
1342 
1343  if (ch[dep].time_diff_sign) {
1344  t = -t;
1345  if (begin < t) {
1346  av_log(ctx->avctx, AV_LOG_ERROR, "begin %"PTRDIFF_SPECIFIER" smaller than time diff index %d.\n", begin, t);
1347  return AVERROR_INVALIDDATA;
1348  }
1349  begin -= t;
1350  } else {
1351  if (end < t) {
1352  av_log(ctx->avctx, AV_LOG_ERROR, "end %"PTRDIFF_SPECIFIER" smaller than time diff index %d.\n", end, t);
1353  return AVERROR_INVALIDDATA;
1354  }
1355  end -= t;
1356  }
1357 
1358  if (FFMIN(begin - 1, begin - 1 + t) < ctx->raw_buffer - master ||
1359  FFMAX(end + 1, end + 1 + t) > ctx->raw_buffer + channels * channel_size - master) {
1360  av_log(ctx->avctx, AV_LOG_ERROR,
1361  "sample pointer range [%p, %p] not contained in raw_buffer [%p, %p].\n",
1362  master + FFMIN(begin - 1, begin - 1 + t), master + FFMAX(end + 1, end + 1 + t),
1363  ctx->raw_buffer, ctx->raw_buffer + channels * channel_size);
1364  return AVERROR_INVALIDDATA;
1365  }
1366 
1367  for (smp = begin; smp < end; smp++) {
1368  y = (1 << 6) +
1369  MUL64(ch[dep].weighting[0], master[smp - 1 ]) +
1370  MUL64(ch[dep].weighting[1], master[smp ]) +
1371  MUL64(ch[dep].weighting[2], master[smp + 1 ]) +
1372  MUL64(ch[dep].weighting[3], master[smp - 1 + t]) +
1373  MUL64(ch[dep].weighting[4], master[smp + t]) +
1374  MUL64(ch[dep].weighting[5], master[smp + 1 + t]);
1375 
1376  bd->raw_samples[smp] += y >> 7;
1377  }
1378  } else {
1379 
1380  if (begin - 1 < ctx->raw_buffer - master ||
1381  end + 1 > ctx->raw_buffer + channels * channel_size - master) {
1382  av_log(ctx->avctx, AV_LOG_ERROR,
1383  "sample pointer range [%p, %p] not contained in raw_buffer [%p, %p].\n",
1384  master + begin - 1, master + end + 1,
1385  ctx->raw_buffer, ctx->raw_buffer + channels * channel_size);
1386  return AVERROR_INVALIDDATA;
1387  }
1388 
1389  for (smp = begin; smp < end; smp++) {
1390  y = (1 << 6) +
1391  MUL64(ch[dep].weighting[0], master[smp - 1]) +
1392  MUL64(ch[dep].weighting[1], master[smp ]) +
1393  MUL64(ch[dep].weighting[2], master[smp + 1]);
1394 
1395  bd->raw_samples[smp] += y >> 7;
1396  }
1397  }
1398  }
1399 
1400  return 0;
1401 }
1402 
1403 
1404 /** multiply two softfloats and handle the rounding off
1405  */
1407  uint64_t mantissa_temp;
1408  uint64_t mask_64;
1409  int cutoff_bit_count;
1410  unsigned char last_2_bits;
1411  unsigned int mantissa;
1412  int32_t sign;
1413  uint32_t return_val = 0;
1414  int bit_count = 48;
1415 
1416  sign = a.sign ^ b.sign;
1417 
1418  // Multiply mantissa bits in a 64-bit register
1419  mantissa_temp = (uint64_t)a.mant * (uint64_t)b.mant;
1420  mask_64 = (uint64_t)0x1 << 47;
1421 
1422  if (!mantissa_temp)
1423  return FLOAT_0;
1424 
1425  // Count the valid bit count
1426  while (!(mantissa_temp & mask_64) && mask_64) {
1427  bit_count--;
1428  mask_64 >>= 1;
1429  }
1430 
1431  // Round off
1432  cutoff_bit_count = bit_count - 24;
1433  if (cutoff_bit_count > 0) {
1434  last_2_bits = (unsigned char)(((unsigned int)mantissa_temp >> (cutoff_bit_count - 1)) & 0x3 );
1435  if ((last_2_bits == 0x3) || ((last_2_bits == 0x1) && ((unsigned int)mantissa_temp & ((0x1UL << (cutoff_bit_count - 1)) - 1)))) {
1436  // Need to round up
1437  mantissa_temp += (uint64_t)0x1 << cutoff_bit_count;
1438  }
1439  }
1440 
1441  if (cutoff_bit_count >= 0) {
1442  mantissa = (unsigned int)(mantissa_temp >> cutoff_bit_count);
1443  } else {
1444  mantissa = (unsigned int)(mantissa_temp <<-cutoff_bit_count);
1445  }
1446 
1447  // Need one more shift?
1448  if (mantissa & 0x01000000ul) {
1449  bit_count++;
1450  mantissa >>= 1;
1451  }
1452 
1453  if (!sign) {
1454  return_val = 0x80000000U;
1455  }
1456 
1457  return_val |= ((unsigned)av_clip(a.exp + b.exp + bit_count - 47, -126, 127) << 23) & 0x7F800000;
1458  return_val |= mantissa;
1459  return av_bits2sf_ieee754(return_val);
1460 }
1461 
1462 
1463 /** Read and decode the floating point sample data
1464  */
1465 static int read_diff_float_data(ALSDecContext *ctx, unsigned int ra_frame) {
1466  AVCodecContext *avctx = ctx->avctx;
1467  GetBitContext *gb = &ctx->gb;
1468  SoftFloat_IEEE754 *acf = ctx->acf;
1469  int *shift_value = ctx->shift_value;
1470  int *last_shift_value = ctx->last_shift_value;
1471  int *last_acf_mantissa = ctx->last_acf_mantissa;
1472  int **raw_mantissa = ctx->raw_mantissa;
1473  int *nbits = ctx->nbits;
1474  unsigned char *larray = ctx->larray;
1475  int frame_length = ctx->cur_frame_length;
1477  unsigned int partA_flag;
1478  unsigned int highest_byte;
1479  unsigned int shift_amp;
1480  uint32_t tmp_32;
1481  int use_acf;
1482  int nchars;
1483  int i;
1484  int c;
1485  long k;
1486  long nbits_aligned;
1487  unsigned long acc;
1488  unsigned long j;
1489  uint32_t sign;
1490  uint32_t e;
1491  uint32_t mantissa;
1492 
1493  skip_bits_long(gb, 32); //num_bytes_diff_float
1494  use_acf = get_bits1(gb);
1495 
1496  if (ra_frame) {
1497  memset(last_acf_mantissa, 0, avctx->ch_layout.nb_channels * sizeof(*last_acf_mantissa));
1498  memset(last_shift_value, 0, avctx->ch_layout.nb_channels * sizeof(*last_shift_value) );
1499  ff_mlz_flush_dict(ctx->mlz);
1500  }
1501 
1502  if (avctx->ch_layout.nb_channels * 8 > get_bits_left(gb))
1503  return AVERROR_INVALIDDATA;
1504 
1505  for (c = 0; c < avctx->ch_layout.nb_channels; ++c) {
1506  if (use_acf) {
1507  //acf_flag
1508  if (get_bits1(gb)) {
1509  tmp_32 = get_bits(gb, 23);
1510  last_acf_mantissa[c] = tmp_32;
1511  } else {
1512  tmp_32 = last_acf_mantissa[c];
1513  }
1514  acf[c] = av_bits2sf_ieee754(tmp_32);
1515  } else {
1516  acf[c] = FLOAT_1;
1517  }
1518 
1519  highest_byte = get_bits(gb, 2);
1520  partA_flag = get_bits1(gb);
1521  shift_amp = get_bits1(gb);
1522 
1523  if (shift_amp) {
1524  shift_value[c] = get_bits(gb, 8);
1525  last_shift_value[c] = shift_value[c];
1526  } else {
1527  shift_value[c] = last_shift_value[c];
1528  }
1529 
1530  if (partA_flag) {
1531  if (!get_bits1(gb)) { //uncompressed
1532  for (i = 0; i < frame_length; ++i) {
1533  if (ctx->raw_samples[c][i] == 0) {
1534  ctx->raw_mantissa[c][i] = get_bits_long(gb, 32);
1535  }
1536  }
1537  } else { //compressed
1538  nchars = 0;
1539  for (i = 0; i < frame_length; ++i) {
1540  if (ctx->raw_samples[c][i] == 0) {
1541  nchars += 4;
1542  }
1543  }
1544 
1545  tmp_32 = ff_mlz_decompression(ctx->mlz, gb, nchars, larray);
1546  if(tmp_32 != nchars) {
1547  av_log(ctx->avctx, AV_LOG_ERROR, "Error in MLZ decompression (%"PRId32", %d).\n", tmp_32, nchars);
1548  return AVERROR_INVALIDDATA;
1549  }
1550 
1551  for (i = 0; i < frame_length; ++i) {
1552  ctx->raw_mantissa[c][i] = AV_RB32(larray);
1553  }
1554  }
1555  }
1556 
1557  //decode part B
1558  if (highest_byte) {
1559  for (i = 0; i < frame_length; ++i) {
1560  if (ctx->raw_samples[c][i] != 0) {
1561  //The following logic is taken from Tabel 14.45 and 14.46 from the ISO spec
1562  if (av_cmp_sf_ieee754(acf[c], FLOAT_1)) {
1563  nbits[i] = 23 - av_log2(abs(ctx->raw_samples[c][i]));
1564  } else {
1565  nbits[i] = 23;
1566  }
1567  nbits[i] = FFMIN(nbits[i], highest_byte*8);
1568  }
1569  }
1570 
1571  if (!get_bits1(gb)) { //uncompressed
1572  for (i = 0; i < frame_length; ++i) {
1573  if (ctx->raw_samples[c][i] != 0) {
1574  raw_mantissa[c][i] = get_bitsz(gb, nbits[i]);
1575  }
1576  }
1577  } else { //compressed
1578  nchars = 0;
1579  for (i = 0; i < frame_length; ++i) {
1580  if (ctx->raw_samples[c][i]) {
1581  nchars += (int) nbits[i] / 8;
1582  if (nbits[i] & 7) {
1583  ++nchars;
1584  }
1585  }
1586  }
1587 
1588  tmp_32 = ff_mlz_decompression(ctx->mlz, gb, nchars, larray);
1589  if(tmp_32 != nchars) {
1590  av_log(ctx->avctx, AV_LOG_ERROR, "Error in MLZ decompression (%"PRId32", %d).\n", tmp_32, nchars);
1591  return AVERROR_INVALIDDATA;
1592  }
1593 
1594  j = 0;
1595  for (i = 0; i < frame_length; ++i) {
1596  if (ctx->raw_samples[c][i]) {
1597  if (nbits[i] & 7) {
1598  nbits_aligned = 8 * ((unsigned int)(nbits[i] / 8) + 1);
1599  } else {
1600  nbits_aligned = nbits[i];
1601  }
1602  acc = 0;
1603  for (k = 0; k < nbits_aligned/8; ++k) {
1604  acc = (acc << 8) + larray[j++];
1605  }
1606  acc >>= (nbits_aligned - nbits[i]);
1607  raw_mantissa[c][i] = acc;
1608  }
1609  }
1610  }
1611  }
1612 
1613  for (i = 0; i < frame_length; ++i) {
1614  SoftFloat_IEEE754 pcm_sf = av_int2sf_ieee754(ctx->raw_samples[c][i], 0);
1615  pcm_sf = av_div_sf_ieee754(pcm_sf, scale);
1616 
1617  if (ctx->raw_samples[c][i] != 0) {
1618  if (!av_cmp_sf_ieee754(acf[c], FLOAT_1)) {
1619  pcm_sf = multiply(acf[c], pcm_sf);
1620  }
1621 
1622  sign = pcm_sf.sign;
1623  e = pcm_sf.exp;
1624  mantissa = (pcm_sf.mant | 0x800000) + raw_mantissa[c][i];
1625 
1626  while(mantissa >= 0x1000000) {
1627  e++;
1628  mantissa >>= 1;
1629  }
1630 
1631  if (mantissa) e += (shift_value[c] - 127);
1632  mantissa &= 0x007fffffUL;
1633 
1634  tmp_32 = (sign << 31) | ((e + EXP_BIAS) << 23) | (mantissa);
1635  ctx->raw_samples[c][i] = tmp_32;
1636  } else {
1637  ctx->raw_samples[c][i] = raw_mantissa[c][i] & 0x007fffffUL;
1638  }
1639  }
1640  align_get_bits(gb);
1641  }
1642  return 0;
1643 }
1644 
1645 
1646 /** Read the frame data.
1647  */
1648 static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
1649 {
1650  ALSSpecificConfig *sconf = &ctx->sconf;
1651  AVCodecContext *avctx = ctx->avctx;
1652  GetBitContext *gb = &ctx->gb;
1653  unsigned int div_blocks[32]; ///< block sizes.
1654  int c;
1655  unsigned int js_blocks[2];
1656  int channels = avctx->ch_layout.nb_channels;
1657  uint32_t bs_info = 0;
1658  int ret;
1659 
1660  // skip the size of the ra unit if present in the frame
1661  if (sconf->ra_flag == RA_FLAG_FRAMES && ra_frame)
1662  skip_bits_long(gb, 32);
1663 
1664  if (sconf->mc_coding && sconf->joint_stereo) {
1665  ctx->js_switch = get_bits1(gb);
1666  align_get_bits(gb);
1667  }
1668 
1669  if (!sconf->mc_coding || ctx->js_switch) {
1670  int independent_bs = !sconf->joint_stereo;
1671  if (get_bits_left(gb) < 7*channels*ctx->num_blocks)
1672  return AVERROR_INVALIDDATA;
1673  for (c = 0; c < channels; c++) {
1674  js_blocks[0] = 0;
1675  js_blocks[1] = 0;
1676 
1677  get_block_sizes(ctx, div_blocks, &bs_info);
1678 
1679  // if joint_stereo and block_switching is set, independent decoding
1680  // is signaled via the first bit of bs_info
1681  if (sconf->joint_stereo && sconf->block_switching)
1682  if (bs_info >> 31)
1683  independent_bs = 2;
1684 
1685  // if this is the last channel, it has to be decoded independently
1686  if (c == channels - 1 || (c & 1))
1687  independent_bs = 1;
1688 
1689  if (independent_bs) {
1690  ret = decode_blocks_ind(ctx, ra_frame, c,
1691  div_blocks, js_blocks);
1692  if (ret < 0)
1693  return ret;
1694  independent_bs--;
1695  } else {
1696  ret = decode_blocks(ctx, ra_frame, c, div_blocks, js_blocks);
1697  if (ret < 0)
1698  return ret;
1699 
1700  c++;
1701  }
1702 
1703  // store carryover raw samples
1704  memmove(ctx->raw_samples[c] - sconf->max_order,
1705  ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
1706  sizeof(*ctx->raw_samples[c]) * sconf->max_order);
1707  ctx->highest_decoded_channel = c;
1708  }
1709  } else { // multi-channel coding
1710  ALSBlockData bd = { 0 };
1711  int b, ret;
1712  int *reverted_channels = ctx->reverted_channels;
1713  unsigned int offset = 0;
1714 
1715  for (c = 0; c < channels; c++)
1716  if (ctx->chan_data[c] < ctx->chan_data_buffer) {
1717  av_log(ctx->avctx, AV_LOG_ERROR, "Invalid channel data.\n");
1718  return AVERROR_INVALIDDATA;
1719  }
1720 
1721  memset(reverted_channels, 0, sizeof(*reverted_channels) * channels);
1722 
1723  bd.ra_block = ra_frame;
1724  bd.prev_raw_samples = ctx->prev_raw_samples;
1725 
1726  get_block_sizes(ctx, div_blocks, &bs_info);
1727 
1728  for (b = 0; b < ctx->num_blocks; b++) {
1729  bd.block_length = div_blocks[b];
1730  if (bd.block_length <= 0) {
1731  av_log(ctx->avctx, AV_LOG_WARNING,
1732  "Invalid block length %u in channel data!\n",
1733  bd.block_length);
1734  continue;
1735  }
1736 
1737  for (c = 0; c < channels; c++) {
1738  bd.const_block = ctx->const_block + c;
1739  bd.shift_lsbs = ctx->shift_lsbs + c;
1740  bd.opt_order = ctx->opt_order + c;
1741  bd.store_prev_samples = ctx->store_prev_samples + c;
1742  bd.use_ltp = ctx->use_ltp + c;
1743  bd.ltp_lag = ctx->ltp_lag + c;
1744  bd.ltp_gain = ctx->ltp_gain[c];
1745  bd.lpc_cof = ctx->lpc_cof[c];
1746  bd.quant_cof = ctx->quant_cof[c];
1747  bd.raw_samples = ctx->raw_samples[c] + offset;
1748  bd.raw_other = NULL;
1749 
1750  if ((ret = read_block(ctx, &bd)) < 0)
1751  return ret;
1752  if ((ret = read_channel_data(ctx, ctx->chan_data[c], c)) < 0)
1753  return ret;
1754  }
1755 
1756  for (c = 0; c < channels; c++) {
1757  ret = revert_channel_correlation(ctx, &bd, ctx->chan_data,
1758  reverted_channels, offset, c);
1759  if (ret < 0)
1760  return ret;
1761  }
1762  for (c = 0; c < channels; c++) {
1763  bd.const_block = ctx->const_block + c;
1764  bd.shift_lsbs = ctx->shift_lsbs + c;
1765  bd.opt_order = ctx->opt_order + c;
1766  bd.store_prev_samples = ctx->store_prev_samples + c;
1767  bd.use_ltp = ctx->use_ltp + c;
1768  bd.ltp_lag = ctx->ltp_lag + c;
1769  bd.ltp_gain = ctx->ltp_gain[c];
1770  bd.lpc_cof = ctx->lpc_cof[c];
1771  bd.quant_cof = ctx->quant_cof[c];
1772  bd.raw_samples = ctx->raw_samples[c] + offset;
1773 
1774  if ((ret = decode_block(ctx, &bd)) < 0)
1775  return ret;
1776 
1777  ctx->highest_decoded_channel = FFMAX(ctx->highest_decoded_channel, c);
1778  }
1779 
1780  memset(reverted_channels, 0, channels * sizeof(*reverted_channels));
1781  offset += div_blocks[b];
1782  bd.ra_block = 0;
1783  }
1784 
1785  // store carryover raw samples
1786  for (c = 0; c < channels; c++)
1787  memmove(ctx->raw_samples[c] - sconf->max_order,
1788  ctx->raw_samples[c] - sconf->max_order + sconf->frame_length,
1789  sizeof(*ctx->raw_samples[c]) * sconf->max_order);
1790  }
1791 
1792  if (sconf->floating) {
1793  read_diff_float_data(ctx, ra_frame);
1794  }
1795 
1796  if (get_bits_left(gb) < 0) {
1797  av_log(ctx->avctx, AV_LOG_ERROR, "Overread %d\n", -get_bits_left(gb));
1798  return AVERROR_INVALIDDATA;
1799  }
1800 
1801  return 0;
1802 }
1803 
1804 
1805 /** Decode an ALS frame.
1806  */
1808  int *got_frame_ptr, AVPacket *avpkt)
1809 {
1810  ALSDecContext *ctx = avctx->priv_data;
1811  ALSSpecificConfig *sconf = &ctx->sconf;
1812  const uint8_t *buffer = avpkt->data;
1813  int buffer_size = avpkt->size;
1814  int invalid_frame, ret;
1815  int channels = avctx->ch_layout.nb_channels;
1816  unsigned int c, sample, ra_frame, bytes_read, shift;
1817 
1818  if ((ret = init_get_bits8(&ctx->gb, buffer, buffer_size)) < 0)
1819  return ret;
1820 
1821  // In the case that the distance between random access frames is set to zero
1822  // (sconf->ra_distance == 0) no frame is treated as a random access frame.
1823  // For the first frame, if prediction is used, all samples used from the
1824  // previous frame are assumed to be zero.
1825  ra_frame = sconf->ra_distance && !(ctx->frame_id % sconf->ra_distance);
1826 
1827  // the last frame to decode might have a different length
1828  if (sconf->samples != 0xFFFFFFFF)
1829  ctx->cur_frame_length = FFMIN(sconf->samples - ctx->frame_id * (uint64_t) sconf->frame_length,
1830  sconf->frame_length);
1831  else
1832  ctx->cur_frame_length = sconf->frame_length;
1833 
1834  ctx->highest_decoded_channel = -1;
1835  // decode the frame data
1836  if ((invalid_frame = read_frame_data(ctx, ra_frame)) < 0)
1837  av_log(ctx->avctx, AV_LOG_WARNING,
1838  "Reading frame data failed. Skipping RA unit.\n");
1839 
1840  if (ctx->highest_decoded_channel == -1) {
1841  av_log(ctx->avctx, AV_LOG_WARNING,
1842  "No channel data decoded.\n");
1843  return AVERROR_INVALIDDATA;
1844  }
1845 
1846  ctx->frame_id++;
1847 
1848  /* get output buffer */
1849  frame->nb_samples = ctx->cur_frame_length;
1850  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1851  return ret;
1852 
1853  // transform decoded frame into output format
1854  #define INTERLEAVE_OUTPUT(bps) \
1855  { \
1856  int##bps##_t *dest = (int##bps##_t*)frame->data[0]; \
1857  int32_t *raw_samples = ctx->raw_samples[0]; \
1858  int raw_step = channels > 1 ? ctx->raw_samples[1] - raw_samples : 1; \
1859  shift = bps - ctx->avctx->bits_per_raw_sample; \
1860  if (!ctx->cs_switch) { \
1861  for (sample = 0; sample < ctx->cur_frame_length; sample++) \
1862  for (c = 0; c < channels; c++) \
1863  *dest++ = raw_samples[c*raw_step + sample] * (1U << shift); \
1864  } else { \
1865  for (sample = 0; sample < ctx->cur_frame_length; sample++) \
1866  for (c = 0; c < channels; c++) \
1867  *dest++ = raw_samples[sconf->chan_pos[c]*raw_step + sample] * (1U << shift);\
1868  } \
1869  }
1870 
1871  if (ctx->avctx->bits_per_raw_sample <= 16) {
1872  INTERLEAVE_OUTPUT(16)
1873  } else {
1874  INTERLEAVE_OUTPUT(32)
1875  }
1876 
1877  // update CRC
1878  if (sconf->crc_enabled && (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL))) {
1879  int swap = HAVE_BIGENDIAN != sconf->msb_first;
1880 
1881  if (ctx->avctx->bits_per_raw_sample == 24) {
1882  int32_t *src = (int32_t *)frame->data[0];
1883 
1884  for (sample = 0;
1885  sample < ctx->cur_frame_length * channels;
1886  sample++) {
1887  int32_t v;
1888 
1889  if (swap)
1890  v = av_bswap32(src[sample]);
1891  else
1892  v = src[sample];
1893  if (!HAVE_BIGENDIAN)
1894  v >>= 8;
1895 
1896  ctx->crc = av_crc(ctx->crc_table, ctx->crc, (uint8_t*)(&v), 3);
1897  }
1898  } else {
1899  uint8_t *crc_source;
1900 
1901  if (swap) {
1902  if (ctx->avctx->bits_per_raw_sample <= 16) {
1903  int16_t *src = (int16_t*) frame->data[0];
1904  int16_t *dest = (int16_t*) ctx->crc_buffer;
1905  for (sample = 0;
1906  sample < ctx->cur_frame_length * channels;
1907  sample++)
1908  *dest++ = av_bswap16(src[sample]);
1909  } else {
1910  ctx->bdsp.bswap_buf((uint32_t *) ctx->crc_buffer,
1911  (uint32_t *) frame->data[0],
1912  ctx->cur_frame_length * channels);
1913  }
1914  crc_source = ctx->crc_buffer;
1915  } else {
1916  crc_source = frame->data[0];
1917  }
1918 
1919  ctx->crc = av_crc(ctx->crc_table, ctx->crc, crc_source,
1920  ctx->cur_frame_length * channels *
1922  }
1923 
1924 
1925  // check CRC sums if this is the last frame
1926  if (ctx->cur_frame_length != sconf->frame_length &&
1927  ctx->crc_org != ctx->crc) {
1928  av_log(avctx, AV_LOG_ERROR, "CRC error.\n");
1929  if (avctx->err_recognition & AV_EF_EXPLODE)
1930  return AVERROR_INVALIDDATA;
1931  }
1932  }
1933 
1934  *got_frame_ptr = 1;
1935 
1936  bytes_read = invalid_frame ? buffer_size :
1937  (get_bits_count(&ctx->gb) + 7) >> 3;
1938 
1939  return bytes_read;
1940 }
1941 
1942 
1943 /** Uninitialize the ALS decoder.
1944  */
1946 {
1947  ALSDecContext *ctx = avctx->priv_data;
1948  int i;
1949 
1950  av_freep(&ctx->sconf.chan_pos);
1951 
1952  ff_bgmc_end(&ctx->bgmc_lut, &ctx->bgmc_lut_status);
1953 
1954  av_freep(&ctx->const_block);
1955  av_freep(&ctx->shift_lsbs);
1956  av_freep(&ctx->opt_order);
1957  av_freep(&ctx->store_prev_samples);
1958  av_freep(&ctx->use_ltp);
1959  av_freep(&ctx->ltp_lag);
1960  av_freep(&ctx->ltp_gain);
1961  av_freep(&ctx->ltp_gain_buffer);
1962  av_freep(&ctx->quant_cof);
1963  av_freep(&ctx->lpc_cof);
1964  av_freep(&ctx->quant_cof_buffer);
1965  av_freep(&ctx->lpc_cof_buffer);
1966  av_freep(&ctx->lpc_cof_reversed_buffer);
1967  av_freep(&ctx->prev_raw_samples);
1968  av_freep(&ctx->raw_samples);
1969  av_freep(&ctx->raw_buffer);
1970  av_freep(&ctx->chan_data);
1971  av_freep(&ctx->chan_data_buffer);
1972  av_freep(&ctx->reverted_channels);
1973  av_freep(&ctx->crc_buffer);
1974  if (ctx->mlz) {
1975  av_freep(&ctx->mlz->dict);
1976  av_freep(&ctx->mlz);
1977  }
1978  av_freep(&ctx->acf);
1979  av_freep(&ctx->last_acf_mantissa);
1980  av_freep(&ctx->shift_value);
1981  av_freep(&ctx->last_shift_value);
1982  if (ctx->raw_mantissa) {
1983  for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
1984  av_freep(&ctx->raw_mantissa[i]);
1985  }
1986  av_freep(&ctx->raw_mantissa);
1987  }
1988  av_freep(&ctx->larray);
1989  av_freep(&ctx->nbits);
1990 
1991  return 0;
1992 }
1993 
1994 
1995 /** Initialize the ALS decoder.
1996  */
1998 {
1999  unsigned int c;
2000  unsigned int channel_size;
2001  int num_buffers, ret;
2002  int channels;
2003  ALSDecContext *ctx = avctx->priv_data;
2004  ALSSpecificConfig *sconf = &ctx->sconf;
2005  ctx->avctx = avctx;
2006 
2007  if (!avctx->extradata) {
2008  av_log(avctx, AV_LOG_ERROR, "Missing required ALS extradata.\n");
2009  return AVERROR_INVALIDDATA;
2010  }
2011 
2012  if ((ret = read_specific_config(ctx)) < 0) {
2013  av_log(avctx, AV_LOG_ERROR, "Reading ALSSpecificConfig failed.\n");
2014  return ret;
2015  }
2016  channels = avctx->ch_layout.nb_channels;
2017 
2018  if ((ret = check_specific_config(ctx)) < 0) {
2019  return ret;
2020  }
2021 
2022  if (sconf->bgmc) {
2023  ret = ff_bgmc_init(avctx, &ctx->bgmc_lut, &ctx->bgmc_lut_status);
2024  if (ret < 0)
2025  return ret;
2026  }
2027  if (sconf->floating) {
2028  avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
2029  avctx->bits_per_raw_sample = 32;
2030  } else {
2031  avctx->sample_fmt = sconf->resolution > 1
2033  avctx->bits_per_raw_sample = (sconf->resolution + 1) * 8;
2034  if (avctx->bits_per_raw_sample > 32) {
2035  av_log(avctx, AV_LOG_ERROR, "Bits per raw sample %d larger than 32.\n",
2036  avctx->bits_per_raw_sample);
2037  return AVERROR_INVALIDDATA;
2038  }
2039  }
2040 
2041  // set maximum Rice parameter for progressive decoding based on resolution
2042  // This is not specified in 14496-3 but actually done by the reference
2043  // codec RM22 revision 2.
2044  ctx->s_max = sconf->resolution > 1 ? 31 : 15;
2045 
2046  // set lag value for long-term prediction
2047  ctx->ltp_lag_length = 8 + (avctx->sample_rate >= 96000) +
2048  (avctx->sample_rate >= 192000);
2049 
2050  // allocate quantized parcor coefficient buffer
2051  num_buffers = sconf->mc_coding ? channels : 1;
2052  if (num_buffers * (uint64_t)num_buffers > INT_MAX) // protect chan_data_buffer allocation
2053  return AVERROR_INVALIDDATA;
2054 
2055  ctx->quant_cof = av_malloc_array(num_buffers, sizeof(*ctx->quant_cof));
2056  ctx->lpc_cof = av_malloc_array(num_buffers, sizeof(*ctx->lpc_cof));
2057  ctx->quant_cof_buffer = av_malloc_array(num_buffers * sconf->max_order,
2058  sizeof(*ctx->quant_cof_buffer));
2059  ctx->lpc_cof_buffer = av_malloc_array(num_buffers * sconf->max_order,
2060  sizeof(*ctx->lpc_cof_buffer));
2061  ctx->lpc_cof_reversed_buffer = av_malloc_array(sconf->max_order,
2062  sizeof(*ctx->lpc_cof_buffer));
2063 
2064  if (!ctx->quant_cof || !ctx->lpc_cof ||
2065  !ctx->quant_cof_buffer || !ctx->lpc_cof_buffer ||
2066  !ctx->lpc_cof_reversed_buffer) {
2067  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2068  return AVERROR(ENOMEM);
2069  }
2070 
2071  // assign quantized parcor coefficient buffers
2072  for (c = 0; c < num_buffers; c++) {
2073  ctx->quant_cof[c] = ctx->quant_cof_buffer + c * sconf->max_order;
2074  ctx->lpc_cof[c] = ctx->lpc_cof_buffer + c * sconf->max_order;
2075  }
2076 
2077  // allocate and assign lag and gain data buffer for ltp mode
2078  ctx->const_block = av_malloc_array(num_buffers, sizeof(*ctx->const_block));
2079  ctx->shift_lsbs = av_malloc_array(num_buffers, sizeof(*ctx->shift_lsbs));
2080  ctx->opt_order = av_malloc_array(num_buffers, sizeof(*ctx->opt_order));
2081  ctx->store_prev_samples = av_malloc_array(num_buffers, sizeof(*ctx->store_prev_samples));
2082  ctx->use_ltp = av_calloc(num_buffers, sizeof(*ctx->use_ltp));
2083  ctx->ltp_lag = av_malloc_array(num_buffers, sizeof(*ctx->ltp_lag));
2084  ctx->ltp_gain = av_malloc_array(num_buffers, sizeof(*ctx->ltp_gain));
2085  ctx->ltp_gain_buffer = av_malloc_array(num_buffers * 5, sizeof(*ctx->ltp_gain_buffer));
2086 
2087  if (!ctx->const_block || !ctx->shift_lsbs ||
2088  !ctx->opt_order || !ctx->store_prev_samples ||
2089  !ctx->use_ltp || !ctx->ltp_lag ||
2090  !ctx->ltp_gain || !ctx->ltp_gain_buffer) {
2091  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2092  return AVERROR(ENOMEM);
2093  }
2094 
2095  for (c = 0; c < num_buffers; c++)
2096  ctx->ltp_gain[c] = ctx->ltp_gain_buffer + c * 5;
2097 
2098  // allocate and assign channel data buffer for mcc mode
2099  if (sconf->mc_coding) {
2100  ctx->chan_data_buffer = av_calloc(num_buffers * num_buffers,
2101  sizeof(*ctx->chan_data_buffer));
2102  ctx->chan_data = av_calloc(num_buffers, sizeof(*ctx->chan_data));
2103  ctx->reverted_channels = av_malloc_array(num_buffers,
2104  sizeof(*ctx->reverted_channels));
2105 
2106  if (!ctx->chan_data_buffer || !ctx->chan_data || !ctx->reverted_channels) {
2107  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2108  return AVERROR(ENOMEM);
2109  }
2110 
2111  for (c = 0; c < num_buffers; c++)
2112  ctx->chan_data[c] = ctx->chan_data_buffer + c * num_buffers;
2113  } else {
2114  ctx->chan_data = NULL;
2115  ctx->chan_data_buffer = NULL;
2116  ctx->reverted_channels = NULL;
2117  }
2118 
2119  if (sconf->floating) {
2120  ctx->acf = av_malloc_array(channels, sizeof(*ctx->acf));
2121  ctx->shift_value = av_calloc(channels, sizeof(*ctx->shift_value));
2122  ctx->last_shift_value = av_calloc(channels, sizeof(*ctx->last_shift_value));
2123  ctx->last_acf_mantissa = av_calloc(channels, sizeof(*ctx->last_acf_mantissa));
2124  ctx->raw_mantissa = av_calloc(channels, sizeof(*ctx->raw_mantissa));
2125 
2126  ctx->larray = av_malloc_array(ctx->cur_frame_length * 4, sizeof(*ctx->larray));
2127  ctx->nbits = av_malloc_array(ctx->cur_frame_length, sizeof(*ctx->nbits));
2128  ctx->mlz = av_mallocz(sizeof(*ctx->mlz));
2129 
2130  if (!ctx->larray || !ctx->nbits || !ctx->mlz || !ctx->acf || !ctx->shift_value
2131  || !ctx->last_shift_value || !ctx->last_acf_mantissa || !ctx->raw_mantissa) {
2132  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2133  return AVERROR(ENOMEM);
2134  }
2135 
2136  ret = ff_mlz_init_dict(avctx, ctx->mlz);
2137  if (ret < 0)
2138  return ret;
2139  ff_mlz_flush_dict(ctx->mlz);
2140 
2141  for (c = 0; c < channels; ++c) {
2142  ctx->raw_mantissa[c] = av_calloc(ctx->cur_frame_length, sizeof(**ctx->raw_mantissa));
2143  if (!ctx->raw_mantissa[c]) {
2144  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2145  return AVERROR(ENOMEM);
2146  }
2147  }
2148  }
2149 
2150  channel_size = sconf->frame_length + sconf->max_order;
2151 
2152  // allocate previous raw sample buffer
2153  ctx->prev_raw_samples = av_malloc_array(sconf->max_order, sizeof(*ctx->prev_raw_samples));
2154  ctx->raw_buffer = av_calloc(channels * channel_size, sizeof(*ctx->raw_buffer));
2155  ctx->raw_samples = av_malloc_array(channels, sizeof(*ctx->raw_samples));
2156  if (!ctx->prev_raw_samples || !ctx->raw_buffer|| !ctx->raw_samples) {
2157  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2158  return AVERROR(ENOMEM);
2159  }
2160 
2161  // assign raw samples buffers
2162  ctx->raw_samples[0] = ctx->raw_buffer + sconf->max_order;
2163  for (c = 1; c < channels; c++)
2164  ctx->raw_samples[c] = ctx->raw_samples[c - 1] + channel_size;
2165 
2166  // allocate crc buffer
2167  if (HAVE_BIGENDIAN != sconf->msb_first && sconf->crc_enabled &&
2169  ctx->crc_buffer = av_malloc_array(ctx->cur_frame_length *
2170  channels *
2172  sizeof(*ctx->crc_buffer));
2173  if (!ctx->crc_buffer) {
2174  av_log(avctx, AV_LOG_ERROR, "Allocating buffer memory failed.\n");
2175  return AVERROR(ENOMEM);
2176  }
2177  }
2178 
2179  ff_bswapdsp_init(&ctx->bdsp);
2180 
2181  return 0;
2182 }
2183 
2184 
2185 /** Flush (reset) the frame ID after seeking.
2186  */
2187 static av_cold void flush(AVCodecContext *avctx)
2188 {
2189  ALSDecContext *ctx = avctx->priv_data;
2190 
2191  ctx->frame_id = 0;
2192 }
2193 
2194 static const AVOption options[] = {
2195  { "max_order", "Sets the maximum order (ALS simple profile allows max 15)", offsetof(ALSDecContext, user_max_order), AV_OPT_TYPE_INT, { .i64 = 1023 }, 0, 1023, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM },
2196  { NULL }
2197 };
2198 
2199 static const AVClass als_class = {
2200  .class_name = "als",
2201  .item_name = av_default_item_name,
2202  .option = options,
2203  .version = LIBAVUTIL_VERSION_INT,
2204 };
2205 
2207  .p.name = "als",
2208  CODEC_LONG_NAME("MPEG-4 Audio Lossless Coding (ALS)"),
2209  .p.type = AVMEDIA_TYPE_AUDIO,
2210  .p.id = AV_CODEC_ID_MP4ALS,
2211  .priv_data_size = sizeof(ALSDecContext),
2212  .init = decode_init,
2213  .close = decode_end,
2215  .p.priv_class = &als_class,
2216  .flush = flush,
2217  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
2218  .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
2219 };
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
ALSDecContext::gb
GetBitContext gb
Definition: alsdec.c:201
ALSDecContext::mlz
MLZ * mlz
masked lz decompression structure
Definition: alsdec.c:235
ALSDecContext::avctx
AVCodecContext * avctx
Definition: alsdec.c:199
bswapdsp.h
skip_bits_long
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
Definition: get_bits.h:276
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
ALSDecContext::opt_order
unsigned int * opt_order
contains opt_order flags for all channels
Definition: alsdec.c:217
ALSDecContext::cur_frame_length
unsigned int cur_frame_length
length of the current frame to decode
Definition: alsdec.c:206
ALSDecContext::lpc_cof
int32_t ** lpc_cof
coefficients of the direct form prediction filter for a channel
Definition: alsdec.c:225
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
av_clip
#define av_clip
Definition: common.h:100
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: codec_internal.h:42
ALSDecContext::user_max_order
int user_max_order
user specified maximum prediction order
Definition: alsdec.c:244
AV_EF_CAREFUL
#define AV_EF_CAREFUL
consider things that violate the spec, are fast to calculate and have not been seen in the wild as er...
Definition: defs.h:54
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:689
r
const char * r
Definition: vf_curves.c:127
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
ALSDecContext::ltp_lag
int * ltp_lag
contains ltp lag values for all channels
Definition: alsdec.c:220
ALSDecContext::crc_org
uint32_t crc_org
CRC value of the original input data.
Definition: alsdec.c:204
ALSDecContext::reverted_channels
int * reverted_channels
stores a flag for each reverted channel
Definition: alsdec.c:230
ALSSpecificConfig::block_switching
int block_switching
number of block switching levels
Definition: alsdec.c:173
ff_bgmc_decode_init
int ff_bgmc_decode_init(GetBitContext *gb, unsigned int *h, unsigned int *l, unsigned int *v)
Initialize decoding and reads the first value.
Definition: bgmc.c:489
ALSDecContext::shift_value
int * shift_value
value by which the binary point is to be shifted for all channels
Definition: alsdec.c:238
ff_mlz_flush_dict
av_cold void ff_mlz_flush_dict(MLZ *mlz)
Flush the dictionary.
Definition: mlz.c:41
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1024
ALSSpecificConfig::msb_first
int msb_first
1 = original CRC calculated on big-endian system, 0 = little-endian
Definition: alsdec.c:165
ALSBlockData::raw_samples
int32_t * raw_samples
decoded raw samples / residuals for this block
Definition: alsdec.c:261
AVCRC
uint32_t AVCRC
Definition: crc.h:46
ALSDecContext::chan_data_buffer
ALSChannelData * chan_data_buffer
contains channel data for all channels
Definition: alsdec.c:229
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1398
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:419
decode_blocks
static int decode_blocks(ALSDecContext *ctx, unsigned int ra_frame, unsigned int c, const unsigned int *div_blocks, unsigned int *js_blocks)
Decode blocks dependently.
Definition: alsdec.c:1153
av_bits2sf_ieee754
static SoftFloat_IEEE754 av_bits2sf_ieee754(uint32_t n)
Make a softfloat out of the bitstream.
Definition: softfloat_ieee754.h:66
int64_t
long long int64_t
Definition: coverity.c:34
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Initialize the ALS decoder.
Definition: alsdec.c:1997
ALSBlockData::opt_order
unsigned int * opt_order
prediction order of this block
Definition: alsdec.c:254
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:250
options
static const AVOption options[]
Definition: alsdec.c:2194
ALSBlockData::ra_block
unsigned int ra_block
if true, this is a random access block
Definition: alsdec.c:250
mcc_weightings
static const int16_t mcc_weightings[]
Inter-channel weighting factors for multi-channel correlation.
Definition: alsdec.c:124
ALSDecContext::bgmc_lut
uint8_t * bgmc_lut
pointer at lookup tables used for BGMC
Definition: alsdec.c:212
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:421
ALSSpecificConfig::frame_length
int frame_length
frame length for each frame (last frame may differ)
Definition: alsdec.c:166
internal.h
AVPacket::data
uint8_t * data
Definition: packet.h:552
als_weighting
static int als_weighting(GetBitContext *gb, int k, int off)
Definition: alsdec.c:1237
AVOption
AVOption.
Definition: opt.h:429
b
#define b
Definition: input.c:42
read_decode_block
static int read_decode_block(ALSDecContext *ctx, ALSBlockData *bd)
Read and decode block data successively.
Definition: alsdec.c:1084
ALSSpecificConfig::resolution
int resolution
000 = 8-bit; 001 = 16-bit; 010 = 24-bit; 011 = 32-bit
Definition: alsdec.c:163
high
int high
Definition: dovi_rpuenc.c:39
FFCodec
Definition: codec_internal.h:127
read_diff_float_data
static int read_diff_float_data(ALSDecContext *ctx, unsigned int ra_frame)
Read and decode the floating point sample data.
Definition: alsdec.c:1465
ALSDecContext::chan_data
ALSChannelData ** chan_data
channel data for multi-channel correlation
Definition: alsdec.c:228
base
uint8_t base
Definition: vp3data.h:128
ALSDecContext::larray
unsigned char * larray
buffer to store the output of masked lz decompression
Definition: alsdec.c:241
max
#define max(a, b)
Definition: cuda_runtime.h:33
AVChannelLayout::order
enum AVChannelOrder order
Channel order used in this layout.
Definition: channel_layout.h:324
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
ALSBlockData
Definition: alsdec.c:248
ALSSpecificConfig::joint_stereo
int joint_stereo
joint stereo: 1 = on, 0 = off
Definition: alsdec.c:176
FLOAT_1
static const SoftFloat FLOAT_1
1.0
Definition: softfloat.h:41
ALSDecContext::cs_switch
unsigned int cs_switch
if true, channel rearrangement is done
Definition: alsdec.c:209
ALSDecContext::js_switch
unsigned int js_switch
if true, joint-stereo decoding is enforced
Definition: alsdec.c:208
ff_bgmc_end
av_cold void ff_bgmc_end(uint8_t **cf_lut, int **cf_lut_status)
Release the lookup table arrays.
Definition: bgmc.c:481
av_int2sf_ieee754
static SoftFloat_IEEE754 av_int2sf_ieee754(int64_t n, int e)
Convert integer to softfloat.
Definition: softfloat_ieee754.h:53
MPEG4AudioConfig
Definition: mpeg4audio.h:29
MLZ
MLZ data strucure.
Definition: mlz.h:47
crc.h
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:379
ALSSpecificConfig::ra_distance
int ra_distance
distance between RA frames (in frames, 0...255)
Definition: alsdec.c:167
close
static av_cold void close(AVCodecParserContext *s)
Definition: apv_parser.c:135
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:333
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
mpeg4audio.h
av_ceil_log2
#define av_ceil_log2
Definition: common.h:97
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:1039
read_var_block_data
static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
Read the block data for a non-constant block.
Definition: alsdec.c:647
fail
#define fail()
Definition: checkasm.h:199
ltp_gain_values
static const uint8_t ltp_gain_values[4][4]
Gain values of p(0) for long-term prediction.
Definition: alsdec.c:113
ALSBlockData::store_prev_samples
int * store_prev_samples
if true, carryover samples have to be stored
Definition: alsdec.c:255
GetBitContext
Definition: get_bits.h:109
samplefmt.h
ALSDecContext::const_block
int * const_block
contains const_block flags for all channels
Definition: alsdec.c:215
tab
static const struct twinvq_data tab
Definition: twinvq_data.h:10345
ALSDecContext::highest_decoded_channel
int highest_decoded_channel
Definition: alsdec.c:243
val
static double val(void *priv, double ch)
Definition: aeval.c:77
ALSDecContext::raw_buffer
int32_t * raw_buffer
contains all decoded raw samples including carryover samples
Definition: alsdec.c:233
ALSChannelData::time_diff_sign
int time_diff_sign
Definition: alsdec.c:191
ALSBlockData::ltp_gain
int * ltp_gain
gain values for ltp 5-tap filter
Definition: alsdec.c:258
ALSBlockData::raw_other
int32_t * raw_other
decoded raw samples of the other channel of a channel pair
Definition: alsdec.c:263
AV_OPT_FLAG_AUDIO_PARAM
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:357
ALSSpecificConfig::adapt_order
int adapt_order
adaptive order: 1 = on, 0 = off
Definition: alsdec.c:169
RA_FLAG_HEADER
@ RA_FLAG_HEADER
Definition: alsdec.c:157
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
ALSBlockData::shift_lsbs
unsigned int * shift_lsbs
shift of values for this block
Definition: alsdec.c:253
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:90
MISSING_ERR
#define MISSING_ERR(cond, str, errval)
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:539
revert_channel_correlation
static int revert_channel_correlation(ALSDecContext *ctx, ALSBlockData *bd, ALSChannelData **cd, int *reverted, unsigned int offset, int c)
Recursively reverts the inter-channel correlation for a block.
Definition: alsdec.c:1293
ALSSpecificConfig::chan_sort
int chan_sort
channel rearrangement: 1 = on, 0 = off
Definition: alsdec.c:179
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
avpriv_mpeg4audio_get_config2
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
Definition: mpeg4audio.c:165
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:341
ALSChannelData
Definition: alsdec.c:187
intreadwrite.h
ALSDecContext::ltp_lag_length
int ltp_lag_length
number of bits used for ltp lag value
Definition: alsdec.c:214
s
#define s(width, name)
Definition: cbs_vp9.c:198
zero_remaining
static void zero_remaining(unsigned int b, unsigned int b_max, const unsigned int *div_blocks, int32_t *buf)
Compute the number of samples left to decode for the current frame and sets these samples to zero.
Definition: alsdec.c:1098
ff_bgmc_decode
void ff_bgmc_decode(GetBitContext *gb, unsigned int num, int32_t *dst, int delta, unsigned int sx, unsigned int *h, unsigned int *l, unsigned int *v, uint8_t *cf_lut, int *cf_lut_status)
Read and decode a block Gilbert-Moore coded symbol.
Definition: bgmc.c:511
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:201
AV_CHANNEL_ORDER_UNSPEC
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
Definition: channel_layout.h:119
decode_const_block_data
static void decode_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
Decode the block data for a constant block.
Definition: alsdec.c:633
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:41
parcor_to_lpc
static void parcor_to_lpc(unsigned int k, const int32_t *par, int32_t *cof)
Convert PARCOR coefficient k to direct filter coefficient.
Definition: alsdec.c:530
AVCodecContext::bits_per_raw_sample
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:1553
av_cmp_sf_ieee754
static int av_cmp_sf_ieee754(SoftFloat_IEEE754 a, SoftFloat_IEEE754 b)
Compare a with b strictly.
Definition: softfloat_ieee754.h:106
ctx
AVFormatContext * ctx
Definition: movenc.c:49
channels
channels
Definition: aptx.h:31
decode.h
ALSDecContext::last_shift_value
int * last_shift_value
contains last shift value for all channels
Definition: alsdec.c:239
get_bits.h
ALSBlockData::ltp_lag
int * ltp_lag
lag value for long-term prediction
Definition: alsdec.c:257
multiply
static SoftFloat_IEEE754 multiply(SoftFloat_IEEE754 a, SoftFloat_IEEE754 b)
multiply two softfloats and handle the rounding off
Definition: alsdec.c:1406
ALSSpecificConfig::bgmc
int bgmc
"Block Gilbert-Moore Code": 1 = on, 0 = off (Rice coding only)
Definition: alsdec.c:174
ALSDecContext::ltp_gain_buffer
int * ltp_gain_buffer
contains all gain values for ltp 5-tap filter
Definition: alsdec.c:222
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:326
ALSDecContext::crc
uint32_t crc
CRC value calculated from decoded data.
Definition: alsdec.c:205
als_class
static const AVClass als_class
Definition: alsdec.c:2199
if
if(ret)
Definition: filter_design.txt:179
mlz.h
ALSChannelData::time_diff_flag
int time_diff_flag
Definition: alsdec.c:190
decode_end
static av_cold int decode_end(AVCodecContext *avctx)
Uninitialize the ALS decoder.
Definition: alsdec.c:1945
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
ALSBlockData::block_length
unsigned int block_length
number of samples within the block
Definition: alsdec.c:249
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
ff_bswapdsp_init
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
Definition: bswapdsp.c:49
PTRDIFF_SPECIFIER
#define PTRDIFF_SPECIFIER
Definition: internal.h:128
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
FLOAT_0
static const SoftFloat FLOAT_0
0.0
Definition: softfloat.h:39
ALSSpecificConfig::chan_config
int chan_config
indicates that a chan_config_info field is present
Definition: alsdec.c:178
check_specific_config
static int check_specific_config(ALSDecContext *ctx)
Check the ALSSpecificConfig for unsupported features.
Definition: alsdec.c:465
ALSDecContext::av_class
AVClass * av_class
Definition: alsdec.c:198
ALSDecContext::num_blocks
unsigned int num_blocks
number of blocks used in the current frame
Definition: alsdec.c:210
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:240
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:386
ALSSpecificConfig::chan_pos
int * chan_pos
original channel positions
Definition: alsdec.c:182
options
Definition: swscale.c:43
abs
#define abs(x)
Definition: cuda_runtime.h:35
ALSDecContext::bgmc_lut_status
int * bgmc_lut_status
pointer at lookup table status flags used for BGMC
Definition: alsdec.c:213
AV_EF_CRCCHECK
#define AV_EF_CRCCHECK
Verify checksums embedded in the bitstream (could be of either encoded or decoded data,...
Definition: defs.h:48
ALSSpecificConfig::long_term_prediction
int long_term_prediction
long term prediction (LTP): 1 = on, 0 = off
Definition: alsdec.c:171
AV_CODEC_ID_MP4ALS
@ AV_CODEC_ID_MP4ALS
Definition: codec_id.h:495
ALSSpecificConfig::ra_flag
enum RA_Flag ra_flag
indicates where the size of ra units is stored
Definition: alsdec.c:168
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
get_unary
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Definition: unary.h:46
read_block
static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
Read the block data.
Definition: alsdec.c:1031
tail_code
static const uint8_t tail_code[16][6]
Tail codes used in arithmetic coding using block Gilbert-Moore codes.
Definition: alsdec.c:134
parcor_scaled_values
static const int16_t parcor_scaled_values[]
Scaled PARCOR values used for the first two PARCOR coefficients.
Definition: alsdec.c:74
AV_CODEC_CAP_CHANNEL_CONF
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: codec.h:91
ff_dlog
#define ff_dlog(a,...)
Definition: tableprint_vlc.h:28
ff_bgmc_init
av_cold int ff_bgmc_init(void *logctx, uint8_t **cf_lut, int **cf_lut_status)
Initialize the lookup table arrays.
Definition: bgmc.c:461
ALSDecContext::s_max
unsigned int s_max
maximum Rice parameter allowed in entropy coding
Definition: alsdec.c:211
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1635
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
ALSDecContext::ltp_gain
int ** ltp_gain
gain values for ltp 5-tap filter for a channel
Definition: alsdec.c:221
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
ALSDecContext::nbits
int * nbits
contains the number of bits to read for masked lz decompression for all samples
Definition: alsdec.c:242
AVPacket::size
int size
Definition: packet.h:553
master
const char * master
Definition: vf_curves.c:130
codec_internal.h
read_const_block_data
static int read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
Read the block data for a constant block.
Definition: alsdec.c:603
ALSSpecificConfig::chan_config_info
int chan_config_info
mapping of channels to loudspeaker locations. Unused until setting channel configuration is implement...
Definition: alsdec.c:181
ALSDecContext::lpc_cof_buffer
int32_t * lpc_cof_buffer
contains all coefficients of the direct form prediction filter
Definition: alsdec.c:226
shift
static int shift(int a, int b)
Definition: bonk.c:261
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:87
av_bswap32
#define av_bswap32
Definition: bswap.h:47
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
RA_FLAG_NONE
@ RA_FLAG_NONE
Definition: alsdec.c:155
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1031
sample
#define sample
Definition: flacdsp_template.c:44
MKBETAG
#define MKBETAG(a, b, c, d)
Definition: macros.h:56
AV_RB32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
Definition: bytestream.h:96
EXP_BIAS
#define EXP_BIAS
Definition: softfloat_ieee754.h:26
ALSChannelData::time_diff_index
int time_diff_index
Definition: alsdec.c:192
ALSDecContext::shift_lsbs
unsigned int * shift_lsbs
contains shift_lsbs flags for all channels
Definition: alsdec.c:216
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
av_crc_get_table
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:374
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
ALSSpecificConfig::crc_enabled
int crc_enabled
enable Cyclic Redundancy Checksum
Definition: alsdec.c:183
ALSDecContext::use_ltp
int * use_ltp
contains use_ltp flags for all channels
Definition: alsdec.c:219
ALSSpecificConfig::floating
int floating
1 = IEEE 32-bit floating-point, 0 = integer
Definition: alsdec.c:164
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:411
unary.h
MPEG4AudioConfig::channels
int channels
Definition: mpeg4audio.h:39
ALSDecContext::store_prev_samples
int * store_prev_samples
contains store_prev_samples flags for all channels
Definition: alsdec.c:218
ALSChannelData::stop_flag
int stop_flag
Definition: alsdec.c:188
decode_blocks_ind
static int decode_blocks_ind(ALSDecContext *ctx, unsigned int ra_frame, unsigned int c, const unsigned int *div_blocks, unsigned int *js_blocks)
Decode blocks independently.
Definition: alsdec.c:1113
SoftFloat_IEEE754::mant
uint64_t mant
Definition: softfloat_ieee754.h:31
ALSBlockData::use_ltp
int * use_ltp
if true, long-term prediction is used
Definition: alsdec.c:256
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
av_get_bytes_per_sample
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition: samplefmt.c:108
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
ALSSpecificConfig::rlslms
int rlslms
use "Recursive Least Square-Least Mean Square" predictor: 1 = on, 0 = off
Definition: alsdec.c:180
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:32
bgmc.h
ALSDecContext::last_acf_mantissa
int * last_acf_mantissa
contains the last acf mantissa data of common multiplier for all channels
Definition: alsdec.c:237
ALSBlockData::quant_cof
int32_t * quant_cof
quantized parcor coefficients
Definition: alsdec.c:259
RA_Flag
RA_Flag
Definition: alsdec.c:154
delta
float delta
Definition: vorbis_enc_data.h:430
value
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
Definition: writing_filters.txt:86
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition: samplefmt.h:58
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
ALSDecContext::quant_cof
int32_t ** quant_cof
quantized parcor coefficients for a channel
Definition: alsdec.c:223
ALSDecContext::raw_mantissa
int ** raw_mantissa
decoded mantissa bits of the difference signal
Definition: alsdec.c:240
ALSDecContext
Definition: alsdec.c:197
ALSBlockData::lpc_cof
int32_t * lpc_cof
coefficients of the direct form prediction
Definition: alsdec.c:260
SoftFloat_IEEE754
Definition: softfloat_ieee754.h:29
av_calloc
void * av_calloc(size_t nmemb, size_t size)
Definition: mem.c:264
ALSChannelData::weighting
int weighting[6]
Definition: alsdec.c:193
ALSDecContext::prev_raw_samples
int32_t * prev_raw_samples
contains unshifted raw samples from the previous block
Definition: alsdec.c:231
avcodec.h
ALSSpecificConfig::sb_part
int sb_part
sub-block partition
Definition: alsdec.c:175
dprint_specific_config
static av_cold void dprint_specific_config(ALSDecContext *ctx)
Definition: alsdec.c:267
ALSDecContext::crc_buffer
uint8_t * crc_buffer
buffer of byte order corrected samples used for CRC check
Definition: alsdec.c:234
ret
ret
Definition: filter_design.txt:187
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:81
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:265
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:555
av_div_sf_ieee754
static SoftFloat_IEEE754 av_div_sf_ieee754(SoftFloat_IEEE754 a, SoftFloat_IEEE754 b)
Divide a by b.
Definition: softfloat_ieee754.h:80
left
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:386
U
#define U(x)
Definition: vpx_arith.h:37
ALSSpecificConfig
Definition: alsdec.c:161
decode_frame
static int decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Decode an ALS frame.
Definition: alsdec.c:1807
AVCodecContext
main external API structure.
Definition: avcodec.h:431
ALSSpecificConfig::coef_table
int coef_table
table index of Rice code parameters
Definition: alsdec.c:170
read_channel_data
static int read_channel_data(ALSDecContext *ctx, ALSChannelData *cd, int c)
Read the channel data.
Definition: alsdec.c:1246
buffer
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
Definition: filter_design.txt:49
ALSDecContext::bdsp
BswapDSPContext bdsp
Definition: alsdec.c:202
av_crc
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
Definition: crc.c:392
ALSDecContext::raw_samples
int32_t ** raw_samples
decoded raw samples for each channel
Definition: alsdec.c:232
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:259
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:442
ALSDecContext::lpc_cof_reversed_buffer
int32_t * lpc_cof_reversed_buffer
temporary buffer to set up a reversed versio of lpc_cof_buffer
Definition: alsdec.c:227
ALSDecContext::crc_table
const AVCRC * crc_table
Definition: alsdec.c:203
MUL64
#define MUL64(a, b)
Definition: mathops.h:54
decode_rice
static int32_t decode_rice(GetBitContext *gb, unsigned int k)
Read and decode a Rice codeword.
Definition: alsdec.c:512
ALSDecContext::quant_cof_buffer
int32_t * quant_cof_buffer
contains all quantized parcor coefficients
Definition: alsdec.c:224
flush
static av_cold void flush(AVCodecContext *avctx)
Flush (reset) the frame ID after seeking.
Definition: alsdec.c:2187
read_specific_config
static av_cold int read_specific_config(ALSDecContext *ctx)
Read an ALSSpecificConfig from a buffer into the output struct.
Definition: alsdec.c:297
ff_mlz_decompression
int ff_mlz_decompression(MLZ *mlz, GetBitContext *gb, int size, unsigned char *buff)
Run mlz decompression on the next size bits and the output will be stored in buff.
Definition: mlz.c:129
ALSBlockData::prev_raw_samples
int32_t * prev_raw_samples
contains unshifted raw samples from the previous block
Definition: alsdec.c:262
AV_CRC_32_IEEE_LE
@ AV_CRC_32_IEEE_LE
Definition: crc.h:53
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition: opt.h:356
ALSDecContext::sconf
ALSSpecificConfig sconf
Definition: alsdec.c:200
ALSSpecificConfig::samples
uint32_t samples
number of samples, 0xFFFFFFFF if unknown
Definition: alsdec.c:162
mem.h
get_bitsz
static av_always_inline int get_bitsz(GetBitContext *s, int n)
Read 0-25 bits.
Definition: get_bits.h:349
ALSBlockData::js_blocks
int js_blocks
true if this block contains a difference signal
Definition: alsdec.c:252
read_frame_data
static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame)
Read the frame data.
Definition: alsdec.c:1648
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:37
decode_var_block_data
static int decode_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
Decode the block data for a non-constant block.
Definition: alsdec.c:922
scale
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition: intra.c:273
ALSChannelData::master_channel
int master_channel
Definition: alsdec.c:189
INTERLEAVE_OUTPUT
#define INTERLEAVE_OUTPUT(bps)
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:458
AVPacket
This structure stores compressed data.
Definition: packet.h:529
ALSDecContext::frame_id
unsigned int frame_id
the frame ID / number of the current frame
Definition: alsdec.c:207
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
decode_block
static int decode_block(ALSDecContext *ctx, ALSBlockData *bd)
Decode the block data.
Definition: alsdec.c:1058
int32_t
int32_t
Definition: audioconvert.c:56
ff_mlz_init_dict
av_cold int ff_mlz_init_dict(void *context, MLZ *mlz)
Initialize the dictionary.
Definition: mlz.c:24
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
ff_bgmc_decode_end
void ff_bgmc_decode_end(GetBitContext *gb)
Finish decoding.
Definition: bgmc.c:504
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
BswapDSPContext
Definition: bswapdsp.h:24
SoftFloat_IEEE754::exp
int32_t exp
Definition: softfloat_ieee754.h:32
ALSSpecificConfig::max_order
int max_order
maximum prediction order (0..1023)
Definition: alsdec.c:172
FF_SANE_NB_CHANNELS
#define FF_SANE_NB_CHANNELS
Definition: internal.h:37
get_sbits_long
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
Definition: get_bits.h:469
av_bswap16
#define av_bswap16
Definition: bswap.h:28
AV_SAMPLE_FMT_S32
@ AV_SAMPLE_FMT_S32
signed 32 bits
Definition: samplefmt.h:59
ALSDecContext::acf
SoftFloat_IEEE754 * acf
contains common multiplier for all channels
Definition: alsdec.c:236
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
ALSSpecificConfig::mc_coding
int mc_coding
extended inter-channel coding (multi channel coding): 1 = on, 0 = off
Definition: alsdec.c:177
get_block_sizes
static void get_block_sizes(ALSDecContext *ctx, unsigned int *div_blocks, uint32_t *bs_info)
Read block switching field if necessary and set actual block sizes.
Definition: alsdec.c:550
AV_SAMPLE_FMT_FLT
@ AV_SAMPLE_FMT_FLT
float
Definition: samplefmt.h:60
ff_als_decoder
const FFCodec ff_als_decoder
Definition: alsdec.c:2206
src
#define src
Definition: vp8dsp.c:248
parse_bs_info
static void parse_bs_info(const uint32_t bs_info, unsigned int n, unsigned int div, unsigned int **div_blocks, unsigned int *num_blocks)
Parse the bs_info field to extract the block partitioning used in block switching mode,...
Definition: alsdec.c:489
parcor_rice_table
static const int8_t parcor_rice_table[3][20][2]
Rice parameters and corresponding index offsets for decoding the indices of scaled PARCOR values.
Definition: alsdec.c:53
softfloat_ieee754.h
MPEG4AudioConfig::sample_rate
int sample_rate
Definition: mpeg4audio.h:32
RA_FLAG_FRAMES
@ RA_FLAG_FRAMES
Definition: alsdec.c:156
ALSBlockData::const_block
int * const_block
if true, this is a constant value block
Definition: alsdec.c:251
SoftFloat_IEEE754::sign
int32_t sign
Definition: softfloat_ieee754.h:30