Modify upstream webrtc NetEq to pass bounds information to speex

Just in case

Closes #6334
// FREEBIE
This commit is contained in:
Moxie Marlinspike
2017-03-10 09:28:54 -08:00
parent 057c348d08
commit 8e25689c24
14 changed files with 22 additions and 114 deletions

View File

@@ -102,12 +102,14 @@ int AudioCodec::encode(short *rawData, char* encodedData, int maxEncodedDataLen)
return speex_bits_write(&enc_bits, encodedData, maxEncodedDataLen);
}
int AudioCodec::decode(char* encodedData, int encodedDataLen, short *rawData) {
int rawDataOffset = 0;
int AudioCodec::decode(char* encodedData, int encodedDataLen, short *rawData, size_t decodeMaxSize) {
uint32_t rawDataOffset = 0;
speex_bits_read_from(&dec_bits, encodedData, encodedDataLen);
while (speex_decode_int(dec, &dec_bits, rawData + rawDataOffset) == 0) { // TODO bounds?
while ((rawDataOffset + dec_frame_size <= decodeMaxSize) &&
(speex_decode_int(dec, &dec_bits, rawData + rawDataOffset) == 0))
{
WebRtcAecm_BufferFarend(aecm, rawData + rawDataOffset, dec_frame_size);
rawDataOffset += dec_frame_size;
}

View File

@@ -36,7 +36,7 @@ public:
int init();
int encode(short *rawData, char* encodedData, int encodedDataLen);
int decode(char* encodedData, int encodedDataLen, short* rawData);
int decode(char* encodedData, int encodedDataLen, short* rawData, size_t decodeMaxSize);
int conceal(int frames, short *rawData);
};

View File

@@ -17,10 +17,11 @@ public:
{}
int Decode(const uint8_t* encoded, size_t encoded_len,
int16_t* decoded, SpeechType* speech_type)
int16_t* decoded, size_t decodedMaxSize,
SpeechType* speech_type)
{
*speech_type = kSpeech;
return codec.decode((char*)encoded, encoded_len, decoded);
return codec.decode((char*)encoded, encoded_len, decoded, decodedMaxSize);
}
bool HasDecodePlc() const {