Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
Added new cvar's REV_HltvCodec, REV_DefaultCodec
  • Loading branch information
s1lentq committed Jul 7, 2017
1 parent 07f5290 commit b83914b
Show file tree
Hide file tree
Showing 23 changed files with 527 additions and 454 deletions.
27 changes: 15 additions & 12 deletions publish.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,25 @@ void _copyFile(String from, String to) {
GradleCppUtils.copyFile(project.file(from), project.file(to), false)
}

task publishPrepareFiles {
doLast {
def pubRootDir = project.file('publish/publishRoot')
if (pubRootDir.exists()) {
if (!pubRootDir.deleteDir()) {
throw new RuntimeException("Failed to delete ${pubRootDir}")
}
task publishPrepareFiles << {
def pubRootDir = project.file('publish/publishRoot')
if (pubRootDir.exists()) {
if (!pubRootDir.deleteDir()) {
throw new RuntimeException("Failed to delete ${pubRootDir}")
}
}

pubRootDir.mkdirs()

pubRootDir.mkdirs()
project.file('publish/publishRoot/revoice/bin/win32').mkdirs()
project.file('publish/publishRoot/revoice/bin/linux32').mkdirs()

project.file('publish/publishRoot/revoice/bin/win32').mkdirs()
project.file('publish/publishRoot/revoice/bin/linux32').mkdirs()
_copyFileToDir('publish/revoice_mm.dll', 'publish/publishRoot/revoice/bin/win32/')
_copyFile('publish/librevoice_mm_i386.so', 'publish/publishRoot/revoice/bin/linux32/revoice_mm_i386.so')

_copyFileToDir('publish/revoice_mm.dll', 'publish/publishRoot/revoice/bin/win32/')
_copyFile('publish/librevoice_mm_i386.so', 'publish/publishRoot/revoice/bin/linux32/revoice_mm_i386.so')
copy {
from 'revoice/dist'
into 'publish/publishRoot/revoice'
}
}

Expand Down
2 changes: 2 additions & 0 deletions revoice/dist/revoice.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
REV_HltvCodec opus // speex, opus
REV_DefaultCodec speex // speex, opus
4 changes: 2 additions & 2 deletions revoice/msvc/revoice.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;REVOICE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir)../src/;$(ProjectDir)../public/;$(ProjectDir)../version/;$(ProjectDir)../include/;$(SolutionDir)../dep/rehlsdk/common/;$(SolutionDir)../dep/rehlsdk/dlls/;$(SolutionDir)../dep/rehlsdk/engine/;$(SolutionDir)../dep/rehlsdk/public/;$(SolutionDir)../dep/silk/include/;$(SolutionDir)../dep/opus/include/;$(SolutionDir)../dep/speex/include/;$(SolutionDir)../dep/metamod/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
</ClCompile>
Expand Down Expand Up @@ -187,7 +187,7 @@ IF EXIST "$(ProjectDir)start_6153.bat" (CALL "$(ProjectDir)start_6153.bat")</Com
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;REVOICE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir)../src/;$(ProjectDir)../public/;$(ProjectDir)../version/;$(ProjectDir)../include/;$(SolutionDir)../dep/rehlsdk/common/;$(SolutionDir)../dep/rehlsdk/dlls/;$(SolutionDir)../dep/rehlsdk/engine/;$(SolutionDir)../dep/rehlsdk/public/;$(SolutionDir)../dep/silk/include/;$(SolutionDir)../dep/opus/include/;$(SolutionDir)../dep/speex/include/;$(SolutionDir)../dep/metamod/;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PrecompiledHeaderFile>precompiled.h</PrecompiledHeaderFile>
</ClCompile>
Expand Down
10 changes: 3 additions & 7 deletions revoice/public/IVoiceCodec.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,15 @@

#include "interface.h"

class IVoiceCodec : public IBaseInterface {
class IGameClient;
class IVoiceCodec: public IBaseInterface {
protected:
virtual ~IVoiceCodec() {
}

virtual ~IVoiceCodec() {}
static const int BYTES_PER_SAMPLE = 2;

public:


// Initialize the object. The uncompressed format is always 8-bit signed mono.
virtual bool Init(int quality) = 0;

virtual void Release() = 0;

// Compress the voice data.
Expand Down
23 changes: 15 additions & 8 deletions revoice/src/SteamP2PCodec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ bool CSteamP2PCodec::Init(int quality)
return m_BackendCodec->Init(quality);
}

void CSteamP2PCodec::SetClient(IGameClient *client)
{
m_Client = client;
}

void CSteamP2PCodec::Release()
{
m_BackendCodec->Release();
Expand All @@ -28,13 +33,13 @@ int CSteamP2PCodec::StreamDecode(const char *pCompressed, int compressedBytes, c

while (readPos < maxReadPos)
{
uint8 opcode = *(uint8*)readPos;
PayLoadType opcode = *(PayLoadType *)readPos;
readPos++;

switch (opcode)
{
// Set sampling rate
case 0xB:
case PLT_SamplingRate:
{
if (readPos + 2 > maxReadPos) {
return 0;
Expand All @@ -43,12 +48,12 @@ int CSteamP2PCodec::StreamDecode(const char *pCompressed, int compressedBytes, c
break;
}
// Voice payload
case 0x04: // silk deprecated
case 0x05: // opus deprecated
case PLT_Silk: // silk deprecated
case PLT_OPUS: // opus deprecated
{
break;
}
case 0x06: // opus plc
case PLT_OPUS_PLC: // opus plc
{
if (readPos + 2 > maxReadPos) {
return 0;
Expand All @@ -67,11 +72,13 @@ int CSteamP2PCodec::StreamDecode(const char *pCompressed, int compressedBytes, c

// Invalid or unknown opcode
default:
LCPrintf(true, "CSteamP2PCodec::StreamDecode() called on client(%d) with unknown voice codec opcode (%d)\n", m_Client->GetId(), opcode);
return 0;
}
}

return 0; // no voice payload in the stream
// no voice payload in the stream
return 0;
}

int CSteamP2PCodec::StreamEncode(const char *pUncompressedBytes, int nSamples, char *pCompressed, int maxCompressedBytes, bool bFinal) const
Expand All @@ -82,11 +89,11 @@ int CSteamP2PCodec::StreamEncode(const char *pUncompressedBytes, int nSamples, c
return 0;
}

*(writePos++) = 0x0B; // Set sampling rate
*(writePos++) = PLT_SamplingRate; // Set sampling rate
*(uint16 *)writePos = 16000;
writePos += 2;

*(writePos++) = 0x04; // Voice payload
*(writePos++) = PLT_Silk; // Voice payload

int compressRes = m_BackendCodec->Compress(pUncompressedBytes, nSamples, writePos + 2, maxCompressedBytes - (1 + 2 + 1 + 2), bFinal);
if (compressRes == 0) {
Expand Down
18 changes: 17 additions & 1 deletion revoice/src/SteamP2PCodec.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,37 @@
#include "revoice_shared.h"
#include "IVoiceCodec.h"

class CSteamP2PCodec : public IVoiceCodec {
class CSteamP2PCodec: public IVoiceCodec {
public:
CSteamP2PCodec(IVoiceCodec *backend);

enum PayLoadType : uint8
{
PLT_Silence = 0, // Number of empty samples, which should be set to NULL.
PLT_UnknownCodec = 1,
PLT_Speex = 2,
PLT_Raw = 3,
PLT_Silk = 4,
PLT_OPUS = 5,
PLT_OPUS_PLC = 6,
PLT_Unknown = 10,
PLT_SamplingRate = 11
};

virtual bool Init(int quality);
virtual void Release();
virtual int Compress(const char *pUncompressedBytes, int nSamples, char *pCompressed, int maxCompressedBytes, bool bFinal);
virtual int Decompress(const char *pCompressed, int compressedBytes, char *pUncompressed, int maxUncompressedBytes);
virtual bool ResetState();

void SetClient(IGameClient *client);
IVoiceCodec *GetCodec() const { return m_BackendCodec; }

private:
int StreamDecode(const char *pCompressed, int compressedBytes, char *pUncompressed, int maxUncompressedBytes) const;
int StreamEncode(const char *pUncompressedBytes, int nSamples, char *pCompressed, int maxCompressedBytes, bool bFinal) const;

private:
IGameClient *m_Client;
IVoiceCodec *m_BackendCodec;
};
18 changes: 9 additions & 9 deletions revoice/src/VoiceEncoder_Silk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

VoiceEncoder_Silk::VoiceEncoder_Silk()
{
m_pEncoder = NULL;
m_pDecoder = NULL;
m_pEncoder = nullptr;
m_pDecoder = nullptr;
m_targetRate_bps = 25000;
m_packetLoss_perc = 0;
}
Expand All @@ -12,12 +12,12 @@ VoiceEncoder_Silk::~VoiceEncoder_Silk()
{
if (m_pEncoder) {
free(m_pEncoder);
m_pEncoder = NULL;
m_pEncoder = nullptr;
}

if (m_pDecoder) {
free(m_pDecoder);
m_pDecoder = NULL;
m_pDecoder = nullptr;
}
}

Expand Down Expand Up @@ -97,7 +97,7 @@ int VoiceEncoder_Silk::Compress(const char *pUncompressedIn, int nSamplesIn, cha

while (nSamples > 0)
{
int16* pWritePayloadSize = (int16*)pWritePos;
int16 *pWritePayloadSize = (int16 *)pWritePos;
pWritePos += sizeof(int16); //leave 2 bytes for the frame size (will be written after encoding)

int originalNBytes = (pWritePosMax - pWritePos > 0xFFFF) ? -1 : (pWritePosMax - pWritePos);
Expand All @@ -111,11 +111,11 @@ int VoiceEncoder_Silk::Compress(const char *pUncompressedIn, int nSamplesIn, cha
this->m_encControl.packetSize = 20 * (inSampleRate / 1000);
this->m_encControl.packetLossPercentage = this->m_packetLoss_perc;
this->m_encControl.bitRate = (m_targetRate_bps >= 0) ? m_targetRate_bps : 0;

nSamples -= nSamplesToEncode;

int16 nBytes = originalNBytes;
int res = SKP_Silk_SDK_Encode(this->m_pEncoder, &this->m_encControl, psRead, nSamplesToEncode, (unsigned char*)pWritePos, &nBytes);
int res = SKP_Silk_SDK_Encode(this->m_pEncoder, &this->m_encControl, psRead, nSamplesToEncode, (unsigned char *)pWritePos, &nBytes);
*pWritePayloadSize = nBytes; //write frame size

pWritePos += nBytes;
Expand All @@ -133,7 +133,7 @@ int VoiceEncoder_Silk::Compress(const char *pUncompressedIn, int nSamplesIn, cha
ResetState();

if (pWritePosMax > pWritePos + 2) {
uint16 * pWriteEndFlag = (uint16*)pWritePos;
uint16 *pWriteEndFlag = (uint16*)pWritePos;
pWritePos += sizeof(uint16);
*pWriteEndFlag = 0xFFFF;
}
Expand Down
32 changes: 7 additions & 25 deletions revoice/src/VoiceEncoder_Speex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,18 @@

size_t ENCODED_FRAME_SIZE[] = { 0x6u, 0x6u, 0xFu, 0xFu, 0x14u, 0x14u, 0x1Cu, 0x1Cu, 0x26u, 0x26u, 0x26u };

/* <d91> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:70 */
/*IBaseInterface *CreateSpeexVoiceCodec(void)
{
IFrameEncoder *pEncoder = (IFrameEncoder *)new VoiceEncoder_Speex;
return (IBaseInterface *)CreateVoiceCodec_Frame(pEncoder);
}*/

/* <fb3> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:82 */
VoiceEncoder_Speex::VoiceEncoder_Speex()
{
m_EncoderState = NULL;
m_DecoderState = NULL;
m_EncoderState = nullptr;
m_DecoderState = nullptr;
m_Quality = 0;
}

/* <e20> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:89 */
VoiceEncoder_Speex::~VoiceEncoder_Speex()
{
TermStates();
}

/* <efd> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:94 */
bool VoiceEncoder_Speex::Init(int quality, int &rawFrameSize, int &encodedFrameSize)
{
int postfilter;
Expand Down Expand Up @@ -67,13 +57,11 @@ bool VoiceEncoder_Speex::Init(int quality, int &rawFrameSize, int &encodedFrameS
return true;
}

/* <c06> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:127 */
void VoiceEncoder_Speex::Release()
{
delete this;
}

/* <ce7> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:132 */
void VoiceEncoder_Speex::EncodeFrame(const char *pUncompressedBytes, char *pCompressed)
{
float input[160];
Expand All @@ -88,7 +76,6 @@ void VoiceEncoder_Speex::EncodeFrame(const char *pUncompressedBytes, char *pComp
speex_bits_write(&m_Bits, pCompressed, ENCODED_FRAME_SIZE[m_Quality]);
}

/* <c53> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:156 */
void VoiceEncoder_Speex::DecodeFrame(const char *pCompressed, char *pDecompressedBytes)
{
float output[160];
Expand All @@ -102,7 +89,6 @@ void VoiceEncoder_Speex::DecodeFrame(const char *pCompressed, char *pDecompresse
}
}

/* <c2c> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:175 */
bool VoiceEncoder_Speex::ResetState()
{
speex_encoder_ctl(m_EncoderState, SPEEX_RESET_STATE, 0);
Expand All @@ -111,29 +97,25 @@ bool VoiceEncoder_Speex::ResetState()
return true;
}

/* <fd4> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:182 */
bool VoiceEncoder_Speex::InitStates()
{
speex_bits_init(&m_Bits);
m_EncoderState = speex_encoder_init(&speex_nb_mode);
m_DecoderState = speex_decoder_init(&speex_nb_mode);
return (m_EncoderState != NULL && m_DecoderState != NULL);
return (m_EncoderState != nullptr && m_DecoderState != nullptr);
}

/* <ff6> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:193 */
void VoiceEncoder_Speex::TermStates()
{
if (m_EncoderState != NULL) {
if (m_EncoderState) {
speex_encoder_destroy(m_EncoderState);
m_EncoderState = NULL;
m_EncoderState = nullptr;
}

if (m_DecoderState != NULL) {
if (m_DecoderState) {
speex_encoder_destroy(m_DecoderState);
m_DecoderState = NULL;
m_DecoderState = nullptr;
}

speex_bits_destroy(&m_Bits);
}

//EXPOSE_INTERFACE_FN(CreateSpeexVoiceCodec, VoiceEncoder_Speex, "voice_speex");
26 changes: 5 additions & 21 deletions revoice/src/VoiceEncoder_Speex.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,26 @@
#include "iframeencoder.h"
#include "speex.h"

/* <61c> ../engine/voice_codecs/speex/VoiceEncoder_Speex.h:57 */
class VoiceEncoder_Speex: public IFrameEncoder {
protected:
virtual ~VoiceEncoder_Speex();

public:
VoiceEncoder_Speex();

/* <6c8> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:94 */
bool Init(int quality, int &rawFrameSize, int &encodedFrameSize);

/* <6ff> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:127 */
void Release();

/* <751> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:132 */
void EncodeFrame(const char *pUncompressedBytes, char *pCompressed);

/* <723> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:156 */
void DecodeFrame(const char *pCompressed, char *pDecompressedBytes);

/* <77f> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:175 */
bool ResetState();
virtual bool Init(int quality, int &rawFrameSize, int &encodedFrameSize);
virtual void Release();
virtual void EncodeFrame(const char *pUncompressedBytes, char *pCompressed);
virtual void DecodeFrame(const char *pCompressed, char *pDecompressedBytes);
virtual bool ResetState();

protected:
/* <7a7> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:182 */
bool InitStates();

/* <7c8> ../engine/voice_codecs/speex/VoiceEncoder_Speex.cpp:193 */
void TermStates();

private:
int m_Quality;
void *m_EncoderState;
void *m_DecoderState;
SpeexBits m_Bits;

};

extern IVoiceCodec *CreateVoiceCodec_Frame(IFrameEncoder *pEncoder);
Loading

0 comments on commit b83914b

Please sign in to comment.