G729aCompress.cpp
上传用户:amei960
上传日期:2007-02-05
资源大小:143k
文件大小:1k
源码类别:

Audio

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "G729aCompress.h"
  3. extern "C" void va_g729a_init_encoder();
  4. extern "C" void va_g729a_encoder(short *speech, unsigned char *bitstream);
  5. extern "C" void va_g729a_init_decoder();
  6. extern "C" void va_g729a_decoder(unsigned char *bitstream, short *synth_short, int bfi);
  7. #define  L_FRAME_COMPRESSED 10
  8. #define  L_FRAME            80
  9. #pragma comment(lib,"G729a")
  10. CG729aCompress::CG729aCompress()
  11. {
  12. va_g729a_init_encoder();
  13. va_g729a_init_decoder();
  14. }
  15. CG729aCompress::~CG729aCompress()
  16. {
  17. }
  18. BOOL CG729aCompress::Compress(char* src,int srclen,char* dst,int* dstlen)
  19. {
  20. if(!src || srclen != SIZE_AUDIO_FRAME || !dst)
  21. return FALSE;
  22. for( int i = 0 ; i < SIZE_AUDIO_PACKED / 10 ; i++ )
  23. {
  24. va_g729a_encoder((short*)(src + i * 160),(BYTE*)dst + i * 10);
  25. }
  26. if(dstlen)
  27. *dstlen=SIZE_AUDIO_PACKED;
  28. return TRUE;
  29. }
  30. BOOL CG729aCompress::UnCompress(char* src,int srclen,char* dst,int* dstlen)
  31. {
  32. if( !src || srclen != SIZE_AUDIO_PACKED || !dst)
  33. return FALSE;
  34. for( int i = 0 ; i < SIZE_AUDIO_PACKED / 10 ; i++ )
  35. {
  36. va_g729a_decoder((BYTE*)src + i*10 ,(short*)(dst + i*160),0);
  37. }
  38. if(dstlen)
  39. *dstlen=SIZE_AUDIO_FRAME;
  40. return TRUE;
  41. }