# HG changeset patch # User Hasan Yavuz Ă–ZDERYA # Date 2018-07-08 05:50:12 # Node ID cd99f9b81da202b9910a9eb7ebe32f18bbef1142 # Parent e14b76864ac2d07ec21e8b639963db798d9c6921 preliminary implementation of gain and offset diff --git a/src/channelinfomodel.cpp b/src/channelinfomodel.cpp --- a/src/channelinfomodel.cpp +++ b/src/channelinfomodel.cpp @@ -118,6 +118,26 @@ bool ChannelInfoModel::isVisible(unsigne return infos[i].visibility; } +bool ChannelInfoModel::gainEn (unsigned i) const +{ + return infos[i].gainEn; +} + +double ChannelInfoModel::gain (unsigned i) const +{ + return infos[i].gain; +} + +bool ChannelInfoModel::offsetEn (unsigned i) const +{ + return infos[i].offsetEn; +} + +double ChannelInfoModel::offset (unsigned i) const +{ + return infos[i].offset; +} + QStringList ChannelInfoModel::channelNames() const { QStringList r; diff --git a/src/channelinfomodel.h b/src/channelinfomodel.h --- a/src/channelinfomodel.h +++ b/src/channelinfomodel.h @@ -46,6 +46,10 @@ public: QString name (unsigned i) const; QColor color (unsigned i) const; bool isVisible(unsigned i) const; + bool gainEn (unsigned i) const; + double gain (unsigned i) const; + bool offsetEn (unsigned i) const; + double offset (unsigned i) const; /// Returns a list of channel names QStringList channelNames() const; diff --git a/src/stream.cpp b/src/stream.cpp --- a/src/stream.cpp +++ b/src/stream.cpp @@ -154,11 +154,25 @@ void Stream::feedIn(const SamplePack& da { static_cast(xData)->addSamples(data.xData(), ns); } - for (unsigned i = 0; i < numChannels(); i++) + for (unsigned ci = 0; ci < numChannels(); ci++) { - static_cast(channels[i]->yData())->addSamples(data.data(i), ns); + // TODO: check for gainEn and offsetEn + // apply gain and offset + auto rdata = data.data(ci); + auto mdata = new double[sizeof(double) * ns]; + // TODO: add gain&offset access methods to `StreamChannel` + double gain = channels[ci]->info()->gain(ci); + double offset = channels[ci]->info()->offset(ci); + for (int i = 0; i < ns; i++) + { + mdata[i] = rdata[i] * gain + offset; + } + + static_cast(channels[ci]->yData())->addSamples(mdata, ns); + delete[] mdata; } + // TODO: emit modified (gain&offset) data Sink::feedIn(data); emit dataAdded();