Commit graph

76 commits

Author SHA1 Message Date
Barnabás Pőcze
91b764faac pipewire-v4l2: support choice sizes
Add support for `SPA_CHOICE_{None,Enum,Step,Range}`. They can all
be naturally mapped to `v4l2_frmsizeenum`.
2025-09-08 11:36:24 +00:00
Barnabás Pőcze
3b33f60d2f treewide: map SPA_PROP_exposure to V4L2_CID_EXPOSURE_ABSOLUTE
Currently the v4l2 and libcamera plugins map `SPA_PROP_exposure` in incompatible
ways. So change the v4l2 mapping to `V4L2_CID_EXPOSURE_ABSOLUTE` because at least
that is in units of time (a step closer to addressing #4697), and because that
is more relevant for UVC cameras.

Also change the pipewire-v4l2 translation layer.
2025-09-05 17:26:44 +02:00
Wim Taymans
0d42f11b87 v4l2: delay pipewire init until first openat call
Initialization of PipeWire could happen too early and deadlock in some
cases. Instead, initialize pipewire right before we're going to actually
use it for the first time.

Fixes #4859
2025-09-01 13:33:38 +02:00
Demi Marie Obenour
b04da87e38 pod: check that choices are not empty
Before using the contents of a choice, check that it is not empty to
avoid reading out of bounds.
2025-07-15 10:13:18 +02:00
Wim Taymans
3905e3b3d3 stream: set errno to the current error
Make the state_changed event and _get_state() function set errno with
the current error value if the state is in error, so that application
can use this to give more detailed error reporting.

Use this in alsa, v4l2 and pulse to give some other error codes than
EIO.

Fixes #4574
2025-03-04 13:22:51 +01:00
Wim Taymans
188d920733 pass the right types to the methods
This currently works because we accept void* for these functions but it
will fail when we will use the real types.
2024-11-20 10:17:37 +01:00
Barnabás Pőcze
7674b15fab pipewire-v4l2: move open*() flag check into function
This commit moves the check that determines whether the mode
argument of `open*()` exists into a separate function.

With that, the check is fixed because previously it failed to
account for the fact that `O_TMPFILE` is not a power of two.

Furthermore, add `assert()`s in the fortified variants that
ensure that no mode is required by the specified flags.
2024-06-25 19:10:13 +02:00
Barnabás Pőcze
354387ca58 pipewire-v4l2: redirect to correct functions from fortified variants 2024-05-16 01:53:38 +02:00
Wim Taymans
1c900707a8 v4l2: add bus_info in v4l2_capability if we have it 2024-05-08 17:48:00 +02:00
Steve Langasek
4af8b0f5a7 v4l2: unset _TIME_BITS in addition to _FILE_OFFSET_BITS
The v4l2 build unsets _FILE_OFFSET_BITS, which is not allowed when setting
_TIME_BITS=64.  Having verified that nothing in this module is sensitive to
64-bit time_t (none of the functions it intercepts handle time), we also
unset _TIME_BITS to allow this to build as before.

Signed-off-by: Steve Langasek <steve.langasek@canonical.com>
Reviewed-by: Dylan Aïssi <dylan.aissi@collabora.com>
2024-03-16 09:25:27 +01:00
Jan Alexander Steffens (heftig)
43db03909b ci: ShellCheck preprocessed scripts separately
Change the shellcheck job so that we configure the build and check the
preprocessed versions of the scripts, not the bare ones, which might not
be syntactically valid yet.
2023-09-15 08:49:36 +00:00
Wim Taymans
950c2d2675 v4l2: check for format support 2023-08-01 12:59:35 +02:00
Wim Taymans
0501ef165a spa: add atomic.h and port macros to it 2023-07-13 12:25:22 +02:00
Wim Taymans
1c18e8aa69 handle some error cases 2023-03-16 12:28:29 +01:00
Barnabás Pőcze
934ab3036e treewide: use SPDX tags to specify copyright information
SPDX tags make the licensing information easy to understand and clear,
and they are machine parseable.

See https://spdx.dev for more information.
2023-02-16 10:54:48 +00:00
Dmitry Sharshakov
09f00b5086 v4l2: support setting target source 2023-01-11 11:43:37 +00:00
Dmitry Sharshakov
395749fea9 v4l2: cleanup and simplify
Co-authored-by: Barnabás Pőcze <pobrn@protonmail.com>
2023-01-09 12:27:17 +00:00
Dmitry Sharshakov
996f8a5832 v4l2: ignore symlinks in case of openat passthrough 2023-01-09 12:27:17 +00:00
Dmitry Sharshakov
549e543444 v4l2: report framerate using VIDIOC_G_PARM 2023-01-08 09:12:33 +00:00
Wim Taymans
ed9d3e7320 v4l2: fix some compiler warnings
Compare poiters with NULL and without ordering.
2023-01-06 10:32:25 +01:00
Dmitry Sharshakov
bb23fd787e v4l2: support setting controls 2023-01-03 12:19:14 +00:00
Dmitry Sharshakov
08107f1a02 v4l2: support querying controls 2023-01-03 12:19:14 +00:00
Dmitry Sharshakov
5c96928d12 v4l2: follow symlinks 2023-01-03 12:19:14 +00:00
Dmitry Sharshakov
bb24c8545d pw-uninstalled: make v4l2 easily available 2022-11-08 20:45:50 +00:00
Wim Taymans
8a2e154bae v4l2: turn some info to debug again 2022-11-08 16:37:22 +01:00
Wim Taymans
0d24f6b35f v4l2: Use the node format when available
When the node we try to link to already has a format, return that to the
application because we can't renegotiate to a new format.
2022-11-08 16:25:21 +01:00
Wim Taymans
53796a45cd v4l2: mark the fd as closed instead of -1
Or else we won't be able to close the fd later.
2022-11-08 15:47:55 +01:00
Wim Taymans
332fc0d9a5 v4l2: improve debug 2022-11-07 12:29:54 +01:00
Wim Taymans
6cffabd09d v4l2: don't mmap when the buffer has data already
When the buffer has data (but no fd), don't mmap the buffer but simply
use the data pointer directly.

This makes v4l2 work with inlined buffer memory.
2022-11-07 11:52:02 +01:00
Wim Taymans
6bae31e519 v4l2: pretend a dupped fd is the same as the original one
This makes it possible to reqbufs on a dupped fd with previously
reqbufs.
2022-11-07 11:50:35 +01:00
Wim Taymans
492920ca35 test: add another 6.1 channelmix test
Reorder the bitmask in the natural channel order to avoid confusion.
Add another test with RL/RR/RC channels.

See #2809
2022-11-06 10:57:25 +01:00
Wim Taymans
59f9ed41fb v4l2: use param_info to track param updates 2022-11-05 14:01:27 +01:00
Wim Taymans
11ab47e4c9 v4l2: suggest stride in Buffer param 2022-11-05 13:12:24 +01:00
Wim Taymans
c3206fa687 v4l2: release ref after adding file to maps 2022-11-05 13:12:01 +01:00
Wim Taymans
46123cfcec v4l2: improve debug 2022-11-05 13:11:43 +01:00
Wim Taymans
0e8ea21098 v4l2: fix compilation on older versions 2022-11-04 21:26:19 +01:00
Wim Taymans
b6f1935cfb v4l2: fix streaming compliance test
Add sequence number to frames.
Fix mmap tracking.
Improve debug.
Set right flags on dupped fds.
Handle blocking dqbuf.
Set timestamp and field on buffers.
Dequeue buffers in streamoff.
2022-11-04 17:34:04 +01:00
Wim Taymans
503bb94645 v4l2: we can request just 1 buffer perfectly fine 2022-11-04 15:21:32 +01:00
Wim Taymans
4186e3da6b v4l2: implement G/S_PRIORITY
Return busy when reqbufs is called from an fd that is not the owner
of the current reqbufs.
2022-11-04 13:14:46 +01:00
Wim Taymans
5a299e5685 v4l2: improve debug 2022-11-04 11:00:56 +01:00
Wim Taymans
4a92f355ad v4l2: fix enum_input, don't clear the index 2022-11-04 11:00:19 +01:00
Wim Taymans
8900722f55 v4l2: only accept CAPTURE buffer types in try_fmt 2022-11-04 10:59:39 +01:00
Wim Taymans
5a262b4bd3 v4l2: return a default format from G_FMT 2022-11-04 10:59:13 +01:00
Wim Taymans
73ad5d9057 v4l2: set colorspace 2022-11-04 10:58:50 +01:00
Wim Taymans
0f13d5a65e v4l2: reuse fd when opening the same path
When we open the same device multiple times, reuse the file structure
and dup the fd.
2022-11-04 10:36:49 +01:00
Wim Taymans
4cb1c790a4 v4l2: set the description correctly
The description needs to match what is expected by the compliance
test.
2022-11-03 17:36:55 +01:00
Wim Taymans
9aff5dfc8f v4l2: make bus_info compliant
It needs to start with something accepted by the compiance test.
2022-11-03 17:35:48 +01:00
Wim Taymans
2c4b574b8f v4l2: handle errors better
Only store the eventfd when valid or else we will try to close an
invalid fd.
Keep the errno value around, just in case it gets overwritten by
the free_file call.
2022-11-03 17:34:00 +01:00
Wim Taymans
faab559568 v4l2: handle multiple /dev/videoX nodes
Associate each PipeWire video source to a video device and let
applications probe and open multiple sources.
2022-11-03 13:27:49 +01:00
Wim Taymans
fbd3885ff1 v4l2: small cleanups
Improve size scoring.
Check video size after parsing.
2022-11-03 13:25:44 +01:00