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

IP电话/视频会议

开发平台:

Visual C++

  1. #include "....Stdafx.h"
  2. #include "GsmCompress.h"
  3. #pragma comment(lib,"Client/Sound/gsm.lib")
  4. CGsmCompress::CGsmCompress()
  5. {
  6. m_hGsm = NULL;
  7. m_hGsm = gsm_create();
  8. *( int * )this->compress_buffer = CCompress::GSM610;
  9. this->type = CCompress::GSM610;
  10. }
  11. CGsmCompress::~CGsmCompress()
  12. {
  13. if( m_hGsm != NULL )
  14. {
  15. gsm_destroy( m_hGsm );
  16. m_hGsm = NULL;
  17. }
  18. }
  19. char * CGsmCompress::Compress(char* src ,int * srclen )
  20. {
  21. if( m_hGsm == NULL )
  22. return FALSE;
  23.     gsm_frame dst_gsm;
  24.     int i , l = 0;
  25. char * now = this->compress_buffer + sizeof( int );
  26.     for (i = 0 ; i < * srclen; i += 160) 
  27. {
  28.         gsm_encode( m_hGsm , (short*)(src + i), dst_gsm);
  29.         memcpy( now + l, dst_gsm, sizeof(dst_gsm));
  30.         l += sizeof(dst_gsm);
  31.     }
  32. *srclen = l + sizeof( int );
  33. return this->compress_buffer;
  34. }
  35. char * CGsmCompress::UnCompress(char* src,int * srclen )
  36. {
  37. if( m_hGsm == NULL )
  38. return FALSE;
  39.     gsm_signal dst_gsm[160];
  40.     int i , l = 0;
  41. src += sizeof( int );
  42. * srclen -= sizeof( int );
  43.     for (i = 0; i < * srclen; i += sizeof(gsm_frame) ) 
  44. {
  45.         gsm_decode(m_hGsm , (gsm_byte*)src + i, dst_gsm);
  46.     memcpy(this->uncompress_buffer + l, dst_gsm, sizeof(dst_gsm));
  47. l += 160;
  48.     }
  49.     *srclen = l;
  50. return this->uncompress_buffer;
  51. }