src/mediastreamer/msilbcenc.c

branch
gaim
changeset 20470
77693555855f
parent 13071
b98e72d4089a
parent 20469
b2836a24d81e
child 20471
1966704b3e42
--- a/src/mediastreamer/msilbcenc.c	Mon Apr 16 00:43:53 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-/*
-  The mediastreamer library aims at providing modular media processing and I/O
-	for linphone, but also for any telephony application.
-  Copyright (C) 2001  Simon MORLAT simon.morlat@linphone.org
-  										
-  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.1 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
-*/
-
-#include <config.h>
-
-#ifdef HAVE_ILBC
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "msilbcenc.h"
-
-extern MSCodecInfo ilbc_info;
-
-/* The return value of each of these calls is the same as that
-   returned by fread/fwrite, which should be the number of samples
-   successfully read/written, not the number of bytes. */
-
-int
-ilbc_read_16bit_samples(gint16 int16samples[], float speech[], int n)
-{
-    int i;
-
-    /* Convert 16 bit integer samples to floating point values in the
-       range [-1,+1]. */
-
-    for (i = 0; i < n; i++) {
-        speech[i] = int16samples[i];
-    }
-
-    return (n);
-}
-
-
-
-int
-ilbc_write_16bit_samples(gint16 int16samples[], float speech[], int n)
-{
-	int i;
-
-	/* Convert floating point samples in range [-1,+1] to 16 bit
-	   integers. */
-	for (i = 0; i < n; i++) {
-		float dtmp=speech[i]; 
-		if (dtmp<MIN_SAMPLE) 
-			dtmp=MIN_SAMPLE; 
-		else if (dtmp>MAX_SAMPLE) 
-			dtmp=MAX_SAMPLE; 
-		int16samples[i] = (short) dtmp; 
-	}
-	return (n);
-}
-
-/*
-
-Write the bits in bits[0] through bits[len-1] to file f, in "packed"
-format.
-
-bits is expected to be an array of len integer values, where each
-integer is 0 to represent a 0 bit, and any other value represents a 1
-bit.  This bit string is written to the file f in the form of several
-8 bit characters.  If len is not a multiple of 8, then the last
-character is padded with 0 bits -- the padding is in the least
-significant bits of the last byte.  The 8 bit characters are "filled"
-in order from most significant bit to least significant.
-
-*/
-
-void
-ilbc_write_bits(unsigned char *data, unsigned char *bits, int nbytes)
-{
-	memcpy(data, bits, nbytes);
-}
-
-
-
-/*
-
-Read bits from file f into bits[0] through bits[len-1], in "packed"
-format.
-
-*/
-
-int
-ilbc_read_bits(unsigned char *data, unsigned char *bits, int nbytes)
-{
-
-	memcpy(bits, data, nbytes);
-
-	return (nbytes);
-}
-
-
-
-
-static MSILBCEncoderClass *ms_ilbc_encoder_class=NULL;
-
-MSFilter * ms_ilbc_encoder_new(void)
-{
-	MSILBCEncoder *r;
-	
-	r=g_new(MSILBCEncoder,1);
-	ms_ilbc_encoder_init(r);
-	if (ms_ilbc_encoder_class==NULL)
-	{
-		ms_ilbc_encoder_class=g_new(MSILBCEncoderClass,1);
-		ms_ilbc_encoder_class_init(ms_ilbc_encoder_class);
-	}
-	MS_FILTER(r)->klass=MS_FILTER_CLASS(ms_ilbc_encoder_class);
-	return(MS_FILTER(r));
-}
-	
-
-int ms_ilbc_encoder_set_property(MSILBCEncoder *obj, MSFilterProperty prop, char *value)
-{
-	switch(prop){
-		case MS_FILTER_PROPERTY_FMTP:
-			obj->ms_per_frame=30;
-#if 0  // SME
-			if (strstr(value,"ptime=20")!=NULL) obj->ms_per_frame=20;
-			else if (strstr(value,"ptime=30")!=NULL) obj->ms_per_frame=30;
-			else g_warning("Unrecognized fmtp parameter for ilbc encoder!");
-#endif
-		break;
-		case MS_FILTER_PROPERTY_FREQ:
-		case MS_FILTER_PROPERTY_BITRATE:
-		case MS_FILTER_PROPERTY_CHANNELS:
-		default:
-		break;
-	}
-	return 0;
-}
-
-
-int ms_ilbc_encoder_get_property(MSILBCEncoder *obj, MSFilterProperty prop, char *value)
-{
-	switch(prop){
-		case MS_FILTER_PROPERTY_FMTP:
-			if (obj->ms_per_frame==20) strncpy(value,"ptime=20",MS_FILTER_PROPERTY_STRING_MAX_SIZE);
-			if (obj->ms_per_frame==30) strncpy(value,"ptime=30",MS_FILTER_PROPERTY_STRING_MAX_SIZE);
-		break;
-		case MS_FILTER_PROPERTY_FREQ:
-		case MS_FILTER_PROPERTY_BITRATE:
-		case MS_FILTER_PROPERTY_CHANNELS:
-		default:
-		break;
-	}
-	return 0;
-}
-
-void ms_ilbc_encoder_setup(MSILBCEncoder *r) 
-{
-	switch (r->ms_per_frame) {
-	case 20:
-		r->samples_per_frame = BLOCKL_20MS;
-		r->bytes_per_compressed_frame = NO_OF_BYTES_20MS;
-		break;
-	case 30:
-		r->samples_per_frame = BLOCKL_30MS;
-		r->bytes_per_compressed_frame = NO_OF_BYTES_30MS;
-		break;
-	default:
-		g_error("Bad bitrate value (%i) for ilbc encoder!", r->ms_per_frame);
-		break;
-	}
-	MS_FILTER(r)->r_mingran= (r->samples_per_frame * 2);
-	g_message("Using ilbc encoder with %i ms frames mode.",r->ms_per_frame);
-	initEncode(&r->ilbc_enc, r->ms_per_frame /* ms frames */);
-}
-
-/* FOR INTERNAL USE*/
-void ms_ilbc_encoder_init(MSILBCEncoder *r)
-{
-	/* default bitrate */
-	r->bitrate = 15200;
-	r->ms_per_frame = 20;
-	r->samples_per_frame = BLOCKL_20MS;
-	r->bytes_per_compressed_frame = NO_OF_BYTES_20MS;
-
-	ms_filter_init(MS_FILTER(r));
-	MS_FILTER(r)->infifos=r->f_inputs;
-	MS_FILTER(r)->outqueues=r->q_outputs;
-	MS_FILTER(r)->r_mingran= (r->samples_per_frame * 2);
-	memset(r->f_inputs,0,sizeof(MSFifo*)*MSILBCENCODER_MAX_INPUTS);
-	memset(r->q_outputs,0,sizeof(MSFifo*)*MSILBCENCODER_MAX_INPUTS);
-}
-
-void ms_ilbc_encoder_class_init(MSILBCEncoderClass *klass)
-{
-	ms_filter_class_init(MS_FILTER_CLASS(klass));
-	ms_filter_class_set_name(MS_FILTER_CLASS(klass),"ILBCEnc");
-	MS_FILTER_CLASS(klass)->max_finputs=MSILBCENCODER_MAX_INPUTS;
-	MS_FILTER_CLASS(klass)->max_qoutputs=MSILBCENCODER_MAX_INPUTS;
-	MS_FILTER_CLASS(klass)->r_maxgran=ILBC_MAX_SAMPLES_PER_FRAME*2;
-	MS_FILTER_CLASS(klass)->set_property=(MSFilterPropertyFunc)ms_ilbc_encoder_set_property;
-	MS_FILTER_CLASS(klass)->get_property=(MSFilterPropertyFunc)ms_ilbc_encoder_get_property;
-	MS_FILTER_CLASS(klass)->setup=(MSFilterSetupFunc)ms_ilbc_encoder_setup;
-	MS_FILTER_CLASS(klass)->destroy=(MSFilterDestroyFunc)ms_ilbc_encoder_destroy;
-	MS_FILTER_CLASS(klass)->process=(MSFilterProcessFunc)ms_ilbc_encoder_process;
-	MS_FILTER_CLASS(klass)->info=(MSFilterInfo*)&ilbc_info;
-}
-	
-void ms_ilbc_encoder_process(MSILBCEncoder *r)
-{
-	MSFifo *fi;
-	MSQueue *qo;
-	MSMessage *m;
-	void *src=NULL;
-	float speech[ILBC_MAX_SAMPLES_PER_FRAME];
-	
-	/* process output fifos, but there is only one for this class of filter*/
-	
-	qo=r->q_outputs[0];
-	fi=r->f_inputs[0];
-	ms_fifo_get_read_ptr(fi,r->samples_per_frame*2,&src);
-	if (src==NULL) {
-		g_warning( "src=%p\n", src);
-		return;
-	}
-	m=ms_message_new(r->bytes_per_compressed_frame);
-
-	ilbc_read_16bit_samples((gint16*)src, speech, r->samples_per_frame);
-	iLBC_encode((unsigned char *)m->data, speech, &r->ilbc_enc);
-	ms_queue_put(qo,m);
-}
-
-void ms_ilbc_encoder_uninit(MSILBCEncoder *obj)
-{
-}
-
-void ms_ilbc_encoder_destroy( MSILBCEncoder *obj)
-{
-	ms_ilbc_encoder_uninit(obj);
-	g_free(obj);
-}
-
-#endif

mercurial