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

Audio

开发平台:

Visual C++

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