📄 main.c
字号:
/*
**
** File: "main.c"
**
** Description: source code for G.723.1 dual-rate codec
**
** Functions: main
**
**
**
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <asm/mman.h>
#include <sys/time.h>
#include <errno.h>
#include <signal.h>
#include <time.h>
#include "typedef.h"
#include "basop.h"
#include "cst_lbc.h"
#include "tab_lbc.h"
#include "lbccodec.h"
#include "coder.h"
#include "decod.h"
#include "exc_lbc.h"
#include "util_lbc.h"
#include "cod_cng.h"
#include "dec_cng.h"
#include "vad.h"
#include "types.h"
/* Global variables */
enum Wmode WrkMode = Cod ;
enum Crate WrkRate = 0 ;
int PackedFrameSize[2] = {
24 ,
20
} ;
Flag UseHp = False ;
Flag UsePf = False ;
Flag UseVx = False ;
Flag UsePr = True ;
static int fd_ssi;
#define voice_num 1920
#define ssiopen 0x13
static U8 *buf;
static U8 *buf1;
static U8 *ulaw_buf;
static S16 liner_buf[1920];
struct timeval start, end;
double timeuse = 0.00;
char SignOn[] = "ACL/USH/FT/DSPG ANSI C CODEC ITU LBC Ver 5.00\n" ;
int main( )
{
FILE *Ifp, *Ofp ; /* I/O File pointers */
long FrCnt = 0 ;
long Flen = 0;
char Line[24] ;
U32 i = 0;
fd_ssi = open("/dev/SSI649", O_RDWR);
ioctl(fd_ssi, ssiopen, 0);
buf=(U8*)malloc(1920);
buf1=(U8*)malloc(1920);
ulaw_buf=(U8*)malloc(1920);
WrkRate = Rate63;
/* Options report */
if ( UsePr ) {
printf("Options:\n");
if (WrkMode == Both )
printf("Encoder/Decoder\n");
else if (WrkMode == Cod )
printf("Encoder\n");
else
printf("Decoder\n");
if( WrkMode != Cod ) {
if (UsePf == 0 )
printf("Postfilter disabled\n");
else
printf("Postfilter enabled\n");
}
if( WrkMode <= Cod ) {
if (WrkRate == Rate63 )
printf("Rate 6.3 kb/s\n");
else
printf("Rate 5.3 kb/s\n");
if (UseHp == 0 )
printf("Highpassfilter disabled\n");
else
printf("Highpassfilter enabled\n");
if (UseVx == 0 )
printf("VAD/CNG disabled\n");
else
printf("VAD/CNG enabled\n");
}
}
if ( NULL == (Ifp=fopen("1.bin","rb")) )
{ printf("Error opening file, terminating..\r\n");
exit(4); }
if ( NULL == (Ofp=fopen("2.bin","wb")) )
{
printf("Error creating file, terminating..\r\n");
exit(4);
}
/*
Compute the file length
*/
fseek( Ifp, 0L, SEEK_END ) ;
Flen = ftell(Ifp) ;
rewind( Ifp ) ;
if ( WrkMode == Dec )
Flen = 0x7fffffffL ;
else
Flen /= sizeof(Word16)*Frame ;
/*
Init coder and the decoder
*/
Init_Coder( ) ;
Init_Decod( ) ;
/* Init Comfort Noise Functions */
if( UseVx ) {
Init_Vad();
Init_Cod_Cng( );
}
Init_Dec_Cng( );
double sum = 0.0;
do {
Read_lbc(liner_buf, Frame, Ifp) ;
gettimeofday( &start, NULL);
Coder(liner_buf, Line);
gettimeofday( &end, NULL );
Decod(liner_buf, Line, (Word16)0);
timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
//timeuse /= 1000000;
sum += timeuse;
Write_lbc(liner_buf, Frame, Ofp ) ;
FrCnt ++ ;
}while(FrCnt<Flen) ;
sum /= (FrCnt*1000000);
printf( "Codec time elapsed: %3.4f seconds\n", sum );
#if 0
while(1)
{
read(fd_ssi, ulaw_buf, voice_num);
for(i=0; i<voice_num; i++)
liner_buf[i] = ulaw2linear(ulaw_buf[i]);
for(i=0; i<8; i++)
{
gettimeofday( &start, NULL );
Coder(&liner_buf[i*240], Line ) ;
gettimeofday( &end, NULL );
Decod(&liner_buf[i*240], Line, (Word16) 0 ) ;
}
for(i=0; i<voice_num; i++)
ulaw_buf[i] = linear2ulaw(liner_buf[i]);
timeuse = 1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;
timeuse /= 1000000;
printf( "Codec time elapsed: %3.4f seconds\n", timeuse );
//write(fd_ssi, ubuf, voice_num);
}
#endif
if(Ifp) { (void)fclose(Ifp); }
if(Ofp) { (void)fclose(Ofp); }
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -