Files
BCIgui/Masterarbeit/openvibe/sdk-master/toolkit/src/training/ovtkISignalTrial.cpp
T
2021-10-14 13:47:35 +02:00

128 lines
4.5 KiB
C++

#include "ovtkISignalTrial.h"
namespace OpenViBE {
namespace Toolkit {
ISignalTrial& copyHeader(ISignalTrial& trial, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
if (srcTrial != &trial)
{
const size_t nChannel = srcTrial->getChannelCount();
trial.setChannelCount(nChannel);
for (size_t i = 0; i < nChannel; ++i) { trial.setChannelName(i, srcTrial->getChannelName(i)); }
trial.setSamplingRate(srcTrial->getSamplingRate());
}
return trial;
}
ISignalTrial& copy(ISignalTrial& trial, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
// copyHeader(trial, srcTrial);
if (srcTrial != &trial)
{
const size_t nChannel = srcTrial->getChannelCount();
const size_t nSample = srcTrial->getSampleCount();
trial.setSampleCount(nSample, false);
for (size_t i = 0; i < nChannel; ++i) { memcpy(trial.getChannelSampleBuffer(i), srcTrial->getChannelSampleBuffer(i), nSample * sizeof(double)); }
}
return trial;
}
ISignalTrial& selectSamples(ISignalTrial& trial, const size_t sampleStart, const size_t sampleEnd, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
if (srcTrial == &trial) { return trial; } // $$$ NOT YET IMPLEMENTED
// copyHeader(trial, srcTrial);
const size_t nChannel = srcTrial->getChannelCount();
const size_t nSample = sampleEnd - sampleStart;
trial.setSampleCount(nSample, false);
for (size_t i = 0; i < nChannel; ++i)
{
memcpy(trial.getChannelSampleBuffer(i), srcTrial->getChannelSampleBuffer(i) + sampleStart, nSample * sizeof(double));
}
return trial;
}
ISignalTrial& selectTime(ISignalTrial& trial, const uint64_t timeStart, const uint64_t timeEnd, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
if (srcTrial == &trial) { return trial; } // $$$ NOT YET IMPLEMENTED
const size_t sampleStart = size_t((timeStart * srcTrial->getSamplingRate()) >> 32);
const size_t sampleEnd = size_t((timeEnd * srcTrial->getSamplingRate()) >> 32);
return selectSamples(trial, sampleStart, sampleEnd, srcTrial);
}
ISignalTrial& removeSamples(ISignalTrial& trial, const size_t sampleStart, const size_t sampleEnd, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
if (srcTrial == &trial) { return trial; } // $$$ NOT YET IMPLEMENTED
// copyHeader(trial, srcTrial);
const size_t srcNChannel = srcTrial->getChannelCount();
const size_t srcNSample = srcTrial->getSampleCount() - (sampleEnd - sampleStart);
trial.setSampleCount(srcNSample, false);
for (size_t i = 0; i < srcNChannel; ++i)
{
memcpy(trial.getChannelSampleBuffer(i), srcTrial->getChannelSampleBuffer(i), sampleStart * sizeof(double));
memcpy(trial.getChannelSampleBuffer(i) + sampleStart, srcTrial->getChannelSampleBuffer(i) + sampleEnd, (srcNSample - sampleStart) * sizeof(double));
}
return trial;
}
ISignalTrial& removeTime(ISignalTrial& trial, const uint64_t timeStart, const uint64_t timeEnd, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
if (srcTrial == &trial) { return trial; } // $$$ NOT YET IMPLEMENTED
const size_t sampleStart = size_t((timeStart * srcTrial->getSamplingRate()) >> 32);
const size_t sampleEnd = size_t((timeEnd * srcTrial->getSamplingRate()) >> 32);
return removeSamples(trial, sampleStart, sampleEnd, srcTrial);
}
ISignalTrial& insertBufferSamples(ISignalTrial& trial, const size_t sampleStart, const size_t nSample, const double* buffer, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
// copyHeader(trial, srcTrial);
const size_t srcNChannel = srcTrial->getChannelCount();
const size_t srcNSample = srcTrial->getSampleCount();
trial.setSampleCount(srcNSample + nSample, true);
for (size_t i = 0; i < srcNChannel; ++i)
{
if (&trial != srcTrial) { memcpy(trial.getChannelSampleBuffer(i), srcTrial->getChannelSampleBuffer(i), sampleStart * sizeof(double)); }
memcpy(trial.getChannelSampleBuffer(i) + sampleStart + nSample, srcTrial->getChannelSampleBuffer(i), (srcNSample - sampleStart) * sizeof(double));
memcpy(trial.getChannelSampleBuffer(i) + sampleStart, buffer + nSample * i, nSample * sizeof(double));
}
return trial;
}
ISignalTrial& insertBufferTime(ISignalTrial& trial, const uint64_t timeStart, const size_t nSample, const double* buffer, const ISignalTrial* srcTrial)
{
if (srcTrial == nullptr) { srcTrial = &trial; }
const size_t sampleStart = size_t((timeStart * srcTrial->getSamplingRate()) >> 32);
return insertBufferSamples(trial, sampleStart, nSample, buffer, srcTrial);
}
} // namespace Toolkit
} // namespace OpenViBE