aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/dcc/gsmcodec.cpp
diff options
context:
space:
mode:
authorGravatar Elvio Basello2008-04-03 23:29:02 +0000
committerGravatar Elvio Basello2008-04-03 23:29:02 +0000
commit529524db3f530e4edaf741a40a91d1a5787027ac (patch)
tree681d9b67ad62dea930a09e46aefa7e6a0cd418fd /src/modules/dcc/gsmcodec.cpp
parentget rid of $KVI_INSTALL_PREFIX and $KVI_VERSION_BRANCH ; more cmake fixes for... (diff)
downloadKVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.tar.gz
KVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.tar.bz2
KVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.zip
added a skel for windows on Tom's patch
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1386 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/dcc/gsmcodec.cpp')
-rw-r--r--src/modules/dcc/gsmcodec.cpp221
1 files changed, 109 insertions, 112 deletions
diff --git a/src/modules/dcc/gsmcodec.cpp b/src/modules/dcc/gsmcodec.cpp
index 85f274abf..345fed909 100644
--- a/src/modules/dcc/gsmcodec.cpp
+++ b/src/modules/dcc/gsmcodec.cpp
@@ -25,125 +25,122 @@
#include "gsmcodec.h"
#ifdef COMPILE_USE_GSM
-
-#include <dlfcn.h>
-
-#define GSM_PACKED_FRAME_SIZE_IN_BYTES 33
-#define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320
-#define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160
-
-void * (*gsm_session_create)() = 0;
-void (*gsm_session_destroy)(void *) = 0;
-void (*gsm_session_encode)(void *,short *,unsigned char *) = 0;
-int (*gsm_session_decode)(void *,unsigned char *,short *) = 0;
-
-
-void * g_pGSMCodecLibraryHandle = 0;
-
-bool kvi_gsm_codec_init()
-{
- if(g_pGSMCodecLibraryHandle)return true; // Already initialized
-
- g_pGSMCodecLibraryHandle = dlopen("libgsm.so",RTLD_NOW | RTLD_GLOBAL);
- if(!g_pGSMCodecLibraryHandle)return false; // no way to open it
-
- gsm_session_create = (void * (*)()) dlsym(g_pGSMCodecLibraryHandle,"gsm_create");
- gsm_session_destroy = (void (*)(void *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_destroy");
- gsm_session_encode = (void (*)(void *,short *,unsigned char *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_encode");
- gsm_session_decode = (int (*)(void *,unsigned char *,short *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_decode");
-
- if(! (gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode))
+ #include <dlfcn.h>
+
+ #define GSM_PACKED_FRAME_SIZE_IN_BYTES 33
+ #define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320
+ #define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160
+
+ void * (*gsm_session_create)() = 0;
+ void (*gsm_session_destroy)(void *) = 0;
+ void (*gsm_session_encode)(void *,short *,unsigned char *) = 0;
+ int (*gsm_session_decode)(void *,unsigned char *,short *) = 0;
+
+ void * g_pGSMCodecLibraryHandle = 0;
+
+ bool kvi_gsm_codec_init()
{
- dlclose(g_pGSMCodecLibraryHandle);
- g_pGSMCodecLibraryHandle = 0;
- return false;
+ if(g_pGSMCodecLibraryHandle)return true; // Already initialized
+
+ g_pGSMCodecLibraryHandle = dlopen("libgsm.so",RTLD_NOW | RTLD_GLOBAL);
+ if(!g_pGSMCodecLibraryHandle)return false; // no way to open it
+
+ gsm_session_create = (void * (*)()) dlsym(g_pGSMCodecLibraryHandle,"gsm_create");
+ gsm_session_destroy = (void (*)(void *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_destroy");
+ gsm_session_encode = (void (*)(void *,short *,unsigned char *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_encode");
+ gsm_session_decode = (int (*)(void *,unsigned char *,short *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_decode");
+
+ if(! (gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode))
+ {
+ dlclose(g_pGSMCodecLibraryHandle);
+ g_pGSMCodecLibraryHandle = 0;
+ return false;
+ }
+ return true;
}
- return true;
-}
-
-void kvi_gsm_codec_done()
-{
- if(g_pGSMCodecLibraryHandle)
+
+ void kvi_gsm_codec_done()
{
- dlclose(g_pGSMCodecLibraryHandle);
- g_pGSMCodecLibraryHandle = 0;
+ if(g_pGSMCodecLibraryHandle)
+ {
+ dlclose(g_pGSMCodecLibraryHandle);
+ g_pGSMCodecLibraryHandle = 0;
+ }
}
-}
-
-
-
-KviDccVoiceGsmCodec::KviDccVoiceGsmCodec()
-: KviDccVoiceCodec()
-{
- m_pEncodeState = gsm_session_create();
- m_pDecodeState = gsm_session_create();
- m_szName = "gsm (compression 33:320)";
-}
-
-KviDccVoiceGsmCodec::~KviDccVoiceGsmCodec()
-{
- gsm_session_destroy(m_pEncodeState);
- gsm_session_destroy(m_pDecodeState);
-}
-
-void KviDccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
-{
- if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode
-
- unsigned char * ptr = signal->data();
-
- int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- int uFrameOffset = stream->size();
- unsigned char * endPtr = ptr + uTotalDataCompressed;
-
- stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames);
-
- while(ptr != endPtr)
+
+
+ KviDccVoiceGsmCodec::KviDccVoiceGsmCodec()
+ : KviDccVoiceCodec()
{
- gsm_session_encode(m_pEncodeState,(short *)ptr,stream->data() + uFrameOffset);
- ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ m_pEncodeState = gsm_session_create();
+ m_pDecodeState = gsm_session_create();
+ m_szName = "gsm (compression 33:320)";
}
- signal->remove(uTotalDataCompressed);
-}
-
-void KviDccVoiceGsmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
-{
- if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode
-
- unsigned char * ptr = stream->data();
-
- // Gsm codec
- int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES;
- int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES;
- int uSignalOffset = signal->size();
- unsigned char * endPtr = ptr + (uTotalDataDecompressed);
-
- signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames);
-
- while(ptr != endPtr)
+
+ KviDccVoiceGsmCodec::~KviDccVoiceGsmCodec()
{
- // We don't check the return value here
- // Well..it is either an unrecoverable internal error
- // or a broken frame...
- // but if we receive broken frames over DCC...well....better
- // check the hardware...or the remote codec as well...
- gsm_session_decode(m_pDecodeState,ptr,(short *)(signal->data() + uSignalOffset));
- ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES;
- uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ gsm_session_destroy(m_pEncodeState);
+ gsm_session_destroy(m_pDecodeState);
+ }
+
+ void KviDccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
+ {
+ if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode
+
+ unsigned char * ptr = signal->data();
+
+ int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ int uFrameOffset = stream->size();
+ unsigned char * endPtr = ptr + uTotalDataCompressed;
+
+ stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames);
+
+ while(ptr != endPtr)
+ {
+ gsm_session_encode(m_pEncodeState,(short *)ptr,stream->data() + uFrameOffset);
+ ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ }
+ signal->remove(uTotalDataCompressed);
+ }
+
+ void KviDccVoiceGsmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
+ {
+ if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode
+
+ unsigned char * ptr = stream->data();
+
+ // Gsm codec
+ int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ int uSignalOffset = signal->size();
+ unsigned char * endPtr = ptr + (uTotalDataDecompressed);
+
+ signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames);
+
+ while(ptr != endPtr)
+ {
+ // We don't check the return value here
+ // Well..it is either an unrecoverable internal error
+ // or a broken frame...
+ // but if we receive broken frames over DCC...well....better
+ // check the hardware...or the remote codec as well...
+ gsm_session_decode(m_pDecodeState,ptr,(short *)(signal->data() + uSignalOffset));
+ ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ }
+ stream->remove(uTotalDataDecompressed);
+ }
+
+ int KviDccVoiceGsmCodec::encodedFrameSize()
+ {
+ return GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ }
+
+ int KviDccVoiceGsmCodec::decodedFrameSize()
+ {
+ return GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
}
- stream->remove(uTotalDataDecompressed);
-}
-
-int KviDccVoiceGsmCodec::encodedFrameSize()
-{
- return GSM_PACKED_FRAME_SIZE_IN_BYTES;
-}
-
-int KviDccVoiceGsmCodec::decodedFrameSize()
-{
- return GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
-}
#endif // COMPILE_USE_GSM