blob: 8070c006443c9ff02673a94ea4f4a757a5782069 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>VST SDK 2.4: VST Calling Sequences</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="main.html"><span>Main Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="dirs.html"><span>Directories</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
</ul></div>
<h1><a class="anchor" name="sequences">VST Calling Sequences</a></h1><h2><a class="anchor" name="Introduction">
Introduction</a></h2>
The diagrams below illustrate the most important calling sequences taking place between VST host application and plug-in. This is of interest to plug-in developers as well as to host developers.<p>
<hr>
<h2><a class="anchor" name="threading">
Threading issues</a></h2>
In general, processEvents(), startProcess(), stopProcess(), process(), processReplacing() and processDoubleReplacing() are called from a time-critical high priority thread (except for offline processing).<br>
To satisfy realtime constraints for low latency audio processing, memory allocations and lock-based syncronisation should be avoided.<br>
The same applies to setParameter() and setProgram() when playing automation from host. Any others functions are called from UI thread in general.<br>
The host takes care that processing and setup functions are isolated from each other. setSampleRate(), setBlockSize(), setProcessPrecision(), etc. calls occur only in suspended state, i.e. before resume() is called.<p>
<hr>
<h2><a class="anchor" name="sequencediagrams">
Sequence Diagrams</a></h2>
<ul>
<li><a href="#init">Initialization</a></li><li><a href="#termination">Termination</a></li><li><a href="#turnon">Turn On</a></li><li><a href="#turnoff">Turn Off</a></li><li><a href="#sr">Sample rate change</a></li><li><a href="#bs">Block size change</a></li><li><a href="#speaker">Speaker arrangement negotiation</a></li><li><a href="#ios">IO change</a></li><li><a href="#control">Control change</a></li><li><a href="#offline">Offline process</a></li></ul>
<p>
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tr>
<td id="init" valign="top"><div align="center">
<img src="Initialisation.gif" alt="Initialisation.gif">
<p><strong>Figure 3: A plug-in is initialized</strong></p></div>
</td><td id="termination" valign="top"><div align="center">
<img src="Termination.gif" alt="Termination.gif">
<p><strong>Figure 4: A plug-in is terminated</strong></p></div>
</td></tr>
<tr>
<td id="turnon" valign="top"><div align="center">
<img src="TurnOn.gif" alt="TurnOn.gif">
<p><strong>Figure 1: A plug-in is turned on</strong></p></div>
</td><td id="turnoff" valign="top"><div align="center">
<img src="TurnOff.gif" alt="TurnOff.gif">
<p><strong>Figure 2: A plug-in is turned off</strong></p></div>
</td></tr>
<tr>
<td id="sr" valign="top"><div align="center">
<img src="Sampleratechange.gif" alt="Sampleratechange.gif">
<p><strong>Figure 6: The sample rate changed</strong></p></div>
</td><td id="bs" valign="top"><div align="center">
<img src="Blocksizechange.gif" alt="Blocksizechange.gif">
<p><strong>Figure 9: The block size changed</strong></p></div>
</td></tr>
</table>
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tr>
<td id="speaker"><div align="center">
<img src="SpeakerarrangementnegotiationforVSTfx.gif" alt="SpeakerarrangementnegotiationforVSTfx.gif">
<p><strong>Figure 5: The speaker arrangements negotiation between the host and the plug-in</strong></p></div>
</td></tr>
<tr>
<td id="ios"><div align="center">
<img src="IOchange.gif" alt="IOchange.gif">
<p><strong>Figure 7: The number of IOs changed caused e.g. by user interaction</strong></p></div>
</td></tr>
<tr>
<td id="control"><div align="center">
<img src="ControlChanged.gif" alt="ControlChanged.gif">
<p><strong>Figure 8: A control changed within the userinterface of the plug-in</strong></p></div>
</td></tr>
<tr>
<td id="offline"><div align="center">
<img src="Offlineprocessing.gif" alt="Offlineprocessing.gif">
<p><strong>Figure 10: A plug-in processes offline</strong></p></div>
</td></tr>
</table>
<html>
<head>
<title>Empty</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Author" content="mario">
</head>
<body>
<br/>
<hr width="100%" size="2" align="left" />
<div align=left>
Copyright �2006 <a href="http://www.steinberg.net" target="_blank"><u>Steinberg Media Technologies</u></a>.
All Rights Reserved.
</div>
</body>
</html>
|