mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-30 19:34:43 +00:00
libgsm warper by (Alban Bedel: albeu, free fr)
Originally committed as revision 4302 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
cefe0607dd
commit
bb4c2140c2
10
configure
vendored
10
configure
vendored
@ -22,6 +22,7 @@ echo " --enable-theora enable theora support via libtheora [default=no
|
|||||||
echo " --enable-faad enable faad support via libfaad [default=no]"
|
echo " --enable-faad enable faad support via libfaad [default=no]"
|
||||||
echo " --enable-faadbin build faad support with runtime linking [default=no]"
|
echo " --enable-faadbin build faad support with runtime linking [default=no]"
|
||||||
echo " --enable-faac enable faac support via libfaac [default=no]"
|
echo " --enable-faac enable faac support via libfaac [default=no]"
|
||||||
|
echo " --enable-libgsm enable gsm support via libgsm [default=no]"
|
||||||
echo " --enable-xvid enable xvid support via xvidcore [default=no]"
|
echo " --enable-xvid enable xvid support via xvidcore [default=no]"
|
||||||
echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
|
echo " --enable-x264 enable H.264 encoding via x264 [default=no]"
|
||||||
echo " --enable-mingw32 enable mingw32 native/cross windows compile"
|
echo " --enable-mingw32 enable mingw32 native/cross windows compile"
|
||||||
@ -158,6 +159,7 @@ dv1394="yes"
|
|||||||
dc1394="no"
|
dc1394="no"
|
||||||
network="yes"
|
network="yes"
|
||||||
zlib="yes"
|
zlib="yes"
|
||||||
|
libgsm="no"
|
||||||
mp3lame="no"
|
mp3lame="no"
|
||||||
libogg="no"
|
libogg="no"
|
||||||
vorbis="no"
|
vorbis="no"
|
||||||
@ -447,6 +449,8 @@ for opt do
|
|||||||
;;
|
;;
|
||||||
--enable-shared-pp) shared_pp="yes"
|
--enable-shared-pp) shared_pp="yes"
|
||||||
;;
|
;;
|
||||||
|
--enable-libgsm) libgsm="yes"
|
||||||
|
;;
|
||||||
--enable-mp3lame) mp3lame="yes"
|
--enable-mp3lame) mp3lame="yes"
|
||||||
;;
|
;;
|
||||||
--enable-libogg) libogg="yes"
|
--enable-libogg) libogg="yes"
|
||||||
@ -1123,6 +1127,7 @@ echo "AltiVec enabled $altivec"
|
|||||||
fi
|
fi
|
||||||
echo "gprof enabled $gprof"
|
echo "gprof enabled $gprof"
|
||||||
echo "zlib enabled $zlib"
|
echo "zlib enabled $zlib"
|
||||||
|
echo "libgsm enabled $libgsm"
|
||||||
echo "mp3lame enabled $mp3lame"
|
echo "mp3lame enabled $mp3lame"
|
||||||
echo "libogg enabled $libogg"
|
echo "libogg enabled $libogg"
|
||||||
echo "vorbis enabled $vorbis"
|
echo "vorbis enabled $vorbis"
|
||||||
@ -1420,6 +1425,11 @@ if test "$zlib" = "yes" ; then
|
|||||||
echo "CONFIG_ZLIB=yes" >> config.mak
|
echo "CONFIG_ZLIB=yes" >> config.mak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$libgsm" = "yes" ; then
|
||||||
|
echo "#define CONFIG_LIBGSM 1" >> $TMPH
|
||||||
|
echo "CONFIG_LIBGSM=yes" >> config.mak
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$mp3lame" = "yes" ; then
|
if test "$mp3lame" = "yes" ; then
|
||||||
echo "#define CONFIG_MP3LAME 1" >> $TMPH
|
echo "#define CONFIG_MP3LAME 1" >> $TMPH
|
||||||
echo "CONFIG_MP3LAME=yes" >> config.mak
|
echo "CONFIG_MP3LAME=yes" >> config.mak
|
||||||
|
@ -291,6 +291,11 @@ endif
|
|||||||
EXTRALIBS += -logg
|
EXTRALIBS += -logg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_LIBGSM),yes)
|
||||||
|
OBJS += libgsm.o
|
||||||
|
EXTRALIBS += -lgsm
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(TARGET_GPROF),yes)
|
ifeq ($(TARGET_GPROF),yes)
|
||||||
CFLAGS+=-p
|
CFLAGS+=-p
|
||||||
LDFLAGS+=-p
|
LDFLAGS+=-p
|
||||||
|
@ -186,6 +186,9 @@ void avcodec_register_all(void)
|
|||||||
register_avcodec(&x264_encoder);
|
register_avcodec(&x264_encoder);
|
||||||
#endif //CONFIG_X264_ENCODER
|
#endif //CONFIG_X264_ENCODER
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_LIBGSM
|
||||||
|
register_avcodec(&libgsm_encoder);
|
||||||
|
#endif //CONFIG_LIBGSM
|
||||||
#endif /* CONFIG_ENCODERS */
|
#endif /* CONFIG_ENCODERS */
|
||||||
#ifdef CONFIG_RAWVIDEO_ENCODER
|
#ifdef CONFIG_RAWVIDEO_ENCODER
|
||||||
register_avcodec(&rawvideo_encoder);
|
register_avcodec(&rawvideo_encoder);
|
||||||
@ -482,6 +485,9 @@ void avcodec_register_all(void)
|
|||||||
#ifdef CONFIG_VORBIS_DECODER
|
#ifdef CONFIG_VORBIS_DECODER
|
||||||
register_avcodec(&vorbis_decoder);
|
register_avcodec(&vorbis_decoder);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_LIBGSM
|
||||||
|
register_avcodec(&libgsm_decoder);
|
||||||
|
#endif //CONFIG_LIBGSM
|
||||||
#endif /* CONFIG_DECODERS */
|
#endif /* CONFIG_DECODERS */
|
||||||
|
|
||||||
#ifdef AMR_NB
|
#ifdef AMR_NB
|
||||||
|
@ -172,6 +172,7 @@ enum CodecID {
|
|||||||
CODEC_ID_SHORTEN,
|
CODEC_ID_SHORTEN,
|
||||||
CODEC_ID_ALAC,
|
CODEC_ID_ALAC,
|
||||||
CODEC_ID_WESTWOOD_SND1,
|
CODEC_ID_WESTWOOD_SND1,
|
||||||
|
CODEC_ID_GSM,
|
||||||
|
|
||||||
CODEC_ID_OGGTHEORA= 0x16000,
|
CODEC_ID_OGGTHEORA= 0x16000,
|
||||||
|
|
||||||
@ -2021,6 +2022,8 @@ extern AVCodec ws_snd1_decoder;
|
|||||||
extern AVCodec indeo2_decoder;
|
extern AVCodec indeo2_decoder;
|
||||||
extern AVCodec vorbis_decoder;
|
extern AVCodec vorbis_decoder;
|
||||||
extern AVCodec fraps_decoder;
|
extern AVCodec fraps_decoder;
|
||||||
|
extern AVCodec libgsm_encoder;
|
||||||
|
extern AVCodec libgsm_decoder;
|
||||||
|
|
||||||
/* pcm codecs */
|
/* pcm codecs */
|
||||||
#define PCM_CODEC(id, name) \
|
#define PCM_CODEC(id, name) \
|
||||||
|
95
libavcodec/libgsm.c
Normal file
95
libavcodec/libgsm.c
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Interface to libgsm for gsm encoding/decoding
|
||||||
|
* Copyright (c) 2005 Alban Bedel <albeu@free.fr>
|
||||||
|
*
|
||||||
|
* This library 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 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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 this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file libgsm.c
|
||||||
|
* Interface to libgsm for gsm encoding/decoding
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avcodec.h"
|
||||||
|
#include <gsm.h>
|
||||||
|
|
||||||
|
// gsm.h miss some essential constants
|
||||||
|
#define GSM_BLOCK_SIZE 33
|
||||||
|
#define GSM_FRAME_SIZE 160
|
||||||
|
|
||||||
|
static int libgsm_init(AVCodecContext *avctx) {
|
||||||
|
if (avctx->channels > 1 || avctx->sample_rate != 8000)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
avctx->frame_size = GSM_FRAME_SIZE;
|
||||||
|
avctx->block_align = GSM_BLOCK_SIZE;
|
||||||
|
|
||||||
|
avctx->priv_data = gsm_create();
|
||||||
|
|
||||||
|
avctx->coded_frame= avcodec_alloc_frame();
|
||||||
|
avctx->coded_frame->key_frame= 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int libgsm_close(AVCodecContext *avctx) {
|
||||||
|
gsm_destroy(avctx->priv_data);
|
||||||
|
avctx->priv_data = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int libgsm_encode_frame(AVCodecContext *avctx,
|
||||||
|
unsigned char *frame, int buf_size, void *data) {
|
||||||
|
// we need a full block
|
||||||
|
if(buf_size < GSM_BLOCK_SIZE) return 0;
|
||||||
|
|
||||||
|
gsm_encode(avctx->priv_data,data,frame);
|
||||||
|
|
||||||
|
return GSM_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AVCodec libgsm_encoder = {
|
||||||
|
"gsm",
|
||||||
|
CODEC_TYPE_AUDIO,
|
||||||
|
CODEC_ID_GSM,
|
||||||
|
0,
|
||||||
|
libgsm_init,
|
||||||
|
libgsm_encode_frame,
|
||||||
|
libgsm_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int libgsm_decode_frame(AVCodecContext *avctx,
|
||||||
|
void *data, int *data_size,
|
||||||
|
uint8_t *buf, int buf_size) {
|
||||||
|
|
||||||
|
if(buf_size < GSM_BLOCK_SIZE) return 0;
|
||||||
|
|
||||||
|
if(gsm_decode(avctx->priv_data,buf,data)) return -1;
|
||||||
|
|
||||||
|
*data_size = GSM_FRAME_SIZE*2;
|
||||||
|
return GSM_BLOCK_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVCodec libgsm_decoder = {
|
||||||
|
"gsm",
|
||||||
|
CODEC_TYPE_AUDIO,
|
||||||
|
CODEC_ID_GSM,
|
||||||
|
0,
|
||||||
|
libgsm_init,
|
||||||
|
NULL,
|
||||||
|
libgsm_close,
|
||||||
|
libgsm_decode_frame,
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user