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

Ganesh Ajjanagadde gajjanagadde at gmail.com
Tue Aug 11 03:51:14 CEST 2015


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
+ *
+ * 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



More information about the ffmpeg-devel mailing list