[FFmpeg-devel] [PATCH 1/2][RFC] avcodec/g729dec: move definitions to header file

Paul B Mahol onemda at gmail.com
Tue Aug 11 09:03:34 CEST 2015


Dana 11. 8. 2015. 03:51 osoba "Ganesh Ajjanagadde" <gajjanagadde at gmail.com>
napisala je:
>
> Moves structure definitions and related macros to g729dec.h
> Also exports format in priv_data
>
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  libavcodec/g729dec.c | 111 ++---------------------------------------
>  libavcodec/g729dec.h | 138
+++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 141 insertions(+), 108 deletions(-)
>  create mode 100644 libavcodec/g729dec.h
>
> diff --git a/libavcodec/g729dec.c b/libavcodec/g729dec.c
> index 99053ad..e5b2de0 100644
> --- a/libavcodec/g729dec.c
> +++ b/libavcodec/g729dec.c
> @@ -30,6 +30,7 @@
>
>
>  #include "g729.h"
> +#include "g729dec.h"
>  #include "lsp.h"
>  #include "celp_math.h"
>  #include "celp_filters.h"
> @@ -39,57 +40,6 @@
>  #include "g729data.h"
>  #include "g729postfilter.h"
>
> -/**
> - * minimum quantized LSF value (3.2.4)
> - * 0.005 in Q13
> - */
> -#define LSFQ_MIN                   40
> -
> -/**
> - * maximum quantized LSF value (3.2.4)
> - * 3.135 in Q13
> - */
> -#define LSFQ_MAX                   25681
> -
> -/**
> - * minimum LSF distance (3.2.4)
> - * 0.0391 in Q13
> - */
> -#define LSFQ_DIFF_MIN              321
> -
> -/// interpolation filter length
> -#define INTERPOL_LEN              11
> -
> -/**
> - * minimum gain pitch value (3.8, Equation 47)
> - * 0.2 in (1.14)
> - */
> -#define SHARP_MIN                  3277
> -
> -/**
> - * maximum gain pitch value (3.8, Equation 47)
> - * (EE) This does not comply with the specification.
> - * Specification says about 0.8, which should be
> - * 13107 in (1.14), but reference C code uses
> - * 13017 (equals to 0.7945) instead of it.
> - */
> -#define SHARP_MAX                  13017
> -
> -/**
> - * MR_ENERGY (mean removed energy) = mean_energy + 10 * log10(2^26  *
subframe_size) in (7.13)
> - */
> -#define MR_ENERGY 1018156
> -
> -#define DECISION_NOISE        0
> -#define DECISION_INTERMEDIATE 1
> -#define DECISION_VOICE        2
> -
> -typedef enum {
> -    FORMAT_G729_8K = 0,
> -    FORMAT_G729D_6K4,
> -    FORMAT_COUNT,
> -} G729Formats;
> -
>  typedef struct {
>      uint8_t ac_index_bits[2];   ///< adaptive codebook index for second
subframe (size in bits)
>      uint8_t parity_bit;         ///< parity bit for pitch delay
> @@ -99,61 +49,6 @@ typedef struct {
>      uint8_t fc_indexes_bits;    ///< size (in bits) of fixed-codebook
index entry
>  } G729FormatDescription;
>
> -typedef struct {
> -    AudioDSPContext adsp;
> -
> -    /// past excitation signal buffer
> -    int16_t exc_base[2*SUBFRAME_SIZE+PITCH_DELAY_MAX+INTERPOL_LEN];
> -
> -    int16_t* exc;               ///< start of past excitation data in
buffer
> -    int pitch_delay_int_prev;   ///< integer part of previous subframe's
pitch delay (4.1.3)
> -
> -    /// (2.13) LSP quantizer outputs
> -    int16_t  past_quantizer_output_buf[MA_NP + 1][10];
> -    int16_t* past_quantizer_outputs[MA_NP + 1];
> -
> -    int16_t lsfq[10];           ///< (2.13) quantized LSF coefficients
from previous frame
> -    int16_t lsp_buf[2][10];     ///< (0.15) LSP coefficients (previous
and current frames) (3.2.5)
> -    int16_t *lsp[2];            ///< pointers to lsp_buf
> -
> -    int16_t quant_energy[4];    ///< (5.10) past quantized energy
> -
> -    /// previous speech data for LP synthesis filter
> -    int16_t syn_filter_data[10];
> -
> -
> -    /// residual signal buffer (used in long-term postfilter)
> -    int16_t residual[SUBFRAME_SIZE + RES_PREV_DATA_SIZE];
> -
> -    /// previous speech data for residual calculation filter
> -    int16_t res_filter_data[SUBFRAME_SIZE+10];
> -
> -    /// previous speech data for short-term postfilter
> -    int16_t pos_filter_data[SUBFRAME_SIZE+10];
> -
> -    /// (1.14) pitch gain of current and five previous subframes
> -    int16_t past_gain_pitch[6];
> -
> -    /// (14.1) gain code from current and previous subframe
> -    int16_t past_gain_code[2];
> -
> -    /// voice decision on previous subframe (0-noise, 1-intermediate,
2-voice), G.729D
> -    int16_t voice_decision;
> -
> -    int16_t onset;              ///< detected onset level (0-2)
> -    int16_t was_periodic;       ///< whether previous frame was declared
as periodic or not (4.4)
> -    int16_t ht_prev_data;       ///< previous data for 4.2.3, equation 86
> -    int gain_coeff;             ///< (1.14) gain coefficient (4.2.4)
> -    uint16_t rand_value;        ///< random number generator value
(4.4.4)
> -    int ma_predictor_prev;      ///< switched MA predictor of LSP
quantizer from last good frame
> -
> -    /// (14.14) high-pass filter data (past input)
> -    int hpf_f[2];
> -
> -    /// high-pass filter data (past output)
> -    int16_t hpf_z[2];
> -}  G729Context;
> -
>  static const G729FormatDescription format_g729_8k = {
>      .ac_index_bits     = {8,5},
>      .parity_bit        = 1,
> @@ -422,14 +317,14 @@ static int decode_frame(AVCodecContext *avctx, void
*data, int *got_frame_ptr,
>      out_frame = (int16_t*) frame->data[0];
>
>      if (buf_size % 10 == 0) {
> -        packet_type = FORMAT_G729_8K;
> +        ctx->format = packet_type = FORMAT_G729_8K;
>          format = &format_g729_8k;
>          //Reset voice decision
>          ctx->onset = 0;
>          ctx->voice_decision = DECISION_VOICE;
>          av_log(avctx, AV_LOG_DEBUG, "Packet type: %s\n", "G.729 @
8kbit/s");
>      } else if (buf_size == 8) {
> -        packet_type = FORMAT_G729D_6K4;
> +        ctx->format = packet_type = FORMAT_G729D_6K4;
>          format = &format_g729d_6k4;
>          av_log(avctx, AV_LOG_DEBUG, "Packet type: %s\n", "G.729D @
6.4kbit/s");
>      } else {
> diff --git a/libavcodec/g729dec.h b/libavcodec/g729dec.h
> new file mode 100644
> index 0000000..06cbebf
> --- /dev/null
> +++ b/libavcodec/g729dec.h
> @@ -0,0 +1,138 @@
> +/*
> + * G.729 decoder
> + * Copyright (C) 2015 Ganesh Ajjanagadde

Unacceptable, moving things around can not give you right to do this.

> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg 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,
> + * 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
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
> + */
> +
> +#ifndef AVCODEC_G729DEC_H
> +#define AVCODEC_G729DEC_H
> +
> +#include "acelp_pitch_delay.h"
> +#include "g729data.h"
> +#include "g729postfilter.h"
> +
> +typedef enum {
> +    FORMAT_G729_8K = 0,
> +    FORMAT_G729D_6K4,
> +    FORMAT_COUNT,
> +} G729Formats;
> +
> +/**
> + * minimum quantized LSF value (3.2.4)
> + * 0.005 in Q13
> + */
> +#define LSFQ_MIN                   40
> +
> +/**
> + * maximum quantized LSF value (3.2.4)
> + * 3.135 in Q13
> + */
> +#define LSFQ_MAX                   25681
> +
> +/**
> + * minimum LSF distance (3.2.4)
> + * 0.0391 in Q13
> + */
> +#define LSFQ_DIFF_MIN              321
> +
> +/// interpolation filter length
> +#define INTERPOL_LEN              11
> +
> +/**
> + * minimum gain pitch value (3.8, Equation 47)
> + * 0.2 in (1.14)
> + */
> +#define SHARP_MIN                  3277
> +
> +/**
> + * maximum gain pitch value (3.8, Equation 47)
> + * (EE) This does not comply with the specification.
> + * Specification says about 0.8, which should be
> + * 13107 in (1.14), but reference C code uses
> + * 13017 (equals to 0.7945) instead of it.
> + */
> +#define SHARP_MAX                  13017
> +
> +/**
> + * MR_ENERGY (mean removed energy) = mean_energy + 10 * log10(2^26  *
subframe_size) in (7.13)
> + */
> +#define MR_ENERGY 1018156
> +
> +#define DECISION_NOISE        0
> +#define DECISION_INTERMEDIATE 1
> +#define DECISION_VOICE        2
> +
> +typedef struct {
> +    AudioDSPContext adsp;
> +
> +    /// past excitation signal buffer
> +    int16_t exc_base[2*SUBFRAME_SIZE+PITCH_DELAY_MAX+INTERPOL_LEN];
> +
> +    int16_t* exc;               ///< start of past excitation data in
buffer
> +    int pitch_delay_int_prev;   ///< integer part of previous subframe's
pitch delay (4.1.3)
> +
> +    /// (2.13) LSP quantizer outputs
> +    int16_t  past_quantizer_output_buf[MA_NP + 1][10];
> +    int16_t* past_quantizer_outputs[MA_NP + 1];
> +
> +    int16_t lsfq[10];           ///< (2.13) quantized LSF coefficients
from previous frame
> +    int16_t lsp_buf[2][10];     ///< (0.15) LSP coefficients (previous
and current frames) (3.2.5)
> +    int16_t *lsp[2];            ///< pointers to lsp_buf
> +
> +    int16_t quant_energy[4];    ///< (5.10) past quantized energy
> +
> +    /// previous speech data for LP synthesis filter
> +    int16_t syn_filter_data[10];
> +
> +
> +    /// residual signal buffer (used in long-term postfilter)
> +    int16_t residual[SUBFRAME_SIZE + RES_PREV_DATA_SIZE];
> +
> +    /// previous speech data for residual calculation filter
> +    int16_t res_filter_data[SUBFRAME_SIZE+10];
> +
> +    /// previous speech data for short-term postfilter
> +    int16_t pos_filter_data[SUBFRAME_SIZE+10];
> +
> +    /// (1.14) pitch gain of current and five previous subframes
> +    int16_t past_gain_pitch[6];
> +
> +    /// (14.1) gain code from current and previous subframe
> +    int16_t past_gain_code[2];
> +
> +    /// voice decision on previous subframe (0-noise, 1-intermediate,
2-voice), G.729D
> +    int16_t voice_decision;
> +
> +    int16_t onset;              ///< detected onset level (0-2)
> +    int16_t was_periodic;       ///< whether previous frame was declared
as periodic or not (4.4)
> +    int16_t ht_prev_data;       ///< previous data for 4.2.3, equation 86
> +    int gain_coeff;             ///< (1.14) gain coefficient (4.2.4)
> +    uint16_t rand_value;        ///< random number generator value
(4.4.4)
> +    int ma_predictor_prev;      ///< switched MA predictor of LSP
quantizer from last good frame
> +
> +    /// (14.14) high-pass filter data (past input)
> +    int hpf_f[2];
> +
> +    /// high-pass filter data (past output)
> +    int16_t hpf_z[2];
> +
> +    /// format type
> +    G729Formats format;
> +} G729Context;
> +
> +#endif /* AVCODEC_G729DEC_H */
> --
> 2.5.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list