# EVA SDK IDE User's Manual

Manual Rev.: 1.1

Revision Date: Jul 14, 2021

Part Number: 50M-00011-1010

# Preface

# Copyright

Copyright © 2021 ADLINK Technology, Inc. This document contains proprietary information protected by copyright. All rights are reserved. No part of this manual may be reproduced by any mechanical, electronic, or other means in any form without prior written permission of the manufacturer.

# Disclaimer

The information in this document is subject to change without prior notice in order to improve reliability, design, and function and does not represent a commitment on the part of the manufacturer. In no event will the manufacturer be liable for direct, indirect, special, incidental, or consequential damages arising out of the use or inability to use the product or documentation, even if advised of the possibility of such damages.

# Trademarks

Product names mentioned herein are used for identification purposes only and may be trademarks and/or registered trademarks of their respective companies.

Revision History

<table><tr><td>Revision</td><td>Description</td><td>Date</td></tr><tr><td>1.0</td><td>Initial release</td><td>2021-04-21</td></tr><tr><td>1.1</td><td>Release for EVA SDK R3.5</td><td>2021-07-14</td></tr></table>

# Table of Contents

# Preface....ii

1 Introduction....1
2 EVA SDK IDE User Interface....3

2.1 Introduction....3
2.2 UI Operations....5

3 Create an Empty Canvas....7
4 Creating GStreamer Pipelines....8

4.1 Adding an Element 8
4.2 Deleting Elements....11
4.3 Editing Element Properties 11
4.4 Linking/Unlinking Elements....12
4.5 Pipeline Controls....13
4.6 Collapsing/Expanding Element Properties 13
4.7 Use Cases 14
4.8 Gst Commands....16

5 Reviewing Admetadata Information....17
6 Reviewing GStreamer Pipeline Graphs 19
7 Save/Load a GStreamer Pipeline....21

7.1 Save a GStreamer Pipeline 21
7.2 Load a GStreamer Pipeline 21

8 Whitelist Plugins and Elements ......23
9 Use Limitations....24

Safety Instructions....25

Getting Service....26

This page intentionally left blank.

# 1 Introduction

The ADLINK Edge Vision Analytics (EVA) SDK provides an integrated development environment (IDE) for developers wanting to build computer vision and video analytic solutions with deep learning technology. The EVA SDK IDE is based on PyFlow, a general purpose runtime extendable Python Qt visual scripting framework, to expand the EVA SDK. The EVA SDK IDE allows users to quickly establish GStreamer pipelines and easily modify their properties.

This document introduces the EVA SDK IDE interface including how to generate GStreamer pipelines and how to get admetadata information from ADLINK GStreamer elements. This document does not include information on PyFlowBase features. For more details about the PyFlowBase, refer to https://pyflow.readthedocs.io/en/latest/index.html.

The EVA SDK IDE supports 64-bit Microsoft Windows operating systems. Refer to the EVA SDK Installation Guide for information on installing any additionally required software.

On Windows, after installing the EVA SDK and required software, execute the EVA SDK IDE using one of the following methods:

Method 1: Run the desktop shortcut.

From the Windows Desktop, double-click the EVA SDK IDE icon.

![The image displays a square icon with a dark grey, pixelated background. At the top, the text 'EVA' is written in large, white, bold sans-serif letters. The letter 'V' is stylized as a thick red forward slash. Below this, the text 'IDE' is centered in a smaller, grey sans-serif font.](.eva-sdk-ide-users-manual-50m-00011-1010-11/6bf27ccedab1cf4b9d31406c924c96c0c6300a1539bc862f0aff7aec7d185043.jpg)

The shortcut will automatically set the environment variables and execute the EVA SDK IDE.

Method 2: Manually run the environment variable settings, and then execute the EVA SDK IDE.

Open a command prompt in Windows and run the following command to set the environment variables.

```batch
> C:\ADLINK\gstreamer\setupvars.bat
> C:\ADLINK\eva\scripts\setup_eva_envs.bat
```

Note: The environment variables are removed when the command prompt is closed.

After setting the environment variables, execute the EVA SDK IDE.

```batch
> EVA_IDE.exe
```

On Linux (including x86 and aarch64), after installing the EVA SDK and required software, use the following command to execute the EVA SDK IDE.

```txt
$ source /opt/adlink/eva/scripts/setup_eva_envs.sh
$ EVA_IDE
```

This page intentionally left blank.

# 2 EVA SDK IDE User Interface

This chapter introduces the EVA SDK IDE user interface (UI) and common UI operations.

# 2.1 Introduction

This section is a detailed description of the UI.

![EVA IDE - Untitled*\nFile Tools\nMetadata viewer\nWidth: 320\nHeight: 240\nFormat: RGBA\nExec time(ms): 0.07299097572884908\nroot\nCanvas\nPipeline\nProperties\nsearch...\nBase\nName: videoconvert\nOwning graph: root\nType: PyFlowGstreamer | videoconvert\nInputs\nname: videoconvert0\nqos: ✓\ndither: bayer\ndither-quantization: 1\nchroma-resampler: linear\nalpha-mode: copy\nalpha-value: 1.0\nvideotestsrc\nsrc\nblocksize\nnum-buffers\ntypefind\ndo-timestamp\npattern\ntimestamp-offset\nis-live\nk8\nkx\nky\nkt\nkxt\nkyt\nkxy\nkx2\nky2\nkt2\nxoffset\nyoffset\nforeground-color\nbackground-color\nhorizontal-speed\nanimation-mode\nmotion\nflip\nvideoconvert\nsrc\nsink\nname\nqps\ndither\ndither-quantization\nchrono-resampler\nalpha-mode\nalpha-value\nchrono-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads\ngimagesink\nsink\nname\nasync-handling\nmessage-forward\nsync\nmax-lateness\nqos\nasync\nts-offset\nenable-last-sample\nblocksize\nrender-delay\nthrottle-time\nmax-bitrate\ncontrast\nbrightness\nhue\nsaturation\nrotate-method\nforce-aspect-ratio\nhandle-events\nignore-alpha\nshow-preroll-frame\noutput-multiview-mode\noutput-multiview-downmix-mode](.eva-sdk-ide-users-manual-50m-00011-1010-11/3214c346818d3e728b948f3244f9619fb562ce319887204c3c090bfcff16f49d.jpg)

Figure 1: EVA SDK IDE User Interface (UI)

Table 1: EVA SDK IDE User Interface (UI) Items

<table><tr><td>Item</td><td>Description</td></tr><tr><td>Canvas</td><td>This area is used to edit elements and pipelines.Note:EVA SDK IDE only supports a single canvas to display the graph.</td></tr><tr><td>Element (Node)</td><td>The element is the node from PyFlowGstreamer. Only support the configurable GStreamer element list.</td></tr><tr><td>Pipeline</td><td>Use this area to link the elements as a pipeline.</td></tr><tr><td>GStreamer Control Buttons</td><td>After creating a pipeline, click “Play”, “Pause” or “Stop” to control it.[EATK] Play: plays a GStreamer pipeline&lt;img src="images/ca5a3c5bdcaacdf9288384077bba6eadd50575a337f4255440e7ea56eea04d39.jpg"/&gt; Pause: pauses a GStreamer pipeline.&lt;img src="images/1bfea93a3e936549a0311c5c06f65dc21c56e6446981a632b118bc874251a53e.jpg"/&gt; Stop: stops a GStreamer pipeline.</td></tr><tr><td>Properties</td><td>Select an element to show its editable properties. For more details, refer to Edit Properties of Elements</td></tr><tr><td>Metadata Viewer</td><td>Shows the width, height, format of the video stream, the execution time, and AI information.For more details, refer to How to Review the Admetadata information.</td></tr><tr><td>Alignment Buttons</td><td>Select the nodes and click the alignment button to align them.[AXWG] Aligns the selected nodes to the left node.[KBHX] Aligns the selected nodes to the right node.&lt;img src="images/390e13b230ff9ae2a96989cab700e1e8aad20f432a2752ddf1aa576cce3e3c79.jpg"/&gt; Aligns the selected nodes to the top node.—[0827] Aligns the selected nodes to the bottom node.</td></tr><tr><td>Canvas Screenshot</td><td>[Y20] Takes a screenshot of the canvas and saves the image to file. The default image file format is PNG.Click the down arrow to change the image format.&lt;img src="images/f13d397225ea9ac39c0986e1f61b7bf2bf13c30fb59bdf666f61ec5683fde869.jpg"/&gt;</td></tr></table>

# 2.2 UI Operations

# 2.2.1 Move the Canvas

Method 1: Hold down &lt;Alt&gt; and the left mouse button to drag the canvas.

Method 2: Hold down the middle mouse button to drag the canvas.

# 2.2.2 Zoom the Canvas

Method 1: Scroll the mouse wheel to zoom the canvas.

Method 2: Press &lt;Ctrl&gt; + &lt;= to zoom in the canvas; press &lt;Ctrl&gt; + &lt;-&gt; to zoom out the canvas.

Method 3: Hold down the right mouse button and move the mouse to zoom the canvas.

# 2.2.3 Hotkeys

Quickly zoom in and display a node: Click the node (element) on the canvas and press &lt;F&gt;.

Quickly display all nodes: Press &lt;H&gt;.

This page intentionally left blank.

# 3 Create an Empty Canvas

Method 1: Execute the EVA SDK IDE to start with an empty canvas.

![EVA IDE - Untitled\nFile Tools\nMetadata viewer\nroot\nProperties](.eva-sdk-ide-users-manual-50m-00011-1010-11/7da32a8e58b50ee457d9af27f7233e565e5fa55e7fd11590e466fc20111b599c.jpg)

Method 2: From the File menu, select→ New file, to create an empty canvas.

![File Tools\nNew file\nLoad\nSave\nSave as](.eva-sdk-ide-users-manual-50m-00011-1010-11/eef156b97542793a758d7d5c470689e048367230e16f6d05c4d752dfef945c7f.jpg)

# Note:

New file will clean all elements and pipelines in the canvas.

If a pygraph file has been loaded and then New file is selected, the canvas will be erased, but if Save is selected after modifying the graph, the pygraph file will be overridden. It is recommended that you use Save as to save any changes to a new file.

Refer to Save a GStreamer Pipeline when using Save or Save as with a pygraph file.

# 4 Creating GStreamer Pipelines

This chapter describes how to create and run GStreamer Pipelines in the EVA SDK IDE.

# 4.1 Adding an Element

# 4.1.1 Right-click Method

Use the following steps to add an element using the right-click method.

1. Right click on the canvas.

![enter node name..\n) PyFlowBase\n) PyFlowGstreamer](.eva-sdk-ide-users-manual-50m-00011-1010-11/d5f1b603dbc33fee04a99c9883e61c20dc8b69768499c8cd27b80e490163cc01.jpg)

2. Select PyFlowGstreamer and choose the element, or enter element name in enter node name to search the specified element.

![enter node name..\nPyFlowBase\nPyFlowGstreamer\nadaifiltertemplate\nadbatch\nadmetadata\nadrt\nadtrans\nadvino\napp\nautodetect\nbayer\ncoreelements\n\nvideotest\nPyFlowGstreamer\nvideotestsrc\nvideotestsrc](.eva-sdk-ide-users-manual-50m-00011-1010-11/ed7aa04c9843264c5f61d89cba6df05688e282688df876b43529471dc3b5042d.jpg)

3. Drag the specified element to the canvas.

![videotestsrc\n  name\n  blocksize\n  num-buffers\n  typefind\n  do-timestamp\n  pattern\n  timestamp-offset\n  is-live\n  k0\n  kx\n  ky\n  kt\n  kxt\n  kyt\n  kxy\n  kx2\n  ky2\n  kt2\n  xoffset\n  yoffset\n  foreground-color\n\nvideote\n  PyFlowGstreamer\n    videotestsrc\n        videotestsrc\n\nCreates a test video stream](.eva-sdk-ide-users-manual-50m-00011-1010-11/b0d3fdd9f8fa0bf7263650976457d9e6b3ce4a57818e5e7600a2908f9dc3ae1e.jpg)

# 4.1.2 NodeBox Method

Use the following steps to add an element using the NodeBox method.

1. Tools → PyFlowBase → NodeBox

![EVA IDE - Untitled\nFile\nTools\nPyFlowBase\nHistory\nPyFlowGstreamer\nProperties\nMetadata viewer\nNodeBox\nSearch results\nLogger\nNodeBox\nenter node name..\n) PyFlowBase\n) PyFlowGstreamer](.eva-sdk-ide-users-manual-50m-00011-1010-11/d70effdcad9f91194c0410a3947377ccc30a90f64ef01e3d1afea12fde83451f.jpg)

2. Select PyFlowGstreamer and choose the element, or enter element name in enter node name to search the specified element.

![NodeBox\nenter node name..\n) PyFlowBase\n) PyFlowGstreamer\n) adaifiltertemplate\n) adbatch\n) admetadata\n) adrt\n) adtrans\n) advino\n) app\nNodeBox\nvideotest\n) PyFlowGstreamer\n) videotestsrc\n) videotestsrc](.eva-sdk-ide-users-manual-50m-00011-1010-11/87708c2d04eb3a3b30a90f9ac674e9bc288a6a2e722f6bd62a3652bb04cba6a3.jpg)

3. Drag the specified element to the canvas.

![videotestsrc\n  name\n  blocksize\n  num-buffers\n  typefind\n  do-timestamp\n  pattern\n  timestamp-offset\n  is-live\n  k0\n  kx\n  ky\n  kt\n  kxt\n  kyt\n  kxy\nNodeBox\nvideotes\n  PyFlowGstreamer\n    videotestsrc\n        videotestsrc](.eva-sdk-ide-users-manual-50m-00011-1010-11/1b6b9949d63c1f5eb49df38fda5ce3b71834effa0a2de3da26b1d96d685027b7.jpg)

# 4.1.3 Pin Hint Method

Use the following steps to add an element using the Pin Hint method.

1. Left-click a source pin of an element (such as src pad or sink pad) and drag it to an empty space.

![EVA IDE - Untitled*\nFile Tools\nMetadata viewer\nProperties\nvideoconvert\nsink\nsrc\nname\nqos\ndither\ndither-quantization\nchroma-resampler\nalpha-mode\nalpha-value\nchroma-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads](.eva-sdk-ide-users-manual-50m-00011-1010-11/421a4f8e411b606b0f279308c232fb2568b5d934078427baf9eb6dbd9571d098.jpg)

![videoconvert\nsink\nname\nqos\ndither\ndither-quantization\nchroma-resampler\nalpha-mode\nalpha-value\nchroma-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads](.eva-sdk-ide-users-manual-50m-00011-1010-11/16539bf5c390822f0a28e5bdb83f6c2f6bed3445a5ad31757ff12a8b64d76dca.jpg)

2. The NodeBox will display on the screen. Enter an element name in enter node name to search the specified element.

![FVA IDE - Untitled*\nFile Tools\nMetadata viewer\nroot\nProperties\nenter node name...\nPyFlowCstreamer\nadaffiltertemplate\nadaffiltertemplate\nadbatch\nadsplitbatch\nadvideobatch\nadmetadata\nadmetadebuger\nadmetadrawer\nadmetadumper\nadmetawriter\nadt\nvideoconvert\nn-threads](.eva-sdk-ide-users-manual-50m-00011-1010-11/36c5fc2e4f549072dd348dd843129f6e9213da4f6794ec965b718245b1a7df22.jpg)

![FVA IDE - Untitled*\nFile Tools\nMetadata viewer\nroot\nProperties\nvideotestsrc\nname SRC\nblocksize\nnum-buffers\ntypefind\ndo-timestamp\npattern\ntimestamp-offset\nis-live\nk8\nkx\nky\nkt\nkxt\nkyt\nkyy\nkx2\nky2\nkt2\nxoffset\nyoffset\nforeground-color\nvideoconvert\nsink SRC\nname\nops\ndither\ndither-quantization\nchroma-resampler\nalpha-mode\nalpha-value\nchroma-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads](.eva-sdk-ide-users-manual-50m-00011-1010-11/05121b5d254bc1bb541cfc46a71730ffe1bcf7424046ab30c0ed6622e9fcd801.jpg)

Note: Pin Hint can filter out incompatible pins between two nodes (elements). However, the src pin or sink pin of some elements has a special format that causes another element's pin to not be found via Pin Hint, even when the two elements should be connectable. To fix this issue, use the NodeBox method to search the element and drag it to the canvas and link the elements.

For example, glupload element's src pin cannot find glcolorconvert element via Pin Hint.

# 4.2 Deleting Elements

To delete an element, select it and then press &lt;Delete&gt;.

# 4.3 Editing Element Properties

Note: Properties must be modified when the pipeline state is stopped.

1. Select an element to modify its properties. For example, select videotestsrc to display its properties.

![EVA IDE - Untitled*\nFile Tools\nMetadata viewer\nExec time(ms): 0\nProperties\nsearch...\nBase\nName: videotescr\nOwning graph: root\nType: PyFlowGstreamer | videotescr\nInputs\nname: videotescr0\nblocksize: 4096\nnum-buffers: -1\ntypefind:\ndo-timestamp:\npattern: smpte\ntimestamp-offset: 0\nis-live:\nk0: 0\nroot\nvideotestsrc\n• name                    src\n• blocksize\n• num-buffers\n• typefind\n• do-timestamp\n• pattern\n• timestamp-offset\n• is-live\n• k0\n• kx\n• ky\n• kt\n• kxt\n• kyt\n• kxy](.eva-sdk-ide-users-manual-50m-00011-1010-11/6eebd1b82c4a72418972eae2c739c9c16eba0cbfabcc477e5c6b3d70f2128cdd.jpg)

2. Click pattern, and select ball.

![pattern: smpte\ntimestamp: smpte\nsnow\nblack\nwhite\nred\ngreen\nblue\ncheckers-1\ncheckers-2\ncheckers-4\nis-live:\nk0: 0](.eva-sdk-ide-users-manual-50m-00011-1010-11/c023400c7599c59e9261d8dfd349a9d92a8159f117144b7e707d582f424dd836.jpg)

# 4.4 Linking/Unlinking Elements

# 4.4.1 Linking Elements

To connect elements, left-click the source's element GstPin and drag it to the target's GstPin. GstPin includes src and sink. In the following example, The left figure is a sink GstPin connected to a src GstPin. The right figure is a src GstPin connected to a sink GstPin.

![videotestsrc\n  name\n  blocksize\n  num-buffers\n  typefind\n  do-timestamp\n  pattern\n  timestamp-offset\n  is-live\n  k8\n  kx\n  ky\n  kt\n  kxt\n  kyt\n  kxy\n\nvideoconvert\n  sink\n  name\n  qos\n  dither\n  dither-quantization\n  chroma-resampler\n  alpha-mode\n  alpha-value\n  chroma-mode\n  matrix-mode\n  gamma-mode\n  primaries-mode\n  n-threads](.eva-sdk-ide-users-manual-50m-00011-1010-11/c22c12c749a093a90161f94a033f331776db03e6ac8f87b519b07ad5c1647374.jpg)

![The image displays a block diagram with two main elements connected by a dashed line.\n\n**Left Block:**\n*   **Header:** videotestsrc\n*   **List of items:**\n    *   name\n    *   blocksize\n    *   num-buffers\n    *   typefind\n    *   do-timestamp\n    *   pattern\n    *   timestamp-offset\n    *   is-live\n    *   k0\n    *   kx\n    *   ky\n    *   kt\n    *   kxt\n    *   kyt\n\n**Right Block:**\n*   **Header:** videoconvert\n*   **List of items:**\n    *   sink\n    *   name\n    *   qos\n    *   dither\n    *   dither-quantization\n    *   chroma-resampler\n    *   alpha-mode\n    *   alpha-value\n    *   chroma-mode\n    *   matrix-mode\n    *   gamma-mode\n    *   primaries-mode\n    *   n-threads\n    *   src (located at the top right edge of the block)\n\n**Connections:**\n*   A dashed line connects the **src** pad of the **videotestsrc** block to the **sink** pad of the **videoconvert** block.](.eva-sdk-ide-users-manual-50m-00011-1010-11/2dcf73f8ebd74128a653036433d4ef92aee58d72cab6e03fc7774048e7798dca.jpg)

The following figure is linked.

![This diagram shows two blocks connected by a single line.\n\n**Left Block:**\n*   **Header:** videotestsrc\n*   **Properties:**\n    *   name\n    *   blocksizex\n    *   num-buffers\n    *   typefind\n    *   do-timestamp\n    *   pattern\n    *   timestamp-offset\n    *   is-live\n    *   k0\n    *   kx\n    *   ky\n    *   kt\n    *   kxT\n    *   kyT\n*   **Port:** src (located on the right edge)\n\n**Right Block:**\n*   **Header:** videoconvert\n*   **Properties:**\n    *   sink\n    *   name\n    *   qos\n    *   dither\n    *   dither-quantization\n    *   chroma-resampler\n    *   alpha-mode\n    *   alpha-value\n    *   chroma-mode\n    *   matrix-mode\n    *   gamma-mode\n    *   primaries-mode\n    *   n-threads\n*   **Ports:** sink (located on the left edge) and src (located on the right edge)\n\n**Connections:**\n*   A horizontal yellow line connects the **src** port of the **videotestsrc** block to the **sink** port of the **videoconvert** block.](.eva-sdk-ide-users-manual-50m-00011-1010-11/0791eeb3387dac0680a6f25fcc8df985601c91c14bce42b90e4a9fa4088c02cb.jpg)

Note: If using pin hints, the connection will link automatically.

If the sink GstPin or src GstPin supports multiple streams, such as a tee element that supports multiple output streams, multiple elements can be connected.

![Based on the provided image, here is the accurate and concise description of the flowchart, listing the labeled blocks and their connections verbatim.\n\n**Blocks and Properties:**\n\n1.  **videotestsrc**\n    *   name\n    *   blacklist\n    *   crumb buffers\n    *   typefind\n    *   do-timestamp\n    *   pattern\n    *   timestamp-offset\n    *   is-live\n    *   unk\n    *   nk\n    *   ky\n    *   kx\n    *   kx1\n    *   kx2\n    *   kx3\n    *   kx4\n    *   kx5\n    *   kx6\n    *   foreground-color\n    *   background-color\n    *   horizontal-speed\n    *   animation-mode\n    *   action\n    *   flip\n    *   src\n\n2.  **tee**\n    *   link\n    *   name\n    *   tee-chain\n    *   silent\n    *   pull-mode\n    *   allow-not-linked\n    *   src_0\n    *   src_1\n\n3.  **queue**\n    *   link\n    *   name\n    *   max-size-buffers\n    *   max-size-bytes\n    *   max-size-time\n    *   min-threshold-buffers\n    *   min-threshold-bytes\n    *   min-threshold-time\n    *   leaky\n    *   silent\n    *   flush-on-eos\n    *   src\n\n4.  **queue1**\n    *   link\n    *   name\n    *   max-size-buffers\n    *   max-size-time\n    *   min-threshold-buffers\n    *   min-threshold-bytes\n    *   min-threshold-time\n    *   leaky\n    *   silent\n    *   flush-on-eos\n    *   src\n\n5.  **game**\n    *   link\n    *   name\n    *   qos\n    *   game\n    *   src\n\n6.  **videomixer**\n    *   link\n    *   name\n    *   qos\n    *   dither\n    *   dither-quantization\n    *   chroma-resampler\n    *   alpha-mode\n    *   alpha-value\n    *   chroma-mode\n    *   matrix-mode\n    *   gamma-mode\n    *   priority-mode\n    *   n-threads\n    *   src\n\n7.  **dvdbinlink**\n    *   link\n    *   name\n    *   sync\n    *   max-latency\n    *   qos\n    *   async\n    *   ts-offset\n    *   enable-lat-sample\n    *   blacksize\n    *   render-delay\n    *   throttle-time\n    *   max-activate\n    *   processing-deadline\n    *   show-previl-frame\n    *   force-aspect-ratio\n    *   force-render-window\n    *   stream-close-on-close\n    *   enable-navigation-events\n    *   src\n\n8.  **videomixer1**\n    *   link\n    *   name\n    *   qos\n    *   dither\n    *   dither-quantization\n    *   chroma-resampler\n    *   alpha-mode\n    *   alpha-value\n    *   chroma-mode\n    *   matrix-mode\n    *   gamma-mode\n    *   priority-mode\n    *   n-threads\n    *   src\n\n9.  **dvdbinlink2**\n    *   link\n    *   name\n    *   sync\n    *   max-latency\n    *   qos\n    *   async\n    *   ts-offset\n    *   enable-lat-sample\n    *   blacksize\n    *   render-delay\n    *   throttle-time\n    *   max-activate\n    *   processing-deadline\n    *   show-previl-frame\n    *   force-aspect-ratio\n    *   force-render-window\n    *   stream-close-on-close\n    *   enable-navigation-events\n    *   src\n\n**Connections:**\n\n*   **videotestsrc** `src` connects to **tee** `link`.\n*   **tee** `src_0` connects to **queue** `link`.\n*   **tee** `src_1` connects to **queue1** `link`.\n*   **queue** `src` connects to **game** `link`.\n*   **game** `src` connects to **videomixer** `link`.\n*   **videomixer** `src` connects to **dvdbinlink** `link`.\n*   **queue1** `src` connects to **videomixer1** `link`.\n*   **videomixer1** `src` connects to **dvdbinlink2** `link`.](.eva-sdk-ide-users-manual-50m-00011-1010-11/8b6e90918e970e3e7fa82e5d05c1a7a9ad67b8ff18ad720277289f54ed931273.jpg)

# 4.4.2 Unlinking Elements

Click the connection near sink or src GstPad to unlink the elements.

# 4.5 Pipeline Controls

Note: All operations must be performed when the pipeline is stopped, otherwise unpredictable results can occur.

# 4.5.1 Play a Pipeline

After creating a complete pipeline in the IDE canvas, click the play button (▶) to play the pipeline.

# 4.5.2 Pause a Pipeline

After creating a complete pipeline in the IDE canvas, click the pause button ( $⑪$ ) to pause the pipeline.

# 4.5.3 Stop a Pipeline

After creating and playing a complete pipeline in the IDE canvas, click the stop button (☐) to stop the pipeline.

# 4.6 Collapsing/Expanding Element Properties

Click ↗ to collapse an element, and ↕ to expand it.

![videotestsrc\nsrc\nvideoconvert\nname\nblocksize\nnum-buffers\ntypefind\ndo-timestamp\npattern\ntimestamp-offset\nis-live\nk0](.eva-sdk-ide-users-manual-50m-00011-1010-11/87d9f1b98d528672fcd5a139d4888870550f89ff635c873485f657e933703076.jpg)

# 4.7 Use Cases

This section includes examples on how to use the EVA SDK IDE.

# 4.7.1 Use Case 1

This example describes how to play a test video via OpenGL.

Use the following gst-launch command.

```txt
gst-launch-1.0 videotestsrc ! videoconvert ! glimagesink
```

First, add a videontestscr element, a videoconvert element, and a glimagesink element to the canvas in the EVA SDK IDE. The videotestsrc element must connect to the videoconvert element, and the videoconvert element must connect to the glimagesink element as shown in the figure below.

![Based on the image provided, here are the labeled blocks and their connections:\n\n**Block 1: videotestsrc**\n*   **Properties:** name, blocksize, num-buffers, typefind, do-timestamp, pattern, timestamp-offset, is-live, k0, kx, ky, kt, kxt, kyt, kxy, kt2, kx2, yoffset, xoffset, foreground-color, background-color, horizontal-speed, animation-mode, motion, flip\n*   **Port:** src (yellow dot on the right edge of the header)\n\n**Block 2: videoconvert**\n*   **Properties:** sink, name, qos, dither, dither-quantization, chroma-resampler, alpha-mode, alpha-value, chroma-mode, matrix-mode, gamma-mode, primaries-mode, n-threads\n*   **Ports:** sink (yellow dot on the left edge of the header), src (yellow dot on the right edge of the header)\n\n**Block 3: glimagesink**\n*   **Properties:** sink, name, async-handling, message-forward, sync, max-lateness, qos, async, pts-offset, enable-last-sample, blocksize, render-delay, throttle-time, max-bitrate, contrast, brightness, hue, saturation, rotate-method, force-aspect-ratio, handle-events, ignore-alpha, show-preroll-frame, output-multiview-mode, output-multiview-downmix-mode\n*   **Port:** sink (yellow dot on the left edge of the header)\n\n**Connections:**\n1.  A yellow line connects `videotestsrc` `src` to `videoconvert` `sink`.\n2.  A yellow line connects `videoconvert` `src` to `glimagesink` `sink`.](.eva-sdk-ide-users-manual-50m-00011-1010-11/da4b74edc453534011d067f6c3af8a5adb696e44127b1d04858ae152e67ac926.jpg)

Click the play button to show the video in an OpenGL renderer.

![OpenGL renderer\n-   □   ×](.eva-sdk-ide-users-manual-50m-00011-1010-11/2682e50667d33ca72bebed44bdc933d9cbc632ad9f806d003a1e1f579eb4122d.jpg)

Click the stop button to stop the pipeline.

# 4.7.2 Use Case 2

This example describes how to play a test video with a ball pattern via OpenGL.

```txt
gst-launch-1.0 videotestsrc pattern=ball ! videoconvert ! glimagesink
```

Following from the example in Use Case 1, in the stop state, select the videotestsrc element and modify its pattern property to ball.

![EVA IDE - Untitled*\nFile Tools\nMetadata viewer\nroot\nProperties\nsearch...\nBase\nName: videotestsrc\nOwning graph: root\nType: PyFlowGstreamer | videotestsrc\nInputs\nname: videotestsrc0\nblocksize: 4096\nnum-buffers: -1\ntypefind:\ndo-timestamp:\npattern: ball\ntimestamp-offset: 0\nvideotestsrc\nsrc\nk0\nkx\nky\nkt\nkxt\nkyt\nkxy\nkx2\nky2\nkt2\noffset\nyoffset\nforeground-color\nbackground-color\nhorizontal-speed\nanimation-mode\nmotion\nflip\nvideoconvert\nsink\nname\nqps\ndither\ndither-quantization\nchroma-resampler\nalpha-mode\nalpha-value\nchroma-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads\nglimagesink\nsink\nname\nasync-handling\nmessage-forward\nsync\nmax-lateness\nqos\nasync\nts-offset\nenable-last-sample\nblocksize\nrender-delay\nthrottle-time\nmax-bitrate\ncontrast\nbrightness\nhue\nsaturation\nrotate-method\nforce-aspect-ratio\nhandle-events\nignore-alpha\nshow-preroll-frame\noutput-multiview-mode\noutput-multiview-downmix-mode](.eva-sdk-ide-users-manual-50m-00011-1010-11/613c993134dc43add3e5190e36d976f595ba5a9623e7c9a2ca1335f834cd6405.jpg)

Click the play button to show the ball video in an OpenGL renderer.

![Simple black background with a white circular shape in the top-left corner (no text or symbols)](.eva-sdk-ide-users-manual-50m-00011-1010-11/b9af5f0918e30335068db9f6103bb2ef9103cd2e8e62ca9015c8095bfad5e3b0.jpg)

Click the stop button to stop the pipeline.

# 4.8 Gst Commands

To generate Gst commands from pipelines in the canvas, click Play GStreamer pipeline. When the pipeline's state changes to playing, it will send a play event to trigger gst-command generation. The gst-lauch-1.0 commands will be generated in C:\ADLINK\eva\IDE\command.txt on Windows and /home/&lt;user&gt;/adlink/eva/IDE/command.txt on Linux.

If there is more than one pipeline in the canvas, all of the commands will be included in the file.

In the following example, there are two pipelines in the canvas.

![EVA IDE - Untitled*\nFile Tools\nMetadata viewer\nroot\nProperties\nSearch...\nBase\nName: videotestrc1\nOwning graphs: root\nType: PyFlowGcreamer | videotestrc\nInputs\nname: videotestrc1\nblocksize: 4096\nnum-buffers: -1\ntypefind:\ndo-timestamp:\npattern: ball\ntimestamp-offset: 0\nis-live:\nvideotestsrc\nvideoconvert\ngImagesink\nvideotestsrc1\nsrc\nblocksize\nnum-buffers\ntypefind\ndo-timestamp\npattern\ntimestamp-offset\nis-live\nk0\nkx\nky\nkt\nvideoconvert2\nd3videosink\nActivate Windows\nGo to Settings to active](.eva-sdk-ide-users-manual-50m-00011-1010-11/e157a70639cb29f67fd6dcf0d0ffc800601869f243c65a55e254387783d12fc2.jpg)

After playing, the gst commands are created in command.txt.

![----Pipeline No.1----\ngst-launch-1.0 videotestsrc ! videoconvert ! glimagesink\n\n----Pipeline No.2----\ngst-launch-1.0 videotestsrc pattern=ball ! videoconvert ! d3dvideosink](.eva-sdk-ide-users-manual-50m-00011-1010-11/bdb16a6e1bcf641933a66bf3220591604ce041a6e558a4202708f237571982d4.jpg)

d3dvideosink element only supports Windows. Please use another element such as xvimagesink for testing.

# Notes:

1. The command file will be erased each time GStreamer is played. Be sure to back up command.txt if you want to save the Gst commands.
2. The Gst commands will not generate immediately after clicking the playing pipeline because it is waiting for the play event. For example, a pipeline is playing but a plugin delay occurs that causes an event delay, resulting in the command being generated later when the play event is sent.

# 5 Reviewing Admetadata Information

Admetadata information includes the width, height and format of the video, execution time (ms), and inference information (if any) in the specified element.

After creating a complete pipeline, click ViewImage, or $\phi$ , on the specified element to open its metadata viewer. If there is no video source, the screen will show nolmage.

: Close state.

: Open state.

![The flowchart displays a pipeline with three blocks connected sequentially from left to right.\n\n**Block 1 (Left):**\n*   **Header:** `videotestsrc`\n*   **Internal Text:** `noImage`\n*   **Properties:** `name`, `blocksize`, `num-buffers`, `typefind`, `do-timestamp`, `pattern`, `timestamp-offset`, `is-live`, `k0`, `kx`, `ky`, `kt`, `kxt`, `kyt`, `kxy`, `kx2`, `ky2`, `kt2`, `xoffset`, `yoffset`, `foreground-color`, `background-color`, `horizontal-speed`, `animation-mode`, `motion`, `flip`\n*   **Connection Point:** `src` (output on the right)\n\n**Block 2 (Middle):**\n*   **Header:** `videoconvert`\n*   **Internal Text:** `noImage`\n*   **Properties:** `sink`, `name`, `qos`, `dither`, `dither-quantization`, `chroma-resampler`, `alpha-mode`, `alpha-value`, `chroma-mode`, `matrix-mode`, `gamma-mode`, `primaries-mode`, `n-threads`\n*   **Connection Point:** `src` (output on the right)\n\n**Block 3 (Right):**\n*   **Header:** `glimagesink`\n*   **Internal Text:** `sink`\n*   **Properties:** `name`, `async-handling`, `message-forward`, `max-latency`, `qos`, `async`, `ts-offset`, `enable-last-sample`, `blocksize`, `render-delay`, `throttle-time`, `max-bitrate`, `contrast`, `brightness`, `hue`, `saturation`, `rotate-method`, `force-aspect-ratio`, `handle-events`, `ignore-alpha`, `show-preroll-frame`, `output-multiview-mode`, `output-multiview-downmix-mode`\n\n**Connections:**\n*   A line connects the `src` output of `videotestsrc` to the `sink` input of `videoconvert`.\n*   A line connects the `src` output of `videoconvert` to the `sink` input of `glimagesink`.](.eva-sdk-ide-users-manual-50m-00011-1010-11/8ee25fabc2789cabba56667c1f4aac287f72f008281b4bcbef0fc10268e746b7.jpg)

Click the play button to start the pipeline; the image (if any) will display. Then click the specified element; the metadata viewer will show the Admetadata information.

![videoconvert\nImage will display\nsink\nsrc\nname\nqos\ndither\ndither-quantization\nchroma-resampler\nalpha-mode\nalpha-value\nchroma-mode\nmatrix-mode\ngamma-mode\nprimaries-mode\nn-threads\nMetadata viewer\nWidth: 320\nHeight: 240\nFormat: RGBA\nExec time(ms): 0.06290131629107402\nClick here.\nThe Admetadata information will display in Medata viewer.](.eva-sdk-ide-users-manual-50m-00011-1010-11/db1d1938bf1b8b6b5cc5138301628a48827fd2b6c25169a4c2914c27bfa765ed.jpg)

After playing and showing the admetadata information, you can click the pause button to pause the streams, or click the play button to keep playing them.

# Supported image formats:

• BGR
- BGRA
- BGRX
- RGB
- RGBA
- RGBX
- GRAY8

Note: The pipeline performance will be affected when ViewImage is enabled, such as frame drops and video delays. Enabling ViewImage will increase the latency of the entire pipeline, with performance impact depending on video size and the number of enabled ViewImages. If the latency is too long, the frame timestamp will not match the synchronization plugin, such as ximagesink, resulting in dropped frames.

# 6 Reviewing GStreamer Pipeline Graphs

EVA SDK IDE supports GStreamer pipeline graphs for debugging. For more details, refer to https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c#getting-pipeline-graphs

Note: This function only supports Linux x86 and Linux ARM platforms.

After creating a pipeline, open the pipeline graphviz windows from the menu bar:

Tools → PyFlowGstreamer → Pipeline graphviz

![File\nTools\nPyFlowBase\nPyFlowGstreamer\nMetadata viewer\nPipeline graphviz](.eva-sdk-ide-users-manual-50m-00011-1010-11/a7feefb03602517903aba068f86ec39ea4ae05bfb9417d649244c6dee9365f58.jpg)

Pipeline graphviz will display at the bottom left of the EVA SDK IDE.

![The diagram displays a node-based graph interface with three main blocks connected in a sequence:\n\n**1. Block: videotestsrc**\n*   **Properties:** name, blocksize, num-buffers, typefind, do-timestamp, pattern, timestamp-offset, is-live, k0, kx, ky, kt, kxt, kyt, kxy, kx2, ky2, kt2, xoffset, yoffset, foreground-color, background-color, horizontal-speed, animation-mode, motion, flip.\n*   **Output Port:** src\n\n**2. Block: videoconvert**\n*   **Properties:** sink, name, qos, dither, dither-quantization, chroma-resampler, alpha-mode, alpha-value, chroma-mode, matrix-mode, gamma-mode, primaries-mode, n-threads.\n*   **Ports:** sink, src\n\n**3. Block: ximagesink**\n*   **Properties:** sink, name, sync, max-lateness, qos, async, ts-offset, enable-last-sample, blocksize, render-delay, throttle-time, max-bitrate, show-preroll-frame, display, synchronous, pixel-aspect-ratio, force-aspect-ratio, handle-events, handle-expose.\n*   **Port:** sink\n\n**Connections:**\n*   A line connects the **src** port of **videotestsrc** to the **sink** port of **videoconvert**.\n*   A line connects the **src** port of **videoconvert** to the **sink** port of **ximagesink**.](.eva-sdk-ide-users-manual-50m-00011-1010-11/5a7f9383bf0acdd91e8ac3cd3f62f6e6f3358cb416972b6c0aee25d0307cdad1.jpg)

You can click the ☐ button to split the windows and resize them to view the pipeline graph.

![This image displays a block diagram labeled 'Pipeline graphviz' at the top. The main content is enclosed within a dashed rectangular container labeled `«GstPipeline» pipeline2 (0)`.\n\nInside the container, there are three main blocks connected by arrows flowing from left to right:\n\n**1. Pink Block (Left):**\n*   **Label:** `GstVideoSink videomix`\n*   **Internal Text:**\n    *   `«element»`\n    *   `parent=GstParent`\n    *   `name=*NULL`\n    *   `sink={0}` (displayed in a small box at the bottom)\n*   **Connections:** An arrow enters from the far left edge into this block. Another arrow exits the right side of this block towards the green block.\n\n**2. Green Block (Center):**\n*   **Label:** `GstVideoConvert videomix`\n*   **Internal Text:**\n    *   `«element»`\n    *   `parent=GstPipeline2 pipeline2`\n    *   `name=*NULL`\n    *   `sink={0}` (displayed in a small box on the left side)\n    *   `src={0}` (displayed in a small box on the right side)\n*   **Connections:** An arrow enters from the left (connecting to `sink={0}`). An arrow exits from the right (connecting from `src={0}`) towards the blue block.\n\n**3. Blue Block (Right):**\n*   **Label:** `GstVideoSink videoconvert`\n*   **Internal Text:**\n    *   `«element»`\n    *   `parent=GstPipeline2 pipeline2`\n    *   `name=*NULL`\n    *   `sink={0}` (displayed in a small box at the bottom)\n    *   `src={0}` (displayed in a small box at the bottom right)\n*   **Connections:** An arrow enters from the left (connected from the green block).\n\n**Legend (Bottom Left):**\nA box labeled `Legend` contains the following text:\n*   `Element States: { } void,pending; ( ) NULL; {+} ready; {=} paused; (=) playing`\n*   `Pad-Activation: {-} none; {+} pull; {=} push`\n*   `Pad-Flags: {0}blocked, {1}flushing, {2}blocking, {3}EOS, upper-case is set`\n*   `Pad-Status: (T) has started task, (Z) has paused task`](.eva-sdk-ide-users-manual-50m-00011-1010-11/26d40b6b9181c55c04e8c5c28de834eb620343ef8bb6a91d17af6dd4241d3c52.jpg)

If you modify the pipeline on the canvas, you can click Refresh to reload the new graph.

![Pipeline graphviz\nRefresh](.eva-sdk-ide-users-manual-50m-00011-1010-11/fe8ccdb23956f731df8c2da8f8f49b886944510ea004bc258872b10757105104.jpg)

# 7 Save/Load a GStreamer Pipeline

# 7.1 Save a GStreamer Pipeline

Select File → Save or File → Save as a pygraph file.

![File Tools\nNew file\nLoad\nSave\nSave as\nFile Tools\nNew file\nLoad\nSave\nSave as](.eva-sdk-ide-users-manual-50m-00011-1010-11/d846b24b0369d0a90ab8aaeb89abaa529df7110a1f1d538a2a5e9cd5143755c0.jpg)

# 7.2 Load a GStreamer Pipeline

Select File → Load to load a pygraph file.

![File Tools\nNew file\nLoad\nSave\nSave as](.eva-sdk-ide-users-manual-50m-00011-1010-11/e978aadd15d5fbd82bb2ba7ece0b39cf0bde608e3b5fb2621da13bd13cee4801.jpg)

# Note:

Loading a pygraph file will erase the current elements and pipeline in the canvas. It is recommended that you save the graph before loading another file.

If a pygraph file contains unsupported elements, the elements will not be loaded to the canvas. For example, Windows does not support ximagesink. If a pygraph file includes ximagesink, the canvas will not include it, so you will need to modify the pipeline after loading it.

This page intentionally left blank.

# 8 Whitelist Plugins and Elements

EVA SDK IDE only supports the specified GStreamer elements and plugins. This chapter introduces how to expand elements and plugins (C/C++ based) in the whitelist.

After first running EVA SDK IDE, a whitelist will be generated in C:\ADLINK\eva\IDE\config\element\_list.txt (Windows), or /home/&lt;user&gt;/adlink/eva/IDE/config/element\_list.txt (Linux).

The default content of the element\_list file is empty.

Use the following rules to enable an element or plugin in EVA SDK IDE:

- [Element\_name]
- [Plugin\_name]
• +[Element\_name]
- +[Plugin\_name]

Use the following rule to disable an element or plugin in EVA SDK IDE:

\- -[Element\_name]

For example, add the autovideosink element and disable the rtpdec element:

1. Open element\_list.txt.
2. Enter the following in element\_list.txt.

```txt
+autovideosink
-rtpdec
```

3. Restart EVA SDK IDE.

# Note:

1. Only C/C++-based plugins and elements are supported. Enabling python plugins will result in unpredictable behavior.
2. If other third-party plugins or GStreamer plugins excluded by the default whitelist have any issues, contact the developers directly.

# 9 Use Limitations

# 9.1.1 EVA SDK IDE Limitations

- The EVA SDK IDE does not support custom python plugins/elements.
- The EVA SDK IDE will not retain the dock tools added by users.
- The EVA SDK IDE will not restrict users from mismatched translators to connect the inference models. Confirm that the inference model elements will connect to the matched translator. Otherwise, the incorrect translator may try to access memory without permission, causing the EVA SDK IDE to crash. For example, a Yolo inference model must use the adtrans\_yolo element.
- All operations must be performed when the pipeline is stopped, otherwise unpredictable conditions will occur. To fix this issue, restart the EVA SDK IDE.
- The pipeline performance will be affected when ViewImage is enabled, such as frame drops and video delays.
- If Pin Hint cannot find a specified element because of its special format, use the NodeBox method to search for the element and drag it to the canvas to link the elements.
- On Windows, fpsdisplaysink will work abnormally because the EVA SDK IDE does not support its specific fonts.
- There are graphics and debugging functions in the EVA SDK IDE that cause performance loss. If you would like to pursue optimization, use the command tool (gst-launch).

# 9.1.2 PyFlow Known Issues

- Abnormal mouse operations may make PyFlow crash. To fix this issue, restart the EVA SDK IDE.
- When modifying the properties of a node, the graph will not be marked as edited. Only by dragging or connecting the nodes can the graph be marked as edited.
- When an element's pin has a special capability, it can cause another element's pin to not be found via Pin Hint when the two elements should be connectable.

# 9.1.3 GStreamer Pipeline Limitations

- There cannot be any unlinked source elements such as filesrc in the canvas.
- There cannot be any unlinked sink elements such as autovideosink in the canvas.
- There cannot be any unlinked bin elements such as decodebin in the canvas.

# 9.1.4 glimagesink Element Limitations

- The glimagesink element only supports one object in the pipeline on Windows.
- Only one glimagesink node can be added to the canvas on Windows.
- When adding a GStreamer element to the canvas, a new gstreamer object will be created automatically. If an existing glimagesink element is deleted from the canvas and a new one is added, there will be multiple glimagesink objects.

# Safety Instructions

Read and follow all instructions marked on the product and in the documentation before you operate your system. Retain all safety and operating instructions for future use.

- Please read these safety instructions carefully.
- Please keep this User's Manual for later reference.
- Read the specifications section of this manual for detailed information on the operating environment of this equipment.
- When installing/mounting or uninstalling/removing equipment, turn off the power and unplug any power cords/cables.
• To avoid electrical shock and/or damage to equipment:

- Keep equipment away from water or liquid sources.
- Keep equipment away from high heat or high humidity.
- Keep equipment properly ventilated (do not block or cover ventilation openings).
■ Make sure to use recommended voltage and power source settings.
■ Always install and operate equipment near an easily accessible electrical socket-outlet.
- Secure the power cord (do not place any object on/over the power cord).
- Only install/attach and operate equipment on stable surfaces and/or recommended mountings.
- If the equipment will not be used for long periods of time, turn off and unplug the equipment from its power source.

\- Never attempt to fix the equipment. Equipment should only be serviced by qualified personnel.

# Getting Service

Ask an Expert: http://askanexpert.adlinktech.com

# ADLINK Technology, Inc.

Address: 9F, No.166 Jian Yi Road, Zhonghe District New Taipei City 235, Taiwan

Tel: +886-2-8226-5877

Fax: +886-2-8226-5717

Email: service@adlinktech.com

# Ampro ADLINK Technology, Inc.

Address: 5215 Hellyer Avenue, #110, San Jose, CA 95138, USA

Tel: +1-408-360-0200

Toll Free: +1-800-966-5200 (USA only)

Fax: +1-408-360-0222

Email: info@adlinktech.com

# ADLINK Technology (China) Co., Ltd.

Address: 300 Fang Chun Rd., Zhangjiang Hi-Tech Park, Pudong New Area Shanghai, 201203 China

Tel: +86-21-5132-8988

Fax: +86-21-5132-3588

Email: market@adlinktech.com

# ADLINK Technology GmbH

Address: Hans-Thoma-Straße 11
D-68163 Mannheim, Germany

Tel: +49-621-43214-0

Fax: +49-621 43214-30

Email: germany@adlinktech.com

Please visit the Contact page at www.adlinktech.com for information on how to contact the ADLINK regional office nearest you.
[🔗 Link to the original document](.eva-sdk-ide-users-manual-50m-00011-1010-11/eva-sdk-ide-users-manual-50m-00011-1010-11.pdf)
