Originally committed as revision 4302 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -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-faadbin build faad support with runtime linking [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-x264 enable H.264 encoding via x264 [default=no]" | |||
| echo " --enable-mingw32 enable mingw32 native/cross windows compile" | |||
| @@ -158,6 +159,7 @@ dv1394="yes" | |||
| dc1394="no" | |||
| network="yes" | |||
| zlib="yes" | |||
| libgsm="no" | |||
| mp3lame="no" | |||
| libogg="no" | |||
| vorbis="no" | |||
| @@ -447,6 +449,8 @@ for opt do | |||
| ;; | |||
| --enable-shared-pp) shared_pp="yes" | |||
| ;; | |||
| --enable-libgsm) libgsm="yes" | |||
| ;; | |||
| --enable-mp3lame) mp3lame="yes" | |||
| ;; | |||
| --enable-libogg) libogg="yes" | |||
| @@ -1123,6 +1127,7 @@ echo "AltiVec enabled $altivec" | |||
| fi | |||
| echo "gprof enabled $gprof" | |||
| echo "zlib enabled $zlib" | |||
| echo "libgsm enabled $libgsm" | |||
| echo "mp3lame enabled $mp3lame" | |||
| echo "libogg enabled $libogg" | |||
| echo "vorbis enabled $vorbis" | |||
| @@ -1420,6 +1425,11 @@ if test "$zlib" = "yes" ; then | |||
| echo "CONFIG_ZLIB=yes" >> config.mak | |||
| fi | |||
| if test "$libgsm" = "yes" ; then | |||
| echo "#define CONFIG_LIBGSM 1" >> $TMPH | |||
| echo "CONFIG_LIBGSM=yes" >> config.mak | |||
| fi | |||
| if test "$mp3lame" = "yes" ; then | |||
| echo "#define CONFIG_MP3LAME 1" >> $TMPH | |||
| echo "CONFIG_MP3LAME=yes" >> config.mak | |||
| @@ -291,6 +291,11 @@ endif | |||
| EXTRALIBS += -logg | |||
| endif | |||
| ifeq ($(CONFIG_LIBGSM),yes) | |||
| OBJS += libgsm.o | |||
| EXTRALIBS += -lgsm | |||
| endif | |||
| ifeq ($(TARGET_GPROF),yes) | |||
| CFLAGS+=-p | |||
| LDFLAGS+=-p | |||
| @@ -186,6 +186,9 @@ void avcodec_register_all(void) | |||
| register_avcodec(&x264_encoder); | |||
| #endif //CONFIG_X264_ENCODER | |||
| #endif | |||
| #ifdef CONFIG_LIBGSM | |||
| register_avcodec(&libgsm_encoder); | |||
| #endif //CONFIG_LIBGSM | |||
| #endif /* CONFIG_ENCODERS */ | |||
| #ifdef CONFIG_RAWVIDEO_ENCODER | |||
| register_avcodec(&rawvideo_encoder); | |||
| @@ -482,6 +485,9 @@ void avcodec_register_all(void) | |||
| #ifdef CONFIG_VORBIS_DECODER | |||
| register_avcodec(&vorbis_decoder); | |||
| #endif | |||
| #ifdef CONFIG_LIBGSM | |||
| register_avcodec(&libgsm_decoder); | |||
| #endif //CONFIG_LIBGSM | |||
| #endif /* CONFIG_DECODERS */ | |||
| #ifdef AMR_NB | |||
| @@ -172,6 +172,7 @@ enum CodecID { | |||
| CODEC_ID_SHORTEN, | |||
| CODEC_ID_ALAC, | |||
| CODEC_ID_WESTWOOD_SND1, | |||
| CODEC_ID_GSM, | |||
| CODEC_ID_OGGTHEORA= 0x16000, | |||
| @@ -2021,6 +2022,8 @@ extern AVCodec ws_snd1_decoder; | |||
| extern AVCodec indeo2_decoder; | |||
| extern AVCodec vorbis_decoder; | |||
| extern AVCodec fraps_decoder; | |||
| extern AVCodec libgsm_encoder; | |||
| extern AVCodec libgsm_decoder; | |||
| /* pcm codecs */ | |||
| #define PCM_CODEC(id, name) \ | |||
| @@ -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, | |||
| }; | |||