Skip to content

Commit e38116a

Browse files
authored
Merge pull request #1290 from prominenceai/v0.31.a.alpha
v0.31.a.alpha
2 parents ecb7ec8 + fd171f8 commit e38116a

File tree

71 files changed

+3477
-1760
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+3477
-1760
lines changed
Loading
165 KB
Loading
351 KB
Loading
Loading
Loading
Loading

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ else
3939
endif
4040

4141
CXX_VERSION:=c++17
42-
DSL_VERSION:='L"v0.31.alpha"'
42+
DSL_VERSION:='L"v0.31.a.alpha"'
4343

4444
GLIB_VERSION:=2.0
4545
GSTREAMER_VERSION:=1.0

README.md

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,30 +50,6 @@ $ sudo cp /usr/local/lib/librdkafka* /opt/nvidia/deepstream/deepstream-7.0/lib
5050
```
5151
See [Error in DeepStream 7.0 installation instructions - symlink fails to create](https://forums.developer.nvidia.com/t/error-in-deepstream-7-0-installation-instructions-symlink-fails-to-create/296026) for more information.
5252

53-
## -- Release Highlights --
54-
55-
The latest release is [v0.31.alpha](/Release%20Notes/v0.31.alpha.md)
56-
57-
### New Component Queue management and monitoring services
58-
All DSL Pipeline Components use a GStream [queue plugin](https://gstreamer.freedesktop.org/documentation/coreelements/queue.html?gi-language=c) to create a new thread boundry for processing. [New services](/docs/api-component.md#component-queue-management) have been added to monitor and control the queue's leaky, current-level, max-size, and min-threshold properties. Callbacks have been added for notification of queue underrun and overrun conditions.
59-
60-
### New Custom Sources and Sinks
61-
New services have been added to create [Custom Video Sources](/docs/api-source.md#custom-video-sources) and [Custom Video Sinks](/docs/api-sink.md#custom-video-sinks) Components using publicly released or proprietary GStreamer plugins.
62-
63-
### New DSL GST Caps Objects
64-
GStreamer caps objects can be created to filter caps for [Custom GST Elements]() used by the [Custom Video Sources](/docs/api-source.md#custom-video-sources), [Custom Components](/docs/api-component.md#custom-components), and [Custom Video Sinks](/docs/api-sink.md#custom-video-sinks)
65-
66-
### All Encode Sinks now support software encoding
67-
**IMPORTANT** this is a breaking change.
68-
69-
The [File Sink](/docs/api-sink.md#dsl_sink_file_new), [Record Sink](/docs/api-sink.md#dsl_sink_record_new), [RTSP Server Sink](/docs/api-sink.md#dsl_sink_rtsp_server_new), and [WebRTC Sink](/docs/api-sink.md#dsl_sink_webrtc_new) now support five types of encoders:
70-
* two hardware; H.264, H.265.
71-
* and now three software; H.264, H.265, and MP4.
72-
73-
The [RTMP Sink](/docs/api-sink.md#dsl_sink_rtmp_new) now supports software and hardware H.264 encoding.
74-
75-
### Extensive memory leak testing has been done.
76-
All (minor) issues found have been resolved.
7753

7854
## Contributing
7955

@@ -130,8 +106,17 @@ Come join us on [Discord](https://discord.gg/MJvY9jjpAK), an informal place to c
130106
* [Message Broker](/docs/api-msg-broker.md)
131107
* [Info API](/docs/api-info.md)
132108
* [Examples](/docs/examples.md)
133-
* [C/C++](/docs/examples-cpp.md)
134-
* [Python](/docs/examples-python.md)
109+
* [Basic Inference Pipelies](/docs/examples-basic-pipelines.md)
110+
* [Multiple Sources, Tilers, and Demuxers](/docs/examples-sources-tiler-demuxer.md)
111+
* [Advanced Inference Pipelies](/docs/examples-advanced-pipelines.md)
112+
* [Smart Recording](/docs/examples-smart-recording.md)
113+
* [Object Detection Event (ODE) Services](/docs/examples-ode-services.md)
114+
* [Encoding Frames to JPEG](/docs/examples-encode-and-save-frame.md)
115+
* [Dewarping and Segmentation](/docs/examples-dewarping-and-segmentation.md)
116+
* [Dynamic Pipelines](/docs/examples-dynamic-pipelines.md)
117+
* [Custom Components](/docs/examples-custom-components.md)
118+
* [Working with OpenCV](/docs/examples-opencv.md)
119+
* [Diagnostics and Utilites](/docs/examples-diagnaostics-and-utilities.md)
135120
* [Tkinter Reference App](/docs/examples-tkinter.md)
136121
* [HTML WebRTC Client](/docs/examples-webrtc-html.md)
137122
* [Using VS Code](/docs/vscode.md)

Release Notes/dsl-releases.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
| Release | Date |
44
| ----------------------------------------------------------- | ----------- |
5+
| [v0.31.a.alpha (patch)](/Release%20Notes/v0.31.a.alpha.md) | 09/16/2024 |
56
| [v0.31.alpha](/Release%20Notes/v0.3`.alpha.md) | 09/04/2024 |
67
| [v0.30.b.alpha (patch)](/Release%20Notes/v0.30.b.alpha.md) | 08/28/2024 |
78
| [v0.30.a.alpha (patch)](/Release%20Notes/v0.30.a.alpha.md) | 07/14/2024 |

Release Notes/v0.31.a.alpha.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# v0.31.a.alpha (patch) Release Notes
2+
**Important!**
3+
* `v0.31.a.alpha` is a **patch** release (patch `a` for the `v0.31.alpha` release).
4+
* Only the documentation and examples have been updated (and improved).
5+
* libdsl.so has not changed in this release.
6+
7+
## Issues closed in this release
8+
* Cleanup, catagorize, and document all DSL Python and C/C++ Examples [#1288](https://github.com/prominenceai/deepstream-services-library/issues/1288)

docs/examples-advanced-pipelines.md

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# Advanced Inference Pipelies
2+
This page documents the following "Advance Inference Pipelines" consiting of
3+
* [Parallel Inference on Selective Streams](#parallel-inference-on-selective-streams)
4+
* [Multiple Pipelines Running in Their Own Thread](#multiple-pipelines-running-in-their-own-thread)
5+
* [Multiple Pipelines with Interpipe Source listening to Pipeline with InterpipeSink](#multiple-pipelines-with-interpipe-source-listening-to-pipeline-with-interpipe-sink)
6+
* [Single Pipeline with Interpipe Source switching between Multiple Pipelines/Sinks](#single-pipeline-with-interpipe-source-switching-between-multiple-pipelinessinks)
7+
8+
<br>
9+
10+
---
11+
12+
### Parallel Inference on Selective Streams
13+
14+
* [`parallel_inference_on_selective_streams.py`](/examples/python/parallel_inference_on_selective_streams.py)
15+
* [`parallel_inference_on_selective_streams.cpp`](/examples/cpp/parallel_inference_on_selective_streams.cpp)
16+
17+
```python
18+
#
19+
# This example shows how to use a Remuxer Component to create parallel branches,
20+
# each with their own Inference Components (Preprocessors, Inference Engines,
21+
# Trackers, for example).
22+
# IMPORTANT! All branches are (currently) using the same model engine and config.
23+
# files, which is not a valid use case. The actual inference components and
24+
# models to use for any specific use cases is beyond the scope of this example.
25+
#
26+
# Each Branch added to the Remuxer can specify which streams to process or
27+
# to process all. Use the Remuxer "branch-add-to" service to add to specific streams.
28+
#
29+
# stream_ids = [0,1]
30+
# dsl_remuxer_branch_add_to('my-remuxer', 'my-branch-0',
31+
# stream_ids, len[stream_ids])
32+
#
33+
# You can use the "branch-add" service if adding to all streams
34+
#
35+
# dsl_remuxer_branch_add('my-remuxer', 'my-branch-0')
36+
#
37+
# In this example, 4 RTSP Sources are added to the Pipeline:
38+
# - branch-1 will process streams [0,1]
39+
# - branch-2 will process streams [1,2]
40+
# - branch-3 will process streams [0,2,3]
41+
#
42+
# Three ODE Instance Triggers are created to trigger on new object instances
43+
# events (i.e. new tracker ids). Each is filtering on a unique class-i
44+
# (vehicle, person, and bicycle).
45+
#
46+
# The ODE Triggers are added to an ODE Handler which is added to the src-pad
47+
# (output) of the Remuxer.
48+
#
49+
# A single ODE Print Action is created and added to each Trigger (shared action).
50+
# Using multiple Print Actions running in parallel -- each writing to the same
51+
# stdout buffer -- will result in the printed data appearing interlaced. A single
52+
# Action with an internal mutex will protect from stdout buffer reentrancy.
53+
#
54+
55+
```
56+
57+
<br>
58+
59+
---
60+
61+
### Multiple Pipelines Running in Their Own Thread
62+
63+
* [`multiple_pipelines.py`](/examples/python/multiple_pipelines.py)
64+
* [`multiple_pipelines.cpp`](/examples/cpp/multiple_pipelines.cpp)
65+
66+
```python
67+
#
68+
# This example demonstrates how to run multple Pipelines, each in their own
69+
# thread, and each with their own main-context and main-loop.
70+
#
71+
# After creating and starting each Pipelines, the script joins each of the
72+
# threads waiting for them to complete - either by EOS message, 'Q' key, or
73+
# Delete Window.
74+
#
75+
```
76+
77+
<br>
78+
79+
---
80+
81+
### Multiple Pipelines with Interpipe Source listening to Pipeline with Interpipe Sink
82+
83+
* [`interpipe_multiple_pipelines_listening_to_single_sink.py`](/examples/python/interpipe_multiple_pipelines_listening_to_single_sink.py)
84+
* [`interpipe_multiple_pipelines_listening_to_single_sink.cpp`](/examples/cpp/interpipe_multiple_pipelines_listening_to_single_sink.cpp)
85+
86+
```python
87+
#
88+
# This script demonstrates how to run multple Pipelines, each with an Interpipe
89+
# Source, both listening to the same Interpipe Sink.
90+
#
91+
# A single Player is created with a File Source and Interpipe Sink. Two Inference
92+
# Pipelines are created to listen to the single Player - shared input stream.
93+
# The two Pipelines can be created with different configs, models, and/or Trackers
94+
# for side-by-side comparison. Both Pipelines run in their own main-loop with their
95+
# own main-context, and have their own Window Sink for viewing and external control.
96+
#
97+
```
98+
<br>
99+
100+
---
101+
102+
### Single Pipeline with Interpipe Source switching between Multiple Pipelines/Sinks
103+
104+
* [`interpipe_single_pipeline_dynamic_switching_between_multiple_sinks.py`](/examples/python/interpipe_single_pipeline_dynamic_switching_between_multiple_sinks.py)
105+
* [`interpipe_single_pipeline_dynamic_switching_between_multiple_sinks.cpp`](/examples/cpp/interpipe_single_pipeline_dynamic_switching_between_multiple_sinks.cpp)
106+
107+
```python
108+
# ------------------------------------------------------------------------------------
109+
# This example demonstrates interpipe dynamic switching. Four DSL Players
110+
# are created, each with a File Source and Interpipe Sink. A single
111+
# inference Pipeline with an Interpipe Source is created as the single listener
112+
#
113+
# The Interpipe Source's "listen_to" setting is updated based on keyboard input.
114+
# The xwindow_key_event_handler (see below) is added to the Pipeline's Window Sink.
115+
# The handler, on key release, sets the "listen_to" setting to the Interpipe Sink
116+
# name that corresponds to the key value - 1 through 4.
117+
```
118+

0 commit comments

Comments
 (0)