From 4ca4e84547765a9b1527c4c9124fae67b09bccfc Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Mon, 8 Apr 2024 09:58:11 +0300 Subject: [PATCH] - reduce memory consumption when decoding RTP stream + bring back G722 and G729 --- src/engine/audio/Audio_DataWindow.cpp | 178 +++++++++++++------------- src/engine/media/MT_CodecList.cpp | 4 +- src/engine/media/MT_CodecList.h | 4 +- 3 files changed, 93 insertions(+), 93 deletions(-) diff --git a/src/engine/audio/Audio_DataWindow.cpp b/src/engine/audio/Audio_DataWindow.cpp index 6044ff78..f4036154 100644 --- a/src/engine/audio/Audio_DataWindow.cpp +++ b/src/engine/audio/Audio_DataWindow.cpp @@ -10,171 +10,171 @@ using namespace Audio; DataWindow::DataWindow() { - mFilled = 0; - mData = NULL; - mCapacity = 0; + mFilled = 0; + mData = NULL; + mCapacity = 0; } DataWindow::~DataWindow() { - if (mData) - free(mData); + if (mData) + free(mData); } void DataWindow::setCapacity(int capacity) { - Lock l(mMutex); - int tail = capacity - mCapacity; - mData = (char*)realloc(mData, capacity); - if (tail > 0) - memset(mData + mCapacity, 0, tail); - mCapacity = capacity; + Lock l(mMutex); + int tail = capacity - mCapacity; + mData = (char*)realloc(mData, capacity); + if (tail > 0) + memset(mData + mCapacity, 0, tail); + mCapacity = capacity; } void DataWindow::addZero(int length) { - Lock l(mMutex); + Lock l(mMutex); - if (length > mCapacity) - length = mCapacity; + if (length > mCapacity) + length = mCapacity; - int avail = mCapacity - mFilled; + int avail = mCapacity - mFilled; - if (avail < length) - { - memmove(mData, mData + length - avail, mFilled - (length - avail)); - mFilled -= length - avail; - } - memset(mData + mFilled, 0, length); - mFilled += length; + if (avail < length) + { + memmove(mData, mData + length - avail, mFilled - (length - avail)); + mFilled -= length - avail; + } + memset(mData + mFilled, 0, length); + mFilled += length; } void DataWindow::add(const void* data, int length) { - Lock l(mMutex); - - if (length > mCapacity) - { - // Use latest bytes from data buffer in this case. - data = (char*)data + length - mCapacity; - length = mCapacity; - } + Lock l(mMutex); - // Check how much free space we have - int avail = mCapacity - mFilled; + if (length > mCapacity) + { + // Use latest bytes from data buffer in this case. + data = (char*)data + length - mCapacity; + length = mCapacity; + } - if (avail < length) - { - // Find the portion of data to move & save - int delta = length - avail; + // Check how much free space we have + int avail = mCapacity - mFilled; - // Move the data - if (mFilled - delta > 0) - memmove(mData, mData + delta, mFilled - delta); - mFilled -= delta; - } + if (avail < length) + { + // Find the portion of data to move & save + int delta = length - avail; - memcpy(mData + mFilled, data, length); - mFilled += length; + // Move the data + if (mFilled - delta > 0) + memmove(mData, mData + delta, mFilled - delta); + mFilled -= delta; + } + + memcpy(mData + mFilled, data, length); + mFilled += length; } void DataWindow::add(short sample) { - add(&sample, sizeof sample); + add(&sample, sizeof sample); } void DataWindow::erase(int length) { - Lock l(mMutex); - if (length > mFilled) - length = mFilled; - if (length != mFilled) - memmove(mData, mData + length, mFilled - length); - mFilled -= length; + Lock l(mMutex); + if (length > mFilled) + length = mFilled; + if (length != mFilled) + memmove(mData, mData + length, mFilled - length); + mFilled -= length; } const char* DataWindow::data() const { - return mData; + return mData; } char* DataWindow::mutableData() { - return mData; + return mData; } void DataWindow::clear() { - Lock l(mMutex); - mFilled = 0; + Lock l(mMutex); + mFilled = 0; } short DataWindow::shortAt(int index) const { - Lock l(mMutex); - assert(index < mFilled / 2); - return ((short*)mData)[index]; + Lock l(mMutex); + assert(index < mFilled / 2); + return ((short*)mData)[index]; } void DataWindow::setShortAt(short value, int index) { - Lock l(mMutex); - assert(index < mFilled / 2); - ((short*)mData)[index] = value; + Lock l(mMutex); + assert(index < mFilled / 2); + ((short*)mData)[index] = value; } int DataWindow::read(void* buffer, int length) { - Lock l(mMutex); - if (length > mFilled) - length = mFilled; - if (length) - { - if (buffer) - memcpy(buffer, mData, length); - if (length < mFilled) - memmove(mData, mData+length, mFilled - length); - mFilled -= length; - } - return length; + Lock l(mMutex); + if (length > mFilled) + length = mFilled; + if (length) + { + if (buffer) + memcpy(buffer, mData, length); + if (length < mFilled) + memmove(mData, mData+length, mFilled - length); + mFilled -= length; + } + return length; } int DataWindow::filled() const { - Lock l(mMutex); - return mFilled; + Lock l(mMutex); + return mFilled; } void DataWindow::setFilled(int filled) { - Lock l(mMutex); - mFilled = filled; + Lock l(mMutex); + mFilled = filled; } int DataWindow::capacity() const { - Lock l(mMutex); - return mCapacity; + Lock l(mMutex); + return mCapacity; } void DataWindow::zero(int length) { - Lock l(mMutex); - assert(length <= mCapacity); - mFilled = length; - memset(mData, 0, mFilled); + Lock l(mMutex); + assert(length <= mCapacity); + mFilled = length; + memset(mData, 0, mFilled); } void DataWindow::makeStereoFromMono(DataWindow& dst, DataWindow& src) { - Lock lockDst(dst.mMutex), lockSrc(src.mMutex); + Lock lockDst(dst.mMutex), lockSrc(src.mMutex); - dst.setCapacity(src.filled()*2); - short* input = (short*)src.mutableData(); - short* output = (short*)dst.mutableData(); + dst.setCapacity(src.filled()*2); + short* input = (short*)src.mutableData(); + short* output = (short*)dst.mutableData(); - for (int i=0; i