📄 g729.cs
字号:
using System;
using System.IO;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace gowk.multimedia
{
/*
#define L_FRAME_COMPRESSED 10
#define L_FRAME 80
void va_g729a_init_encoder();
void va_g729a_encoder(short *speech, unsigned char *bitstream);
void va_g729a_init_decoder();
void va_g729a_decoder(unsigned char *bitstream, short *synth_short, int bfi);
*/
/// <summary>
/// G729 的摘要说明。
/// </summary>
public class G729
{
const int L_FRAME_COMPRESSED=10;
const int L_FRAME=80;
[DllImport("g729",PreserveSig=true)]
private extern static void va_g729a_init_encoder();
[DllImport("g729")]
private extern static void va_g729a_encoder([MarshalAs(UnmanagedType.LPArray)]byte[] data,[MarshalAs(UnmanagedType.LPArray)]byte[] dst);
// [DllImport("g729",PreserveSig=true)]
// private unsafe extern static void va_g729a_encoder(short* data,byte* dst);
[DllImport("g729")]
private extern static void va_g729a_init_decoder();
[DllImport("g729")]
private extern static void va_g729a_decoder(byte[] data,byte[] dst,int bfi);
public G729()
{
}
public void InitalizeEncode()
{
va_g729a_init_encoder();
}
public void InitalizeDecode()
{
va_g729a_init_decoder();
}
unsafe public byte[] Encode(byte[] data)
{
/* byte[] dst=new byte[(int)(data.Length/16)];
fixed(byte* psb=data,pd=dst)
{
short* ps=(short*)psb;
for(int i=0;i<data.Length/2;i+=80)
{
short* psc=ps;
byte* pdc=pd;
va_g729a_encoder(psc,pdc);
psc+=80;
pdc+=80;
}
}
fixed(short* ps=(short*)&data)
{
fixed(byte* pd=(byte*)&dst)
{
for(int i=0;i<data.Length/2;i+=80)
{
va_g729a_encoder(ps,dst);
}
}
}
return dst;*/
MemoryStream src=new MemoryStream(data);
System.IO.BinaryReader brsrc=new BinaryReader(src);
MemoryStream dst=new MemoryStream();
System.IO.BinaryWriter bwdst=new BinaryWriter(dst);
int step=(int)(data.Length/160);
for(int i=0;i<step;i++)
{
byte[] d=new byte[10];
for(int k=0;k<d.Length;k++)
{
d[k]=1;
}
byte[] o=brsrc.ReadBytes(160);
va_g729a_encoder(o,d);
bwdst.Write(d);
}
byte[] ret=dst.GetBuffer();
brsrc.Close();
bwdst.Close();
src.Close();
dst.Close();
return ret;
/* byte[] dst=new byte[data.Length/8];
int max=data.Length;
for(int i=0;i<max;i+=80)
{
}
return null;*/
}
public byte[] Decode(byte[] data)
{
MemoryStream src=new MemoryStream(data);
System.IO.BinaryReader brsrc=new BinaryReader(src);
MemoryStream dst=new MemoryStream();
System.IO.BinaryWriter bwdst=new BinaryWriter(dst);
int step=(int)(data.Length/10);
for(int i=0;i<step;i++)
{
byte[] d=new byte[160];
va_g729a_decoder(brsrc.ReadBytes(10),d,0);
bwdst.Write(d);
}
byte[] ret=dst.GetBuffer();
brsrc.Close();
bwdst.Close();
src.Close();
dst.Close();
return ret;
}
/* public void Encode(byte[] data,byte[] dst)
{
va_g729a_encoder(data,dst);
}
public void Decode(byte[] data,byte[] dst,int bfi)
{
va_g729a_decoder(data,dst,bfi);
}*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -