Commit graph

1767 commits

Author SHA1 Message Date
Sebastian Dröge
f0b2df49dc onvifmetadataparse: Handle negative running times in debug output 2022-09-27 11:43:54 +00:00
Sebastian Dröge
7479888200 uriplaylistbin: Port example from structopt to clap 2022-09-27 13:30:38 +03:00
Sebastian Dröge
38753b08ac fallbacksrc: Implement support for fallback streams 2022-09-27 12:56:15 +03:00
Sebastian Dröge
00411523d4 fallbackswitch: Make sure to flush/reset pads during pad (de)activation
Otherwise this can potentially deadlock or delay state changes for a
longer time.
2022-09-27 12:56:01 +03:00
Sebastian Dröge
1f7126a8a1 fallbackswitch: Flush and deactivate pads before releasing them 2022-09-27 12:56:01 +03:00
Sebastian Dröge
b6ebad2761 fallbackswitch: Fix lock order problem between state and stream lock
The order is first stream lock, then state lock. Everything else can
lead to deadlocks.
2022-09-27 12:54:21 +03:00
Thibault Saunier
adb4cb8691 tracers: Fix documentation comment using gtk-doc style
So the online documentation works
2022-09-24 16:30:50 -03:00
Sebastian Dröge
692a063528 onvifmetadataparse: Refactor clock/condvar waiting
Always first try draining queued data in the loop and only start waiting
if there's nothing to drain right now. Otherwise data might have to be
drained right now but we still wait and nothing is ever waking up the
source pad task again.

Also make sure to not wait multiple times on the same gst::ClockId but
instead unset it after waiting on it and no new one was scheduled in the
meantime. Future waits on the same ClockId will immediately return and
instead we should wait on the condvar if no new ClockId is available.
2022-09-23 13:26:15 +03:00
Sebastian Dröge
c4d2f4a60a onvifmetadataparse: Start source pad task on StreamStart if needed
Otherwise receiving StreamStart after Eos might keep the source pad task
paused and no new data is ever pushed downstream.
2022-09-23 13:26:15 +03:00
Nirbheek Chauhan
86a19e3765 ci: Include image tag names from the main repo
Now we don't need to keep anything in sync manually.

Also fix the images_template.yml include while we're at it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/875>
2022-09-23 01:54:06 +05:30
Nirbheek Chauhan
814f279eeb ci: Update fedora image to latest tag for new meson
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/874>
2022-09-22 17:18:59 +05:30
François Laignel
0b7259afac Fixes for removal of SpecificFormattedValues ops on ref
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/874>
2022-09-22 12:18:49 +02:00
François Laignel
caefa6d33e net/onvif: update with new gst::Signed features 2022-09-21 17:45:22 +00:00
Mathieu Duponchelle
18f08ae5dc jitterbuffer: fix typo when calculating max_misorder_time 2022-09-21 16:02:54 +02:00
Mac Thi Kieu Van
98fc0d5bd6 ts-jitterbuffer: Declare request-pt-map signal 2022-09-21 11:31:06 +00:00
Sebastian Dröge
c32f0ca12e rtpav1: Specify version helper dependency by path
It's in the same repository after all.
2022-09-21 11:17:44 +03:00
Sebastian Dröge
6a10728d94 aws: Update to aws 0.48/0.18 2022-09-21 11:17:44 +03:00
Mart Raudsepp
4928a2badf dav1ddec: Require dav1d 1.0.0 in meson
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/698
raised the dependency via bumping the dav1d rust crate used, but didn't add
a requirement at meson level, thus with automatic or enabled option for dav1d
it would pass with an older failure, but then during compilation phase fail
with:

  --- stderr
  thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: PkgConfig(`"pkg-config" "--libs" "--cflags" "dav1d" "dav1d >= 1.0.0"` did not exit successfully: exit status: 1
  error: could not find system library 'dav1d' required by the 'dav1d-sys' crate

  --- stderr
  Package dependency requirement 'dav1d >= 1.0.0' could not be satisfied.
  Package 'dav1d' has version '0.8.2', required version is '>= 1.0.0'
  )', /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/dav1d-sys-0.5.0/build.rs:80:10
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
2022-09-19 21:39:14 +00:00
Thibault Saunier
f19af9f760 meson: Use workspace Cargo.toml to find crates path
We were globing recursively during meson run and it was spending 20secs
here in total only to run the dependencies.py script
2022-09-19 20:11:40 +00:00
Nirbheek Chauhan
ced6bcc246 cargo: Update default-members list
hlssink can be built by default because it has no dependencies.

tutorial and rsfile should not be built by default because they are
not very useful, and flavors should not be built by default because
it's very incomplete.
2022-09-18 02:54:44 +05:30
Nirbheek Chauhan
6f7ac75cfc cargo: Sort members and default-members lists 2022-09-18 02:46:08 +05:30
Sebastian Dröge
7e13ea4ba9 fmp4mux: Drop gap buffers before further processing
They would potentially change timestamps and will break in ONVIF mode.
2022-09-16 14:54:33 +03:00
Sebastian Dröge
1fa39d0ab4 onvifmetadatacombiner: Drop gap metadata buffers
They won't have a reference timestamp metadata set and are not useful
for further processing.
2022-09-16 14:54:33 +03:00
Sebastian Dröge
f2893aae0b onvifmetadataparse: Simplify some code 2022-09-16 14:54:33 +03:00
Sebastian Dröge
49602e1e01 onvifmetadataparse: Drop initial buffers until an UTC/running time mapping can be established 2022-09-16 14:54:33 +03:00
Sebastian Dröge
c6d8fec18f onvifmetadataparse: Drop initial buffers if their UTC time would be negative 2022-09-16 14:54:33 +03:00
Sebastian Dröge
28151f2011 onvifmetadataparse: Push buffers from a separate source pad task to guarantee latency and generally improve correctness 2022-09-16 14:54:33 +03:00
Thibault Saunier
21e1756168 docs: Remove cruft 2022-09-15 19:27:52 -03:00
Thibault Saunier
dfc11c545b ci: Build documentation with hotdoc to verify Since markers
We use GStreamer image to build the documentation as it is the simplest
way to ensure that we are testing against the same thing as GStreamer
itself.
2022-09-15 18:33:03 -03:00
Sebastian Dröge
18f3edd3ee Add missing Since markers to new plugins 2022-09-15 09:40:53 +03:00
Jordan Petridis
3f5020ec83 ci: have build jobs depend on either build-* or update-* jobs
followup to 23c07d3c

When we trigger an update pipeline, instead of build-jobs we
replace them update-* jobs. In order for gitlab to not complain
add both of the jobs in the needs array, but mark them as optional
so either of them can be used depending on the usecase.
2022-09-14 15:30:35 +03:00
rajneeshksoni
45962eca1c s3sink, s3src: Max 1 (re)try when retry-duration < request_timeout.
When retry-duration is less than request_timeout, only 1 try
is attempted.
2022-09-13 08:02:54 +00:00
rajneeshksoni
62f76e1e8b s3sink: Dont set call_timeout,call_attempt_timeout is enough with retry.
When call_timeout is triggered, request will fail
irrespective of the retry setting. call_timeout define
max time request can take along with retry.
It can be solved by either setting call_timeout to
retry * call_attempt_timeout or not setting the call_timeout.

As per thread call_attempt and rety setting is enough.
https://github.com/awslabs/aws-sdk-rust/issues/558
2022-09-13 08:02:54 +00:00
François Laignel
1be30b8ecc ts/scheduler: fix shutdown
A strong handle reference was held in the `block_on_priv` `Result`
handler in the thread for the `Scheduler::start` code path, which
lead to the `Handler` strong count not dropping to 0 when it
should, leading to the shutdown request not being triggered.

Use an Arc<AtomicBool> instead of a oneshot channel for shutdown.
The main Future is always polled and never relies on a waker, a
`poll_fn` is cheap and does the job.

Unpark the scheduler after posting a request to shutdown.
2022-09-13 07:29:50 +00:00
François Laignel
ab327be9af ts/scheduler: improve tasks / io & timers polling balance
Set a limit to the nb of task checked before checking the reactor
and the main future again.
2022-09-13 07:29:50 +00:00
François Laignel
d39aabe054 ts/Task: don't drain sub tasks after state transition and iteration
Subtasks are used when current async processing needs to execute
a `Future` via a sync function (eg. a call to a C function).
In this case `Context::block_on` would block the whole `Context`,
leading to a deadlock.

The main use case for this is the `Pad{Src,Sink}` functions:
when we `PadSrc::push` and the peer pad is a `PadSink`, we want
`PadSrc::push` to complete after the async function on the
`PadSink` completes. In this case the `PadSink` async function
is added as a subtask of current scheduler task and
`PadSrc::push` only returns when the subtask is executed.

In `runtime::Task` (`Task` here is the execution Task with a
state machine, not a scheduler task), we used to spawn state
transition actions and iteration loop (leading to a new
scheduler Task). At the time, it seemed convenient for the user
to automatically drain sub tasks after a state transition action
or an iteration. User wouldn't have to worry about this, similarly
to the `Pad{Src,Sink}` case.

In current implementation, the `Task` state machine now operates
directly on the target `Context`. State transtions actions and
the iteration loop are no longer spawned. It seems now useless to
abstract the subtasks draining from the user. Either they
transitively use a mechanism such as `Pad{Src,Sink}` which already
handles this automatically, or they add substasks on purpose, in
which case they know better when subtasks must be drained.
2022-09-13 07:29:50 +00:00
François Laignel
af12bce141 ts/executor: clear the reactor instead of closing it...
... so that it can be reused on current thread for subsequent
Scheduler instantiations (e.g. block_on) without the need to
reallocate internal data structures.
2022-09-13 07:29:50 +00:00
François Laignel
61c62ee1e8 ts/timers: multiple improvements
This commit improves threadshare timers predictability
by better making use of current time slice.

Added a dedicate timer BTreeMap for after timers (those
that are guaranteed to fire no sooner than the expected
instant) so as to avoid previous workaround which added
half the max throttling duration. These timers can now
be checked against the reactor processing instant.

Oneshot timers only need to be polled as `Future`s when
intervals are `Stream`s. This also reduces the size for
oneshot timers and make user call `next` on intervals.
Intervals can also implement `FusedStream`, which can help
when used in features such as `select!`.

Also drop the `time` module, which was kepts for
compatibility when the `executor` was migrated from tokio
based to smol-like.
2022-09-13 07:29:50 +00:00
François Laignel
235ded35fd ts: add feature to add counters for performance evaluation
Add a `tuning` feature which adds counters that help with performance
evaluation. The only counter added so far accumulates the duration a
Scheduler has been parked, which is pretty accurate an indication of
CPU usage of the Scheduler.
2022-09-13 07:29:50 +00:00
François Laignel
72acbebff0 ts/standalone: multiple improvements
- Reworked buffer push.
- Reworked stats.
- Make first elements logs stand out. This make it possible to
  follow what's going on with pipelines containing 1000s of
  elements.
- Actually handle EOS.
- Use more significant defaults.
- Allow building without `clap` feature.
2022-09-13 07:29:50 +00:00
François Laignel
348a1d0207 text/json: use renamed gst feature 'serde' 2022-09-12 20:15:18 +00:00
François Laignel
2355be1cef ts/jitterbuffer: extra robustness for Windows CI
jitterbuffer tests crash on Windows CI sometimes. Activating logs
showed time values which are probably not expected in a regular
environment, but which can happen there. Adding extra robustness
to `next_wakeup` computation seems to fix the problem judging by
the few runs I triggered.
2022-09-12 18:42:34 +00:00
Sebastian Dröge
cc0ef5290f rtpav1depay: Don't unnecessary map RTP payload a second time
`RTPBuffer` already has it mapped internally and can give direct access
to it as byte slice.
2022-09-12 18:14:39 +03:00
Sebastian Dröge
7edc9e656f rtpav1pay: Don't push buffers downstream while holding mutexes
And also push all packets that can be generated as a time as a single
buffer list instead of one by one.
2022-09-12 18:14:39 +03:00
Sebastian Dröge
f9a8e121e1 rtpav1: Remove some unneeded lifetime annotations 2022-09-12 18:14:39 +03:00
Vivienne Watermeier
8d73b5008a Add RTP de/payloader elements for AV1
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/881
2022-09-12 18:14:39 +03:00
Jordan Petridis
2bf5f0bf67 ci: combine windows build jobs
Instead of having a matrix of jobs, use a single job running
all the tests like the linux jobs do.

This helps with improved cache hits as most of the deps are shared
between the builds.
2022-09-12 16:35:56 +03:00
Jordan Petridis
23c07d3cb3 ci: declare the depencency between build jobs
This enables the pipeline to execute jobs asyncronously when
they are ready, regardless if the pipeline stage has finished.
2022-09-12 08:16:10 +00:00
Jordan Petridis
3313a93ff7 ci/linux: also build with --no-default-features
Close #240
2022-09-12 08:16:10 +00:00
Jordan Petridis
165f3a788b ci/windows: Build all the crates at once
In gst-rs we build each crate on its own, since not all
crates share the same features and some conflict with each other.

However currently, that isn't the case in plugins-rs and instead
we can be building all the crates with the same flags and simplify
the the script.

Close #241
2022-09-10 14:29:23 +03:00