Mercurial > libavcodec.hg
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"), +};