1 //-----------------------------------------------------------------------------
2 // Project : VST SDK
3 //
4 // Category : Examples
5 // Filename : public.sdk/samples/vst/hostchecker/source/processsetupcheck.cpp
6 // Created by : Steinberg, 12/2012
7 // Description : VST::ProcessSetup check
8 //
9 //-----------------------------------------------------------------------------
10 // LICENSE
11 // (c) 2020, Steinberg Media Technologies GmbH, All Rights Reserved
12 //-----------------------------------------------------------------------------
13 // Redistribution and use in source and binary forms, with or without modification,
14 // are permitted provided that the following conditions are met:
15 //
16 // * Redistributions of source code must retain the above copyright notice,
17 // this list of conditions and the following disclaimer.
18 // * Redistributions in binary form must reproduce the above copyright notice,
19 // this list of conditions and the following disclaimer in the documentation
20 // and/or other materials provided with the distribution.
21 // * Neither the name of the Steinberg Media Technologies nor the names of its
22 // contributors may be used to endorse or promote products derived from this
23 // software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33 // OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34 // OF THE POSSIBILITY OF SUCH DAMAGE.
35 //-----------------------------------------------------------------------------
36
37 #include "processsetupcheck.h"
38 #include "logevents.h"
39
40 //------------------------------------------------------------------------
41 // ProcessSetupCheck
42 //------------------------------------------------------------------------
ProcessSetupCheck()43 ProcessSetupCheck::ProcessSetupCheck () : mEventLogger (nullptr) {}
44
45 //------------------------------------------------------------------------
setProcessSetup(Steinberg::Vst::ProcessSetup setup)46 void ProcessSetupCheck::setProcessSetup (Steinberg::Vst::ProcessSetup setup) { mSetup = setup; }
47
48 //------------------------------------------------------------------------
check(const Steinberg::Vst::ProcessData & data)49 void ProcessSetupCheck::check (const Steinberg::Vst::ProcessData& data)
50 {
51 if (data.symbolicSampleSize != mSetup.symbolicSampleSize)
52 {
53 mEventLogger->addLogEvent (kLogIdInvalidSymbolicSampleSize);
54 }
55
56 if (data.processMode != mSetup.processMode)
57 {
58 // exception toggle between kRealtime kPrefetch
59 if (!((mSetup.processMode == Steinberg::Vst::kRealtime &&
60 data.processMode == Steinberg::Vst::kPrefetch) ||
61 (mSetup.processMode == Steinberg::Vst::kPrefetch &&
62 data.processMode == Steinberg::Vst::kRealtime)))
63 mEventLogger->addLogEvent (kLogIdInvalidProcessMode);
64 }
65
66 if (data.numSamples < 0 || data.numSamples > mSetup.maxSamplesPerBlock)
67 {
68 mEventLogger->addLogEvent (kLogIdInvalidBlockSize);
69 }
70 }
71
72 //------------------------------------------------------------------------
setEventLogger(EventLogger * eventLogger)73 void ProcessSetupCheck::setEventLogger (EventLogger* eventLogger) { mEventLogger = eventLogger; }
74