diff --git a/BufferInputStream.cpp b/BufferInputStream.cpp deleted file mode 100644 index e4319f7..0000000 --- a/BufferInputStream.cpp +++ /dev/null @@ -1,113 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#include "BufferInputStream.h" -#include -#include -#include -#include - -using namespace tgvoip; - -BufferInputStream::BufferInputStream(unsigned char* data, size_t length){ - this->buffer=data; - this->length=length; - offset=0; -} - -BufferInputStream::~BufferInputStream(){ - -} - - -void BufferInputStream::Seek(size_t offset){ - if(offset>length){ - throw std::out_of_range("Not enough bytes in buffer"); - } - this->offset=offset; -} - -size_t BufferInputStream::GetLength(){ - return length; -} - -size_t BufferInputStream::GetOffset(){ - return offset; -} - -size_t BufferInputStream::Remaining(){ - return length-offset; -} - -unsigned char BufferInputStream::ReadByte(){ - EnsureEnoughRemaining(1); - return (unsigned char)buffer[offset++]; -} - -int32_t BufferInputStream::ReadInt32(){ - EnsureEnoughRemaining(4); - int32_t res=((int32_t)buffer[offset] & 0xFF) | - (((int32_t)buffer[offset+1] & 0xFF) << 8) | - (((int32_t)buffer[offset+2] & 0xFF) << 16) | - (((int32_t)buffer[offset+3] & 0xFF) << 24); - offset+=4; - return res; -} - -int64_t BufferInputStream::ReadInt64(){ - EnsureEnoughRemaining(8); - int64_t res=((int64_t)buffer[offset] & 0xFF) | - (((int64_t)buffer[offset+1] & 0xFF) << 8) | - (((int64_t)buffer[offset+2] & 0xFF) << 16) | - (((int64_t)buffer[offset+3] & 0xFF) << 24) | - (((int64_t)buffer[offset+4] & 0xFF) << 32) | - (((int64_t)buffer[offset+5] & 0xFF) << 40) | - (((int64_t)buffer[offset+6] & 0xFF) << 48) | - (((int64_t)buffer[offset+7] & 0xFF) << 56); - offset+=8; - return res; -} - -int16_t BufferInputStream::ReadInt16(){ - EnsureEnoughRemaining(2); - int16_t res=(uint16_t)buffer[offset] | ((uint16_t)buffer[offset+1] << 8); - offset+=2; - return res; -} - - -int32_t BufferInputStream::ReadTlLength(){ - unsigned char l=ReadByte(); - if(l<254) - return l; - assert(length-offset>=3); - EnsureEnoughRemaining(3); - int32_t res=((int32_t)buffer[offset] & 0xFF) | - (((int32_t)buffer[offset+1] & 0xFF) << 8) | - (((int32_t)buffer[offset+2] & 0xFF) << 16); - offset+=3; - return res; -} - -void BufferInputStream::ReadBytes(unsigned char *to, size_t count){ - EnsureEnoughRemaining(count); - memcpy(to, buffer+offset, count); - offset+=count; -} - -BufferInputStream BufferInputStream::GetPartBuffer(size_t length, bool advance){ - EnsureEnoughRemaining(length); - BufferInputStream s=BufferInputStream(buffer+offset, length); - if(advance) - offset+=length; - return s; -} - -void BufferInputStream::EnsureEnoughRemaining(size_t need){ - if(length-offset -#include - -namespace tgvoip{ -class BufferInputStream{ - -public: - BufferInputStream(unsigned char* data, size_t length); - ~BufferInputStream(); - void Seek(size_t offset); - size_t GetLength(); - size_t GetOffset(); - size_t Remaining(); - unsigned char ReadByte(); - int64_t ReadInt64(); - int32_t ReadInt32(); - int16_t ReadInt16(); - int32_t ReadTlLength(); - void ReadBytes(unsigned char* to, size_t count); - BufferInputStream GetPartBuffer(size_t length, bool advance); - -private: - void EnsureEnoughRemaining(size_t need); - unsigned char* buffer; - size_t length; - size_t offset; -}; -} - -#endif //LIBTGVOIP_BUFFERINPUTSTREAM_H diff --git a/BufferOutputStream.cpp b/BufferOutputStream.cpp deleted file mode 100644 index 1512b5a..0000000 --- a/BufferOutputStream.cpp +++ /dev/null @@ -1,104 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#include "BufferOutputStream.h" -#include -#include - -using namespace tgvoip; - -BufferOutputStream::BufferOutputStream(size_t size){ - buffer=(unsigned char*) malloc(size); - offset=0; - this->size=size; - bufferProvided=false; -} - -BufferOutputStream::BufferOutputStream(unsigned char *buffer, size_t size){ - this->buffer=buffer; - this->size=size; - offset=0; - bufferProvided=true; -} - -BufferOutputStream::~BufferOutputStream(){ - if(!bufferProvided) - free(buffer); -} - -void BufferOutputStream::WriteByte(unsigned char byte){ - this->ExpandBufferIfNeeded(1); - buffer[offset++]=byte; -} - -void BufferOutputStream::WriteInt32(int32_t i){ - this->ExpandBufferIfNeeded(4); - buffer[offset+3]=(unsigned char)((i >> 24) & 0xFF); - buffer[offset+2]=(unsigned char)((i >> 16) & 0xFF); - buffer[offset+1]=(unsigned char)((i >> 8) & 0xFF); - buffer[offset]=(unsigned char)(i & 0xFF); - offset+=4; -} - -void BufferOutputStream::WriteInt64(int64_t i){ - this->ExpandBufferIfNeeded(8); - buffer[offset+7]=(unsigned char)((i >> 56) & 0xFF); - buffer[offset+6]=(unsigned char)((i >> 48) & 0xFF); - buffer[offset+5]=(unsigned char)((i >> 40) & 0xFF); - buffer[offset+4]=(unsigned char)((i >> 32) & 0xFF); - buffer[offset+3]=(unsigned char)((i >> 24) & 0xFF); - buffer[offset+2]=(unsigned char)((i >> 16) & 0xFF); - buffer[offset+1]=(unsigned char)((i >> 8) & 0xFF); - buffer[offset]=(unsigned char)(i & 0xFF); - offset+=8; -} - -void BufferOutputStream::WriteInt16(int16_t i){ - this->ExpandBufferIfNeeded(2); - buffer[offset+1]=(unsigned char)((i >> 8) & 0xFF); - buffer[offset]=(unsigned char)(i & 0xFF); - offset+=2; -} - -void BufferOutputStream::WriteBytes(unsigned char *bytes, size_t count){ - this->ExpandBufferIfNeeded(count); - memcpy(buffer+offset, bytes, count); - offset+=count; -} - -unsigned char *BufferOutputStream::GetBuffer(){ - return buffer; -} - -size_t BufferOutputStream::GetLength(){ - return offset; -} - -void BufferOutputStream::ExpandBufferIfNeeded(size_t need){ - if(offset+need>size){ - if(bufferProvided){ - throw std::out_of_range("buffer overflow"); - } - if(need<1024){ - buffer=(unsigned char *) realloc(buffer, size+1024); - size+=1024; - }else{ - buffer=(unsigned char *) realloc(buffer, size+need); - size+=need; - } - } -} - - -void BufferOutputStream::Reset(){ - offset=0; -} - -void BufferOutputStream::Rewind(size_t numBytes){ - if(numBytes>offset) - throw std::out_of_range("buffer underflow"); - offset-=numBytes; -} diff --git a/BufferOutputStream.h b/BufferOutputStream.h deleted file mode 100644 index fa64408..0000000 --- a/BufferOutputStream.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#ifndef LIBTGVOIP_BUFFEROUTPUTSTREAM_H -#define LIBTGVOIP_BUFFEROUTPUTSTREAM_H - -#include -#include - -namespace tgvoip{ -class BufferOutputStream{ - -public: - BufferOutputStream(size_t size); - BufferOutputStream(unsigned char* buffer, size_t size); - ~BufferOutputStream(); - void WriteByte(unsigned char byte); - void WriteInt64(int64_t i); - void WriteInt32(int32_t i); - void WriteInt16(int16_t i); - void WriteBytes(unsigned char* bytes, size_t count); - unsigned char* GetBuffer(); - size_t GetLength(); - void Reset(); - void Rewind(size_t numBytes); - -private: - void ExpandBufferIfNeeded(size_t need); - unsigned char* buffer; - size_t size; - size_t offset; - bool bufferProvided; -}; -} - -#endif //LIBTGVOIP_BUFFEROUTPUTSTREAM_H diff --git a/BufferPool.cpp b/BufferPool.cpp deleted file mode 100644 index 59c03a5..0000000 --- a/BufferPool.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#include "BufferPool.h" -#include "logging.h" -#include -#include - -using namespace tgvoip; - -BufferPool::BufferPool(unsigned int size, unsigned int count){ - assert(count<=64); - buffers[0]=(unsigned char*) malloc(size*count); - bufferCount=count; - unsigned int i; - for(i=1;isize=size; -} - -BufferPool::~BufferPool(){ - free(buffers[0]); -} - -unsigned char* BufferPool::Get(){ - MutexGuard m(mutex); - int i; - for(i=0;i> i) & 1)){ - usedBuffers|=(1LL << i); - return buffers[i]; - } - } - return NULL; -} - -void BufferPool::Reuse(unsigned char* buffer){ - MutexGuard m(mutex); - int i; - for(i=0;i -#include "threading.h" - -namespace tgvoip{ -class BufferPool{ -public: - BufferPool(unsigned int size, unsigned int count); - ~BufferPool(); - unsigned char* Get(); - void Reuse(unsigned char* buffer); - size_t GetSingleBufferSize(); - size_t GetBufferCount(); - -private: - uint64_t usedBuffers; - int bufferCount; - size_t size; - unsigned char* buffers[64]; - Mutex mutex; -}; -} - -#endif //LIBTGVOIP_BUFFERPOOL_H diff --git a/os/linux/PulseAudioLoader.cpp b/os/linux/PulseAudioLoader.cpp deleted file mode 100644 index d1008e9..0000000 --- a/os/linux/PulseAudioLoader.cpp +++ /dev/null @@ -1,120 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#include "PulseAudioLoader.h" -#include -#include "../../logging.h" - -#define DECLARE_DL_FUNCTION(name) typeof(name)* PulseAudioLoader::_import_##name=NULL -#define CHECK_DL_ERROR(res, msg) if(!res){LOGE(msg ": %s", dlerror()); dlclose(lib); return false;} -#define LOAD_DL_FUNCTION(name) {_import_##name=(typeof(_import_##name))dlsym(lib, #name); CHECK_DL_ERROR(_import_##name, "Error getting entry point for " #name);} - -using namespace tgvoip; - -int PulseAudioLoader::refCount=0; -void* PulseAudioLoader::lib=NULL; - -DECLARE_DL_FUNCTION(pa_threaded_mainloop_new); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_get_api); -DECLARE_DL_FUNCTION(pa_context_new); -DECLARE_DL_FUNCTION(pa_context_set_state_callback); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_lock); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_unlock); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_start); -DECLARE_DL_FUNCTION(pa_context_connect); -DECLARE_DL_FUNCTION(pa_context_get_state); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_wait); -DECLARE_DL_FUNCTION(pa_stream_new); -DECLARE_DL_FUNCTION(pa_stream_set_state_callback); -DECLARE_DL_FUNCTION(pa_stream_set_write_callback); -DECLARE_DL_FUNCTION(pa_stream_connect_playback); -DECLARE_DL_FUNCTION(pa_operation_unref); -DECLARE_DL_FUNCTION(pa_stream_cork); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_stop); -DECLARE_DL_FUNCTION(pa_stream_disconnect); -DECLARE_DL_FUNCTION(pa_stream_unref); -DECLARE_DL_FUNCTION(pa_context_disconnect); -DECLARE_DL_FUNCTION(pa_context_unref); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_free); -DECLARE_DL_FUNCTION(pa_threaded_mainloop_signal); -DECLARE_DL_FUNCTION(pa_stream_begin_write); -DECLARE_DL_FUNCTION(pa_stream_write); -DECLARE_DL_FUNCTION(pa_stream_get_state); -DECLARE_DL_FUNCTION(pa_strerror); -DECLARE_DL_FUNCTION(pa_stream_set_read_callback); -DECLARE_DL_FUNCTION(pa_stream_connect_record); -DECLARE_DL_FUNCTION(pa_stream_peek); -DECLARE_DL_FUNCTION(pa_stream_drop); -DECLARE_DL_FUNCTION(pa_mainloop_new); -DECLARE_DL_FUNCTION(pa_mainloop_get_api); -DECLARE_DL_FUNCTION(pa_mainloop_iterate); -DECLARE_DL_FUNCTION(pa_mainloop_free); -DECLARE_DL_FUNCTION(pa_context_get_sink_info_list); -DECLARE_DL_FUNCTION(pa_context_get_source_info_list); -DECLARE_DL_FUNCTION(pa_operation_get_state); - -bool PulseAudioLoader::IncRef(){ - if(refCount==0){ - lib=dlopen("libpulse.so.0", RTLD_LAZY); - if(!lib) - lib=dlopen("libpulse.so", RTLD_LAZY); - if(!lib){ - LOGE("Error loading libpulse: %s", dlerror()); - return false; - } - } - - LOAD_DL_FUNCTION(pa_threaded_mainloop_new); - LOAD_DL_FUNCTION(pa_threaded_mainloop_get_api); - LOAD_DL_FUNCTION(pa_context_new); - LOAD_DL_FUNCTION(pa_context_set_state_callback); - LOAD_DL_FUNCTION(pa_threaded_mainloop_lock); - LOAD_DL_FUNCTION(pa_threaded_mainloop_unlock); - LOAD_DL_FUNCTION(pa_threaded_mainloop_start); - LOAD_DL_FUNCTION(pa_context_connect); - LOAD_DL_FUNCTION(pa_context_get_state); - LOAD_DL_FUNCTION(pa_threaded_mainloop_wait); - LOAD_DL_FUNCTION(pa_stream_new); - LOAD_DL_FUNCTION(pa_stream_set_state_callback); - LOAD_DL_FUNCTION(pa_stream_set_write_callback); - LOAD_DL_FUNCTION(pa_stream_connect_playback); - LOAD_DL_FUNCTION(pa_operation_unref); - LOAD_DL_FUNCTION(pa_stream_cork); - LOAD_DL_FUNCTION(pa_threaded_mainloop_stop); - LOAD_DL_FUNCTION(pa_stream_disconnect); - LOAD_DL_FUNCTION(pa_stream_unref); - LOAD_DL_FUNCTION(pa_context_disconnect); - LOAD_DL_FUNCTION(pa_context_unref); - LOAD_DL_FUNCTION(pa_threaded_mainloop_free); - LOAD_DL_FUNCTION(pa_threaded_mainloop_signal); - LOAD_DL_FUNCTION(pa_stream_begin_write); - LOAD_DL_FUNCTION(pa_stream_write); - LOAD_DL_FUNCTION(pa_stream_get_state); - LOAD_DL_FUNCTION(pa_strerror); - LOAD_DL_FUNCTION(pa_stream_set_read_callback); - LOAD_DL_FUNCTION(pa_stream_connect_record); - LOAD_DL_FUNCTION(pa_stream_peek); - LOAD_DL_FUNCTION(pa_stream_drop); - LOAD_DL_FUNCTION(pa_mainloop_new); - LOAD_DL_FUNCTION(pa_mainloop_get_api); - LOAD_DL_FUNCTION(pa_mainloop_iterate); - LOAD_DL_FUNCTION(pa_mainloop_free); - LOAD_DL_FUNCTION(pa_context_get_sink_info_list); - LOAD_DL_FUNCTION(pa_context_get_source_info_list); - LOAD_DL_FUNCTION(pa_operation_get_state); - - refCount++; - return true; -} - -void PulseAudioLoader::DecRef(){ - if(refCount>0) - refCount--; - if(refCount==0){ - dlclose(lib); - lib=NULL; - } -} \ No newline at end of file diff --git a/os/linux/PulseAudioLoader.h b/os/linux/PulseAudioLoader.h deleted file mode 100644 index aa34f09..0000000 --- a/os/linux/PulseAudioLoader.h +++ /dev/null @@ -1,109 +0,0 @@ -// -// libtgvoip is free and unencumbered public domain software. -// For more information, see http://unlicense.org or the UNLICENSE file -// you should have received with this source code distribution. -// - -#ifndef LIBTGVOIP_PULSEAUDIOLOADER_H -#define LIBTGVOIP_PULSEAUDIOLOADER_H - -#include - -#define DECLARE_DL_FUNCTION(name) static typeof(name)* _import_##name - -namespace tgvoip{ -class PulseAudioLoader{ -public: - static bool IncRef(); - static void DecRef(); - - DECLARE_DL_FUNCTION(pa_threaded_mainloop_new); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_get_api); - DECLARE_DL_FUNCTION(pa_context_new); - DECLARE_DL_FUNCTION(pa_context_set_state_callback); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_lock); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_unlock); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_start); - DECLARE_DL_FUNCTION(pa_context_connect); - DECLARE_DL_FUNCTION(pa_context_get_state); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_wait); - DECLARE_DL_FUNCTION(pa_stream_new); - DECLARE_DL_FUNCTION(pa_stream_set_state_callback); - DECLARE_DL_FUNCTION(pa_stream_set_write_callback); - DECLARE_DL_FUNCTION(pa_stream_connect_playback); - DECLARE_DL_FUNCTION(pa_operation_unref); - DECLARE_DL_FUNCTION(pa_stream_cork); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_stop); - DECLARE_DL_FUNCTION(pa_stream_disconnect); - DECLARE_DL_FUNCTION(pa_stream_unref); - DECLARE_DL_FUNCTION(pa_context_disconnect); - DECLARE_DL_FUNCTION(pa_context_unref); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_free); - DECLARE_DL_FUNCTION(pa_threaded_mainloop_signal); - DECLARE_DL_FUNCTION(pa_stream_begin_write); - DECLARE_DL_FUNCTION(pa_stream_write); - DECLARE_DL_FUNCTION(pa_stream_get_state); - DECLARE_DL_FUNCTION(pa_strerror); - DECLARE_DL_FUNCTION(pa_stream_set_read_callback); - DECLARE_DL_FUNCTION(pa_stream_connect_record); - DECLARE_DL_FUNCTION(pa_stream_peek); - DECLARE_DL_FUNCTION(pa_stream_drop); - - DECLARE_DL_FUNCTION(pa_mainloop_new); - DECLARE_DL_FUNCTION(pa_mainloop_get_api); - DECLARE_DL_FUNCTION(pa_mainloop_iterate); - DECLARE_DL_FUNCTION(pa_mainloop_free); - DECLARE_DL_FUNCTION(pa_context_get_sink_info_list); - DECLARE_DL_FUNCTION(pa_context_get_source_info_list); - DECLARE_DL_FUNCTION(pa_operation_get_state); - -private: - static void* lib; - static int refCount; -}; -} - -#undef DECLARE_DL_FUNCTION - -#ifdef TGVOIP_IN_AUDIO_IO -#define pa_threaded_mainloop_new PulseAudioLoader::_import_pa_threaded_mainloop_new -#define pa_threaded_mainloop_get_api PulseAudioLoader::_import_pa_threaded_mainloop_get_api -#define pa_context_new PulseAudioLoader::_import_pa_context_new -#define pa_context_set_state_callback PulseAudioLoader::_import_pa_context_set_state_callback -#define pa_threaded_mainloop_lock PulseAudioLoader::_import_pa_threaded_mainloop_lock -#define pa_threaded_mainloop_unlock PulseAudioLoader::_import_pa_threaded_mainloop_unlock -#define pa_threaded_mainloop_start PulseAudioLoader::_import_pa_threaded_mainloop_start -#define pa_context_connect PulseAudioLoader::_import_pa_context_connect -#define pa_context_get_state PulseAudioLoader::_import_pa_context_get_state -#define pa_threaded_mainloop_wait PulseAudioLoader::_import_pa_threaded_mainloop_wait -#define pa_stream_new PulseAudioLoader::_import_pa_stream_new -#define pa_stream_set_state_callback PulseAudioLoader::_import_pa_stream_set_state_callback -#define pa_stream_set_write_callback PulseAudioLoader::_import_pa_stream_set_write_callback -#define pa_stream_connect_playback PulseAudioLoader::_import_pa_stream_connect_playback -#define pa_operation_unref PulseAudioLoader::_import_pa_operation_unref -#define pa_stream_cork PulseAudioLoader::_import_pa_stream_cork -#define pa_threaded_mainloop_stop PulseAudioLoader::_import_pa_threaded_mainloop_stop -#define pa_stream_disconnect PulseAudioLoader::_import_pa_stream_disconnect -#define pa_stream_unref PulseAudioLoader::_import_pa_stream_unref -#define pa_context_disconnect PulseAudioLoader::_import_pa_context_disconnect -#define pa_context_unref PulseAudioLoader::_import_pa_context_unref -#define pa_threaded_mainloop_free PulseAudioLoader::_import_pa_threaded_mainloop_free -#define pa_threaded_mainloop_signal PulseAudioLoader::_import_pa_threaded_mainloop_signal -#define pa_stream_begin_write PulseAudioLoader::_import_pa_stream_begin_write -#define pa_stream_write PulseAudioLoader::_import_pa_stream_write -#define pa_strerror PulseAudioLoader::_import_pa_strerror -#define pa_stream_get_state PulseAudioLoader::_import_pa_stream_get_state -#define pa_stream_set_read_callback PulseAudioLoader::_import_pa_stream_set_read_callback -#define pa_stream_connect_record PulseAudioLoader::_import_pa_stream_connect_record -#define pa_stream_peek PulseAudioLoader::_import_pa_stream_peek -#define pa_stream_drop PulseAudioLoader::_import_pa_stream_drop -#define pa_mainloop_new PulseAudioLoader::_import_pa_mainloop_new -#define pa_mainloop_get_api PulseAudioLoader::_import_pa_mainloop_get_api -#define pa_mainloop_iterate PulseAudioLoader::_import_pa_mainloop_iterate -#define pa_mainloop_free PulseAudioLoader::_import_pa_mainloop_free -#define pa_context_get_sink_info_list PulseAudioLoader::_import_pa_context_get_sink_info_list -#define pa_context_get_source_info_list PulseAudioLoader::_import_pa_context_get_source_info_list -#define pa_operation_get_state PulseAudioLoader::_import_pa_operation_get_state -#endif - -#endif // LIBTGVOIP_PULSEAUDIOLOADER_H \ No newline at end of file