⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此代码为G.723.1语音压缩源代码
💻 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 + -