[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec libgsm.c, NONE, 1.1 allcodecs.c, 1.105, 1.106 avcodec.h, 1.398, 1.399 Makefile, 1.190, 1.191

Michael Niedermayer CVS michael
Mon May 23 01:39:13 CEST 2005


Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv29252/libavcodec

Modified Files:
	allcodecs.c avcodec.h Makefile 
Added Files:
	libgsm.c 
Log Message:
libgsm warper by (Alban Bedel: albeu, free fr)


--- NEW FILE: libgsm.c ---
/*
 * Interface to libgsm for gsm encoding/decoding
 * Copyright (c) 2005 Alban Bedel <albeu at 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,
};

Index: allcodecs.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/allcodecs.c,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -d -r1.105 -r1.106
--- allcodecs.c	17 May 2005 22:47:34 -0000	1.105
+++ allcodecs.c	22 May 2005 23:39:11 -0000	1.106
@@ -186,6 +186,9 @@
     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 @@
 #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

Index: avcodec.h
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/avcodec.h,v
retrieving revision 1.398
retrieving revision 1.399
diff -u -d -r1.398 -r1.399
--- avcodec.h	17 May 2005 22:47:34 -0000	1.398
+++ avcodec.h	22 May 2005 23:39:11 -0000	1.399
@@ -172,6 +172,7 @@
     CODEC_ID_SHORTEN,
     CODEC_ID_ALAC,
     CODEC_ID_WESTWOOD_SND1,
+    CODEC_ID_GSM,    
     
     CODEC_ID_OGGTHEORA= 0x16000, 
     
@@ -2021,6 +2022,8 @@
 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) \

Index: Makefile
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/Makefile,v
retrieving revision 1.190
retrieving revision 1.191
diff -u -d -r1.190 -r1.191
--- Makefile	19 May 2005 00:17:50 -0000	1.190
+++ Makefile	22 May 2005 23:39:11 -0000	1.191
@@ -291,6 +291,11 @@
 EXTRALIBS += -logg
 endif
 
+ifeq ($(CONFIG_LIBGSM),yes)
+OBJS += libgsm.o
+EXTRALIBS += -lgsm
+endif
+
 ifeq ($(TARGET_GPROF),yes)
 CFLAGS+=-p
 LDFLAGS+=-p





More information about the ffmpeg-cvslog mailing list