Smooth streaming with WaveMe

WaveMe relies on stable image streaming for its main mode of operation. Therefore, a great effort has been made to ensure that images are processed efficiently and in parallel with other tasks. This is one of the reasons behind the image pipeline or that the Hartmann module supports two different methods for presenting its wavefront results, one that offers pixel-perfect rendering and another which prioritizes rendering time. There are however limitations if a computer without a dedicated GPU (Graphics Processing Unit), or with a weak integrated graphics unit is used. Examples of such a combination may be and Intel Core i5 processor without support of a dedicated GPU, while a Core i7 will most probably handle the load without any problems.

In those cases, images sent down the pipeline may exhaust, or at least put significant strain on available CPU resources. In most cases, this is due to the needs of graphics resources and computers with dedicated GPU’s will rarely see the problem that this page is about to cover.

If the streaming process appears to be frequently interrupted, resulting in a jumping frames per second (fps) number, chances are that your computer is struggling to keep up with the flow of data. While the streaming function works around this problem internally, by immediately queueing the failed buffer, this work around cannot be used inside the phase-shifting toolbox because of the synchroniation between image streams and actuator movement.

There are other things that may cause this particular problem that are not related to WaveMe or the computer. It may in fact originate from the network infrastructure itself. WaveMe will do what it can to solve it by altering some of the network parameters it has under its control. If, however, the problem persists, there are still solutions but ones that require some action by the user.

If waveme fails to fix this problem more or less immediately, then the reason is probably that due to CPU overload. The packets arriving on the network interface are not captured and put into the streaming buffers before new packets arrive and write over the previous content. To solve this, the drivers offer a priority elevation mechanism and if you see the error (0xE1000014), WaveMe has already tried to use it but priority elevation is a matter not to be taken lightly and, therefore, such an operation is usually considered a privileged operation that require permissions from the system administrator.

On Linux, the solution is described in a README file in the installation directory of the Pylon camera driver. This involves allowing specific users or user groups to elevate thread priorities using pam_limits.so through /etc/security/limits.conf. Although, since the Linux landscape is rather diverse, this may not be enough due to AppArmor or other security restrictions. On Microsoft Windows, it is possible to run WaveMe as an Administrator, but this is generally something to be avoided. It is preferred to solve this by adjusting the Local Security Policy (secpol.msc). Navigate to Local Policies > User Rights Assignment. Find the policy "Adjust memory quotas for a process" or "Increase scheduling priority."

Perhaps the absolutely simplest way to avoid this problem entirely is to use USB3. Although Ethernet has some attractive properties like the possibility to use very long cables, if a few meters is enough, USB3 offers significant plug-and-play simplicity, and what’s even better, this problem does not appear when USB3 camera is used.

When the streaming buffers are exhausted because the image pipeline is unable to return them to the camera at a sufficient rate, the camera will simply wait for one to be returned and the end result is that the image rate will decrease without any other consequences for the end user.

Streaming does not start

If WaveMe only shows one image but does not allow you to stream, then WaveMe must be added to the Windows Firewall. Go to

There, select “Allow and app through firewall”. Then select “Change Settings” which will enable the button “Allow another app …” where you can browse to the install dir of WaveMe and select “waveme.exe”