X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fqcelpdata.h;h=582229934834168dfa5570e558770cc7b97d9398;hb=03e5d6118c239edc0f420d8912454d8b37f789f3;hp=9d249d901ee31d3bb5924619a88a9d3f4e09ad3a;hpb=4b5f19074e72dff7622e2eddd3d95bfd080836a9;p=ffmpeg diff --git a/libavcodec/qcelpdata.h b/libavcodec/qcelpdata.h index 9d249d901ee..58222993483 100644 --- a/libavcodec/qcelpdata.h +++ b/libavcodec/qcelpdata.h @@ -2,20 +2,20 @@ * QCELP decoder * Copyright (c) 2007 Reynaldo H. Verdejo Pinochet * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -23,16 +23,48 @@ #define AVCODEC_QCELPDATA_H /** - * @file qcelpdata.h + * @file * Data tables for the QCELP decoder * @author Reynaldo H. Verdejo Pinochet - * @remark FFmpeg merging spearheaded by Kenan Gillet + * @remark Libav merging spearheaded by Kenan Gillet + * @remark Development mentored by Benjamin Larson */ #include #include #include "libavutil/common.h" +/** + * QCELP unpacked data frame + */ +typedef struct { +/// @name QCELP excitation codebook parameters +/// @{ + uint8_t cbsign[16]; ///!< sign of the codebook gain for each codebook subframe + uint8_t cbgain[16]; ///!< unsigned codebook gain for each codebook subframe + uint8_t cindex[16]; ///!< codebook index for each codebook subframe +/// @} + +/// @name QCELP pitch prediction parameters +/// @{ + uint8_t plag[4]; ///!< pitch lag for each pitch subframe + uint8_t pfrac[4]; ///!< fractional pitch lag for each pitch subframe + uint8_t pgain[4]; ///!< pitch gain for each pitch subframe +/// @} + + /** + * line spectral pair frequencies (LSP) for RATE_OCTAVE, + * line spectral pair frequencies grouped into five vectors + * of dimension two (LSPV) for other rates + */ + uint8_t lspv[10]; + + /** + * reserved bits only present in bitrate 1, 1/4 and 1/8 packets + */ + uint8_t reserved; +} QCELPFrame; + /** * pre-calculated table for hammsinc function * Only half of the table is needed because of symmetry. @@ -42,12 +74,12 @@ static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; typedef struct { - uint8_t index; /*!< index into the QCELPContext structure */ - uint8_t bitpos; /*!< position of the lowest bit in the value's byte */ - uint8_t bitlen; /*!< number of bits to read */ + uint8_t index; /**< index into the QCELPContext structure */ + uint8_t bitpos; /**< position of the lowest bit in the value's byte */ + uint8_t bitlen; /**< number of bits to read */ } QCELPBitmap; -#define QCELP_OF(variable, bit, len) {offsetof(QCELPContext, variable), bit, len} +#define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len} /** * bitmap unpacking tables for RATE_FULL @@ -241,7 +273,7 @@ static const QCELPBitmap * const qcelp_unpacking_bitmaps_per_rate[5] = { qcelp_rate_full_bitmap, }; -static const uint16_t qcelp_bits_per_rate[5] = { +static const uint16_t qcelp_unpacking_bitmaps_lengths[5] = { 0, ///!< for SILENCE rate FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap), FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap), @@ -392,16 +424,6 @@ static const qcelp_vector * const qcelp_lspvq[5] = { */ #define QCELP_SCALE 8192. -/** - * the upper boundary of the clipping, depends on QCELP_SCALE - */ -#define QCELP_CLIP_UPPER_BOUND (8191.75/8192.) - -/** - * the lower boundary of the clipping, depends on QCELP_SCALE - */ -#define QCELP_CLIP_LOWER_BOUND -1. - /** * table for computing Ga (decoded linear codebook gain magnitude) * @@ -518,4 +540,13 @@ static const double qcelp_rnd_fir_coefs[11] = { */ #define QCELP_LSP_OCTAVE_PREDICTOR 29.0/32 +/** + * initial coefficient to perform bandwidth expansion on LPC + * + * @note: 0.9883 looks like an approximation of 253/256. + * + * TIA/EIA/IS-733 2.4.3.3.6 6 + */ +#define QCELP_BANDWIDTH_EXPANSION_COEFF 0.9883 + #endif /* AVCODEC_QCELPDATA_H */