📄 g723.cpp
字号:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "typedef2.h"
#include "cst2.h"
#include "tab2.h"
#include "G723.h"
#include "coder2.h"
#include "decod2.h"
#include "exc2.h"
#include "util2.h"
#include "codcng2.h"
#include "deccng2.h"
#include "vad2.h"
#include "G723.h"
/* Global variables */
enum Crate WrkRate = Rate53;
Flag UseHp = False;
Flag UsePf = False;
Flag UseVx = True;
int ReinitSize = 0;
int CG723::naFrameType[4]={24,20,4,1};
CG723::CG723()
{
nFrameCount=0;
}
void CG723Encoder::Initialize(void)
{
//Init coder and the decoder
Init_Coder();
//Init Comfort Noise Functions
if (UseVx)
{
Init_Vad();
Init_Cod_Cng();
}
}
void CG723Decoder::Initialize()
{
Init_Decod();
Init_Dec_Cng();
}
int CG723Encoder::Encode(char* pcInputData,int nInputLength,
char* pcOutputData)
{
if (WrkRate == Rate53)
reset_max_time();
WordToFloat(pcInputData,nInputLength);
Coder(m_afFloatFrame, pcOutputData);
int nLength=GetEncodedFrameLength(pcOutputData);
nFrameCount ++;
if (ReinitSize > 0 && (nFrameCount%ReinitSize) == 0)
Initialize();
return nLength;
}
void CG723Encoder::WordToFloat(char* pcInputData,int nInputLength)
{
int i;
Word16 * pwIn=(Word16*)pcInputData;
int n=nInputLength/sizeof(Word16);
n=(n<Frame)? n : Frame;
for(i=0; i<n; i++)
m_afFloatFrame[i]=(FLOAT)pwIn[i];
for(i=n;i<Frame;i++)
m_afFloatFrame[i]=(FLOAT)0.0;
}
int CG723Decoder::Decode(char* pcInputData,int nInputLength,
char* pcOutputData)
{
Decod(m_afFloatFrame, pcInputData, (Word16) 0);
FloatToWord(pcOutputData);
if (ReinitSize > 0 && (nFrameCount%ReinitSize) == 0)
Initialize();
return Frame*sizeof(Word16);
}
void CG723Decoder::FloatToWord(char* pcOutputData)
{
//Word16 Obuf[Frame];
Word16 * pwOut=(Word16*)pcOutputData;
int i;
for (i=0; i<Frame; i++)
{
if (m_afFloatFrame[i] < (FLOAT)-32767.5)
pwOut[i] = -32768L;
else if (m_afFloatFrame[i] > (FLOAT)32766.5)
pwOut[i] = 32767;
else
{
if (m_afFloatFrame[i] < 0)
pwOut[i] = (Word16) (m_afFloatFrame[i]-(FLOAT)0.5);
else
pwOut[i] = (Word16) (m_afFloatFrame[i]+(FLOAT)0.5);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -