From 7dd67518b11462049851ca5ef6a857212013ab83 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Thu, 4 Jun 2020 11:02:19 +0300
Subject: [PATCH] Fix for not enough audio buffer space

---
 components/audio/src/software_encoder.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/components/audio/src/software_encoder.cpp b/components/audio/src/software_encoder.cpp
index 4a135e821..9a5da23a0 100644
--- a/components/audio/src/software_encoder.cpp
+++ b/components/audio/src/software_encoder.cpp
@@ -91,16 +91,20 @@ bool SoftwareEncoder::_encodeOpus(const std::vector<short> &in, ftl::codecs::Pac
 
 	int channels = (cur_stereo_) ? 2 : 1;
 
-	pkt.data.resize(MAX_PACKET_SIZE);
+	int frame_est = (in.size() / (channels*FRAME_SIZE))+1;
+	pkt.data.resize(MAX_PACKET_SIZE*frame_est);
 	int count = 0;
 	int frames = 0;
 
 	unsigned char *outptr = pkt.data.data();
 
+	//LOG(INFO) << "Encode " << (in.size() / (channels*FRAME_SIZE)) << " audio frames";
+
 	for (unsigned int i=0; i<in.size(); i+=channels*FRAME_SIZE) {
 		short *len = (short*)outptr;
 		outptr += 2;
 		int nbBytes = opus_multistream_encode(opus_encoder_, &in.data()[i], FRAME_SIZE, outptr, MAX_PACKET_SIZE);
+		//LOG(INFO) << "Opus encode: " << nbBytes << ", " << (in.size()-i);
 		if (nbBytes <= 0) return false;
 
 		//if (nbBytes > 32000) LOG(WARNING) << "Packet exceeds size limit";
-- 
GitLab