# HG changeset patch # User Chris Cannam # Date 1539785922 -3600 # Node ID 776175b737ad1789cf58b51f2a346163efee99e0 # Parent 60ff32818c304789fa136076ade21fa8d93d7b78 When the input domain is FrequencyDomain, the caller is expected to pass in the frequency-domain input - which means they need the additional values for DC and Nyquist. So check this and refuse if absent diff -r 60ff32818c30 -r 776175b737ad vamp-server/simple-server.cpp --- a/vamp-server/simple-server.cpp Wed Oct 17 11:49:31 2018 +0100 +++ b/vamp-server/simple-server.cpp Wed Oct 17 15:18:42 2018 +0100 @@ -520,12 +520,26 @@ } const float **fbuffers = new const float *[channels]; + + bool frequencyDomain = + (preq.plugin->getInputDomain() == Vamp::Plugin::FrequencyDomain); + int blockSize = mapper.getBlockSize(h); + int inputBufferSize; + if (frequencyDomain) { + inputBufferSize = 2 * (blockSize / 2) + 2; + } else { + inputBufferSize = blockSize; + } + for (int i = 0; i < channels; ++i) { - if (int(preq.inputBuffers[i].size()) != mapper.getBlockSize(h)) { + if (int(preq.inputBuffers[i].size()) != inputBufferSize) { ostringstream os; - os << "wrong block size supplied to process (" - << preq.inputBuffers[i].size() - << ", expecting " << mapper.getBlockSize(h) << ")" << ends; + os << "wrong buffer size passed to process call as " + << (frequencyDomain ? "frequency" : "time") + << "-domain input on channel " << i << " with block size " + << blockSize << " (expected " << inputBufferSize + << " values, obtained " << preq.inputBuffers[i].size() + << ")" << ends; delete[] fbuffers; throw runtime_error(os.str()); }