MCPcopy Create free account
hub / github.com/DISTRHO/Cardinal / run

Function run

src/CardinalPlugin.cpp:1168–1292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1166 }
1167
1168 void run(const float** const inputs, float** const outputs, const uint32_t frames,
1169 const MidiEvent* const midiEvents, const uint32_t midiEventCount) override
1170 {
1171 const ScopedDenormalDisable sdd;
1172
1173 rack::contextSet(context);
1174
1175 const bool bypassed = context->bypassed;
1176
1177 {
1178 const TimePosition& timePos(getTimePosition());
1179
1180 bool reset = timePos.playing && (timePos.frame == 0 || d_isDiffHigherThanLimit(fNextExpectedFrame, timePos.frame, (uint64_t)2));
1181
1182 // ignore hosts which cannot supply time frame position
1183 if (context->playing == timePos.playing && timePos.frame == 0 && context->frame == 0)
1184 reset = false;
1185
1186 context->playing = timePos.playing;
1187 context->bbtValid = timePos.bbt.valid;
1188 context->frame = timePos.frame;
1189
1190 if (timePos.bbt.valid)
1191 {
1192 const double samplesPerTick = 60.0 * getSampleRate()
1193 / timePos.bbt.beatsPerMinute
1194 / timePos.bbt.ticksPerBeat;
1195 context->bar = timePos.bbt.bar;
1196 context->beat = timePos.bbt.beat;
1197 context->beatsPerBar = timePos.bbt.beatsPerBar;
1198 context->beatType = timePos.bbt.beatType;
1199 context->barStartTick = timePos.bbt.barStartTick;
1200 context->beatsPerMinute = timePos.bbt.beatsPerMinute;
1201 context->tick = timePos.bbt.tick;
1202 context->ticksPerBeat = timePos.bbt.ticksPerBeat;
1203 context->ticksPerClock = timePos.bbt.ticksPerBeat / timePos.bbt.beatType;
1204 context->ticksPerFrame = 1.0 / samplesPerTick;
1205 context->tickClock = std::fmod(timePos.bbt.tick, context->ticksPerClock);
1206 #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
1207 fMiniReportValues[kCardinalParameterMiniTimeBar - kCardinalParameterStartMini] = timePos.bbt.bar;
1208 fMiniReportValues[kCardinalParameterMiniTimeBeat - kCardinalParameterStartMini] = timePos.bbt.beat;
1209 fMiniReportValues[kCardinalParameterMiniTimeBeatsPerBar - kCardinalParameterStartMini] = timePos.bbt.beatsPerBar;
1210 fMiniReportValues[kCardinalParameterMiniTimeBeatType - kCardinalParameterStartMini] = timePos.bbt.beatType;
1211 fMiniReportValues[kCardinalParameterMiniTimeBarStartTick - kCardinalParameterStartMini] = timePos.bbt.barStartTick;
1212 fMiniReportValues[kCardinalParameterMiniTimeBeatsPerMinute - kCardinalParameterStartMini] = timePos.bbt.beatsPerMinute;
1213 fMiniReportValues[kCardinalParameterMiniTimeTick - kCardinalParameterStartMini] = timePos.bbt.tick;
1214 fMiniReportValues[kCardinalParameterMiniTimeTicksPerBeat - kCardinalParameterStartMini] = timePos.bbt.ticksPerBeat;
1215 #endif
1216 }
1217
1218 context->reset = reset;
1219 fNextExpectedFrame = timePos.playing ? timePos.frame + frames : 0;
1220
1221 #if CARDINAL_VARIANT_MINI && ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
1222 const int flags = (timePos.playing ? 0x1 : 0x0)
1223 | (timePos.bbt.valid ? 0x2 : 0x0)
1224 | (reset ? 0x4 : 0x0);
1225 fMiniReportValues[kCardinalParameterMiniTimeFlags - kCardinalParameterStartMini] = flags;

Callers

nothing calls this directly

Calls 3

stepBlockMethod · 0.80
d_isDiffHigherThanLimitFunction · 0.70
contextSetFunction · 0.50

Tested by

no test coverage detected