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