1 /* 2 * Copyright (C) 2016 foo86 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVCODEC_DCA_XLL_H 22 #define AVCODEC_DCA_XLL_H 23 24 #include "libavutil/mem_internal.h" 25 26 #include "avcodec.h" 27 #include "get_bits.h" 28 #include "dca.h" 29 #include "dcadsp.h" 30 #include "dca_exss.h" 31 32 #define DCA_XLL_CHSETS_MAX 3 33 #define DCA_XLL_CHANNELS_MAX 8 34 #define DCA_XLL_BANDS_MAX 2 35 #define DCA_XLL_ADAPT_PRED_ORDER_MAX 16 36 #define DCA_XLL_DECI_HISTORY_MAX 8 37 #define DCA_XLL_DMIX_SCALES_MAX ((DCA_XLL_CHSETS_MAX - 1) * DCA_XLL_CHANNELS_MAX) 38 #define DCA_XLL_DMIX_COEFFS_MAX (DCA_XLL_DMIX_SCALES_MAX * DCA_XLL_CHANNELS_MAX) 39 #define DCA_XLL_PBR_BUFFER_MAX (240 << 10) 40 #define DCA_XLL_SAMPLE_BUFFERS_MAX 3 41 42 typedef struct DCAXllBand { 43 int decor_enabled; ///< Pairwise channel decorrelation flag 44 int orig_order[DCA_XLL_CHANNELS_MAX]; ///< Original channel order 45 int decor_coeff[DCA_XLL_CHANNELS_MAX / 2]; ///< Pairwise channel coefficients 46 47 int adapt_pred_order[DCA_XLL_CHANNELS_MAX]; ///< Adaptive predictor order 48 int highest_pred_order; ///< Highest adaptive predictor order 49 int fixed_pred_order[DCA_XLL_CHANNELS_MAX]; ///< Fixed predictor order 50 int adapt_refl_coeff[DCA_XLL_CHANNELS_MAX][DCA_XLL_ADAPT_PRED_ORDER_MAX]; ///< Adaptive predictor reflection coefficients 51 52 int dmix_embedded; ///< Downmix performed by encoder in frequency band 53 54 int lsb_section_size; ///< Size of LSB section in any segment 55 int nscalablelsbs[DCA_XLL_CHANNELS_MAX]; ///< Number of bits to represent the samples in LSB part 56 int bit_width_adjust[DCA_XLL_CHANNELS_MAX]; ///< Number of bits discarded by authoring 57 58 int32_t *msb_sample_buffer[DCA_XLL_CHANNELS_MAX]; ///< MSB sample buffer pointers 59 int32_t *lsb_sample_buffer[DCA_XLL_CHANNELS_MAX]; ///< LSB sample buffer pointers or NULL 60 } DCAXllBand; 61 62 typedef struct DCAXllChSet { 63 // Channel set header 64 int nchannels; ///< Number of channels in the channel set (N) 65 int residual_encode; ///< Residual encoding mask (0 - residual, 1 - full channel) 66 int pcm_bit_res; ///< PCM bit resolution (variable) 67 int storage_bit_res; ///< Storage bit resolution (16 or 24) 68 int freq; ///< Original sampling frequency (max. 96000 Hz) 69 70 int primary_chset; ///< Primary channel set flag 71 int dmix_coeffs_present; ///< Downmix coefficients present in stream 72 int dmix_embedded; ///< Downmix already performed by encoder 73 int dmix_type; ///< Primary channel set downmix type 74 int hier_chset; ///< Whether the channel set is part of a hierarchy 75 int hier_ofs; ///< Number of preceding channels in a hierarchy (M) 76 int dmix_coeff[DCA_XLL_DMIX_COEFFS_MAX]; ///< Downmixing coefficients 77 int dmix_scale[DCA_XLL_DMIX_SCALES_MAX]; ///< Downmixing scales 78 int dmix_scale_inv[DCA_XLL_DMIX_SCALES_MAX]; ///< Inverse downmixing scales 79 int ch_mask; ///< Channel mask for set 80 int ch_remap[DCA_XLL_CHANNELS_MAX]; ///< Channel to speaker map 81 82 int nfreqbands; ///< Number of frequency bands (1 or 2) 83 int nabits; ///< Number of bits to read bit allocation coding parameter 84 85 DCAXllBand bands[DCA_XLL_BANDS_MAX]; ///< Frequency bands 86 87 // Frequency band coding parameters 88 int seg_common; ///< Segment type 89 int rice_code_flag[DCA_XLL_CHANNELS_MAX]; ///< Rice coding flag 90 int bitalloc_hybrid_linear[DCA_XLL_CHANNELS_MAX]; ///< Binary code length for isolated samples 91 int bitalloc_part_a[DCA_XLL_CHANNELS_MAX]; ///< Coding parameter for part A of segment 92 int bitalloc_part_b[DCA_XLL_CHANNELS_MAX]; ///< Coding parameter for part B of segment 93 int nsamples_part_a[DCA_XLL_CHANNELS_MAX]; ///< Number of samples in part A of segment 94 95 // Decimator history 96 DECLARE_ALIGNED(32, int32_t, deci_history)[DCA_XLL_CHANNELS_MAX][DCA_XLL_DECI_HISTORY_MAX]; ///< Decimator history for frequency band 1 97 98 // Sample buffers 99 unsigned int sample_size[DCA_XLL_SAMPLE_BUFFERS_MAX]; 100 int32_t *sample_buffer[DCA_XLL_SAMPLE_BUFFERS_MAX]; 101 } DCAXllChSet; 102 103 typedef struct DCAXllDecoder { 104 AVCodecContext *avctx; 105 GetBitContext gb; 106 107 int frame_size; ///< Number of bytes in a lossless frame 108 int nchsets; ///< Number of channels sets per frame 109 int nframesegs; ///< Number of segments per frame 110 int nsegsamples_log2; ///< log2(nsegsamples) 111 int nsegsamples; ///< Samples in segment per one frequency band 112 int nframesamples_log2; ///< log2(nframesamples) 113 int nframesamples; ///< Samples in frame per one frequency band 114 int seg_size_nbits; ///< Number of bits used to read segment size 115 int band_crc_present; ///< Presence of CRC16 within each frequency band 116 int scalable_lsbs; ///< MSB/LSB split flag 117 int ch_mask_nbits; ///< Number of bits used to read channel mask 118 int fixed_lsb_width; ///< Fixed LSB width 119 120 DCAXllChSet chset[DCA_XLL_CHSETS_MAX]; ///< Channel sets 121 122 int *navi; ///< NAVI table 123 unsigned int navi_size; 124 125 int nfreqbands; ///< Highest number of frequency bands 126 int nchannels; ///< Total number of channels in a hierarchy 127 int nreschsets; ///< Number of channel sets that have residual encoded channels 128 int nactivechsets; ///< Number of active channel sets to decode 129 130 int hd_stream_id; ///< Previous DTS-HD stream ID for detecting changes 131 132 uint8_t *pbr_buffer; ///< Peak bit rate (PBR) smoothing buffer 133 int pbr_length; ///< Length in bytes of data currently buffered 134 int pbr_delay; ///< Delay in frames before decoding buffered data 135 136 DCADSPContext *dcadsp; 137 138 int output_mask; 139 int32_t *output_samples[DCA_SPEAKER_COUNT]; 140 } DCAXllDecoder; 141 142 int ff_dca_xll_parse(DCAXllDecoder *s, const uint8_t *data, DCAExssAsset *asset); 143 int ff_dca_xll_filter_frame(DCAXllDecoder *s, AVFrame *frame); 144 av_cold void ff_dca_xll_flush(DCAXllDecoder *s); 145 av_cold void ff_dca_xll_close(DCAXllDecoder *s); 146 147 #endif 148