G729aCompress.cpp
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:1k
源码类别:

IP电话/视频会议

开发平台:

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,"Client/Sound/G729a.lib")
  10. CG729aCompress::CG729aCompress( )
  11. {
  12. va_g729a_init_encoder();
  13. va_g729a_init_decoder();
  14. *( int * )this->compress_buffer = CCompress::G729a;
  15. this->type = CCompress::G729a;
  16. }
  17. CG729aCompress::~CG729aCompress()
  18. {
  19. }
  20. char * CG729aCompress::Compress(char* src,int * srclen )
  21. {
  22. if(!src || * srclen != SIZE_AUDIO_FRAME )
  23. return FALSE;
  24. char * now = this->compress_buffer + sizeof( int );
  25. for( int i = 0 ; i < SIZE_AUDIO_PACKED / 10 ; i++ )
  26. {
  27. va_g729a_encoder((short*)(src + i * 160),(BYTE*)now + i * 10);
  28. }
  29. if( srclen )
  30. * srclen = sizeof( int ) + SIZE_AUDIO_PACKED;
  31. return this->compress_buffer;
  32. }
  33. char * CG729aCompress::UnCompress(char * src,int * srclen )
  34. {
  35. * srclen -= sizeof( int );
  36. if( ! src || * srclen != SIZE_AUDIO_PACKED )
  37. return FALSE;
  38. src += sizeof( int );
  39. for( int i = 0 ; i < SIZE_AUDIO_PACKED / 10 ; i++ )
  40. va_g729a_decoder((BYTE*)src + i*10 ,(short*)(this->uncompress_buffer + i*160),0);
  41. if( srclen )
  42. *srclen = SIZE_AUDIO_FRAME;
  43. return this->uncompress_buffer;
  44. }