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

📄 lbccodec.c

📁 一个非常好用的国际标准G。726算法
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <string.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"

/* Global variables */
enum  Wmode    WrkMode = Both ;
enum  Crate    WrkRate = Rate63 ;

int   PackedFrameSize[2] = {
   24 ,
   20
   } ;

Flag    UseHp = True ;
Flag    UsePf = True ;
Flag    UseVx = False ;
Flag    UsePr = True ;

char  SignOn[] = "ACL/USH/FT/DSPG ANSI C CODEC ITU LBC Ver 5.00\n" ;

void main()
{
	FILE    *Ifp, *Ofp ;            /* I/O File pointers */
    FILE    *Fep  = NULL;           /* Frame erasures file pointer */
   
    long    FrCnt = 0 ;
    long    FlLen ;

    Word16  DataBuff[Frame] ;
    Word16  Crc ;
    

    char    Line[24] ;

    printf("%s", SignOn ) ;
    
	WrkRate=Rate63;
	WrkMode=Cod;
	UseVx=True;
	
	Ifp = fopen("E:/zhaoyun/g723/sw/mux723/y1.pcm", "rb") ;
	
	
	Ofp = fopen( "E:/zhaoyun/g723/sw/mux723/y163.xco", "wb") ;
	 
	
	fseek(Ifp,0L,SEEK_END);
	FlLen=ftell(Ifp);
	rewind(Ifp);
	if(WrkMode==Dec) FlLen=0x7fffffffL;
	else FlLen/=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( );

/* Process all the input file */
    do {

        switch ( WrkMode ) {

            case Both:
                if ( WrkRate == Rate53) reset_max_time();
                Read_lbc( DataBuff, Frame, Ifp ) ;
                Coder( DataBuff, Line ) ;
                Decod( DataBuff, Line, (Word16) 0 ) ;
                Write_lbc( DataBuff, Frame, Ofp ) ;
            break ;

            case Cod :
                if ( WrkRate == Rate53) reset_max_time();
                Read_lbc( DataBuff, Frame, Ifp ) ;
                Coder( DataBuff, Line ) ;
                Line_Wr( Line, Ofp ) ;
            break ;

            case Dec :
                if(Line_Rd( Line, Ifp ) == (-1)) {
                    FlLen = FrCnt;
                    break;
                }
                if ( Fep == NULL )
                    Crc = (Word16) 0 ;
                else
                    fread( (char *)&Crc, sizeof(Word16), 1, Fep ) ;
                Decod( DataBuff, Line, Crc ) ;
                Write_lbc( DataBuff, Frame, Ofp ) ;
            break ;
        }

        FrCnt ++ ;
        if( UsePr) {
            if( WrkMode == Dec) {
                if(FrCnt < FlLen) {
                    fprintf( stdout, "Done : %6ld\r", FrCnt) ;
                }
            }
            else {
                fprintf( stdout, "Done : %6ld %3ld\r", FrCnt, FrCnt*100/FlLen ) ;
            }
            fflush(stdout);
        }

    }   while ( FrCnt < FlLen ) ;

    if(Ifp) { (void)fclose(Ifp); }
    if(Ofp) { (void)fclose(Ofp); }
    if(Fep) { (void)fclose(Fep); }


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -