Ensure demodulator always gets even buffer lengths

This commit is contained in:
Charles J. Cliffe
2015-02-16 13:49:04 -05:00
parent 24fe742f8e
commit ddbdd81699
2 changed files with 26 additions and 7 deletions
+26 -1
View File
@@ -70,6 +70,8 @@ void DemodulatorPreThread::threadMain() {
std::vector<liquid_float_complex> in_buf_data;
std::vector<liquid_float_complex> out_buf_data;
liquid_float_complex carrySample; // Keep the stream count even to simplify some demod operations
bool carrySampleFlag = false;
terminated = false;
@@ -197,7 +199,30 @@ void DemodulatorPreThread::threadMain() {
msresamp_crcf_execute(iqResampler, in_buf, bufSize, &resampledData[0], &numWritten);
resamp->setRefCount(1);
resamp->data.assign(resampledData.begin(), resampledData.begin() + numWritten);
bool uneven = (numWritten % 2 != 0);
if (!carrySampleFlag && !uneven) {
resamp->data.assign(resampledData.begin(), resampledData.begin() + numWritten);
carrySampleFlag = false;
} else if (!carrySampleFlag && uneven) {
resamp->data.assign(resampledData.begin(), resampledData.begin() + (numWritten-1));
carrySample = resampledData.back();
carrySampleFlag = true;
} else if (carrySampleFlag && uneven) {
resamp->data.resize(numWritten+1);
resamp->data[0] = carrySample;
memcpy(&resamp->data[1],&resampledData[0],sizeof(liquid_float_complex)*numWritten);
carrySampleFlag = false;
} else if (carrySampleFlag && !uneven) {
resamp->data.resize(numWritten);
resamp->data[0] = carrySample;
memcpy(&resamp->data[1],&resampledData[0],sizeof(liquid_float_complex)*(numWritten-1));
carrySample = resampledData.back();
carrySampleFlag = true;
}
resamp->audioResampleRatio = audioResampleRatio;
resamp->audioResampler = audioResampler;