void RemotePluginClient::setSampleRate(int s) { writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetSampleRate); writeInt(&m_shmControl->ringBuffer, s); commitWrite(&m_shmControl->ringBuffer); waitForServer(); }
void RemotePluginClient::setCurrentProgram(int n) { writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetCurrentProgram); writeInt(&m_shmControl->ringBuffer, n); commitWrite(&m_shmControl->ringBuffer); waitForServer(); }
void RemotePluginClient::setBufferSize(int s) { if (s == m_bufferSize) return; m_bufferSize = s; sizeShm(); writeOpcode(&m_shmControl->ringBuffer, RemotePluginSetBufferSize); writeInt(&m_shmControl->ringBuffer, s); commitWrite(&m_shmControl->ringBuffer); waitForServer(); }
void RemotePluginClient::process(float **inputs, float **outputs) { //struct timeval start, finish; //gettimeofday(&start, 0); if (m_bufferSize < 0) { std::cerr << "ERROR: RemotePluginClient::setBufferSize must be called before RemotePluginClient::process" << std::endl; return; } if (m_numInputs < 0) { std::cerr << "ERROR: RemotePluginClient::getInputCount must be called before RemotePluginClient::process" << std::endl; return; } if (m_numOutputs < 0) { std::cerr << "ERROR: RemotePluginClient::getOutputCount must be called before RemotePluginClient::process" << std::endl; return; } if (!m_shm) { std::cerr << "ERROR: RemotePluginClient::process: no shared memory region available" << std::endl; return; } size_t blocksz = m_bufferSize * sizeof(float); //!!! put counter in shm to indicate number of blocks processed? // (so we know if we've screwed up) for (int i = 0; i < m_numInputs; ++i) { memcpy(m_shm + i * blocksz, inputs[i], blocksz); } writeOpcode(&m_shmControl->ringBuffer, RemotePluginProcess); commitWrite(&m_shmControl->ringBuffer); waitForServer(); for (int i = 0; i < m_numOutputs; ++i) { memcpy(outputs[i], m_shm + (i + m_numInputs) * blocksz, blocksz); } // std::cout << "process: wrote opcode " << RemotePluginProcess << std::endl; //gettimeofday(&finish, 0); // std::cout << "process: time " << finish.tv_sec - start.tv_sec // << " sec, " << finish.tv_usec - start.tv_usec << " usec" // << std::endl; return; }
virtual void SetUp() { pid_ = fork(); ASSERT_LE(0, pid_) << "failed to fork off server process"; if (pid_ == 0) { runServer(); exit(0); } else { waitForServer(); } }