changeset 7597:7060f0338be3 libavcodec

G.729 decoder main code (just skeleton, contains only parts, explicitly ok'ed by Michael)
author voroshil
date Sun, 17 Aug 2008 08:43:37 +0000
parents ab454e7f1c35
children 60dd0089cdba
files g729.h g729dec.c
diffstat 2 files changed, 104 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g729.h	Sun Aug 17 08:43:37 2008 +0000
@@ -0,0 +1,52 @@
+/*
+ * G.729 decoder
+ * Copyright (c) 2008 Vladimir Voroshilov
+ *
+ * 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 FFMPEG_G729_H
+#define FFMPEG_G729_H
+
+#include <stdint.h>
+
+/// Moving Average (MA) prediction order
+#define MA_NP                      4
+
+/**
+ * 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
+
+/**
+ * maximum possible subframe size
+ */
+#define MAX_SUBFRAME_SIZE 44
+
+#endif // FFMPEG_G729_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g729dec.c	Sun Aug 17 08:43:37 2008 +0000
@@ -0,0 +1,52 @@
+/*
+ * G.729 decoder
+ * Copyright (c) 2008 Vladimir Voroshilov
+ *
+ * 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
+ */
+#include <stdlib.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <assert.h>
+
+#include "avcodec.h"
+#include "libavutil/avutil.h"
+#include "bitstream.h"
+
+/**
+ * \brief pseudo random number generator
+ */
+static inline uint16_t g729_random(uint16_t value)
+{
+    return 31821 * value + 13849;
+}
+
+AVCodec g729_decoder =
+{
+    "g729",
+    CODEC_TYPE_AUDIO,
+    CODEC_ID_G729,
+    sizeof(G729_Context),
+    ff_g729_decoder_init,
+    NULL,
+    NULL,
+    ff_g729_decode_frame,
+    .long_name = NULL_IF_CONFIG_SMALL("G.729"),
+};