Age | Commit message (Collapse) | Author | Files | Lines |
|
Make it possible to run the session manager without endpoint
modules. Add a simple node policy that links nodes.
Move the session-manager implementation and startup of the
endpoint monitors to a separate module.
Handle async set_param on the device
|
|
Use export_device
|
|
|
|
|
|
|
|
Expose some more methods to make it possible to build without
including the private.h header, especially in modules.
|
|
The pixelformats are actual 4 letter sequences. Print the letters
instead of the hex value to make the output more readable.
|
|
If the video format cannot be detected, GStreamer will return the
UNKNOWN format, which is translated into the Id 0 in the
Spa:Interface:TypeMap, which is added to the pod.
When the pipewire server receives the pod and tries to unmarshal the
pod, it will detect the Id 0. Unable to distinguish Id 0 from a missing
id, the server discards the message as invalid and closes the
connection.
Use the following gstreamer pipeline to reproduce (note the wrong nv12
instead of a correct NV12 format):
gst-launch-1.0 pipewiresrc ! video/x-raw,format=nv12 ! fakesink
|
|
If an ID cannot be de-referenced, e.g., because the builder buffer is
too small, spa_pod_filter() still reports success, but the result is
NULL. Any subsequent access to result will cause a segfault.
Return an error if no pod is found to properly propagate and handle the
error.
The segfault can be reproduced by using the v4l2 module with Vivid
devices [0], because the buffer for the v4l2 controls is too small.
[0] https://github.com/PipeWire/pipewire/issues/138
|
|
The gstdeviceprovider segfaults when listing the available devices,
because it the pointer to GList * is initialized with NULL instead of
the GList * itself. Don't use a pointer, but use the GList * directly.
|
|
Messages that are printed for every buffer should use the LOG debug
level, while messages that happen during setup and tear down should use
the DEBUG debug level.
Therefore, use LOG in on_process and when popping buffers and DEBUG when
Pipewire adds or removes buffers.
|
|
In general, the GStreamer elements use spaces for indentation. Replace
the tabs by spaces.
|
|
|
|
Never free a proxy without the application doing a pw_proxy_destroy.
It's hard to use when proxies are freed randomly when the server
removes the ids. You have to add destroy notify to all proxies and
deal with the arbirary order in which proxies can be freed.
Instead notify the client of the remove and let it destroy the
proxies itself in the right order. This is in line with how wayland
handles proxies.
A pw_proxy_destroy() will now send a destroy to the server and mark
the proxy as a zombie, waiting for the remove_id confirmation and
then destroy the proxy.
A server remove_id will mark the proxy as removed and emits the
removed event. The app should then pw_proxy_destroy the proxy
to free it.
Leaks all proxies in the session manager because cleanup now needs
to be handled by the app correctly.
|
|
This is more in line with wayland and it allows us to create new
interfaces in modules without having to add anything to the type
enum. It also removes some lookups to map type_id to readable
name in debug.
|
|
|
|
First emit a remove of all objects. Then signal a session
destroy and then destroy the context.
|
|
Rewrite the slave/converter loop a little to avoid infinite loops.
|
|
|
|
|
|
|
|
|
|
Set the media class on the client-node after we know the number of
ports.
Add more type mappings
Fix change_mask on core_info
|
|
When the target node or target endpoint is specified, try to
link to it.
|
|
Keep caling the slave processing function until we have data from
the converter or until no process can be made.
|
|
|
|
Before using the param from EnumFormat as a format param, set the
object ID to PARAM_Format to avoid confusion later on. Clients might
use the object id to enumerate parameters and then fail to enumerate
the current Format because the id is wrong.
|
|
|
|
|
|
Make sure only emit destroy once by making the proxy a zombie
from the first call to destroy. Also make sure we don't call destroy
twice without remove.
|
|
Monitor and add endpoints for the v4l2 nodes.
|
|
Add method to only emit the update event when all actions up to
the sync point completed.
Update the available bits on NODES/PORTS/STREAMS/ENDPOINTS
|
|
|
|
|
|
|
|
|
|
Add method to set and get typed objects from the context. This can
be used to pass around context objects between modules without having
to register them.
|
|
|
|
LD_LIBRARY_PATH and GST_PLUGIN_PATH might be set already in the parent shell.
|
|
|
|
Recent changes make some tests start an internal pipewire server,
which requires XDG_RUNTIME_DIR to create the socket file
|
|
|
|
Fixes #197
|
|
|
|
Make the thread_loop alloc its own loop by default to simplify
some core. Add extra new_full method to pass a custom pw_loop.
Make other loop implementations ready to support custom loops
if we want that later.
|
|
|
|
Don't pass pw_properties around when we simply need to pass around
config info, only use pw_properties when used to construct an object
that keeps the properties.
|
|
The core will clear (or have cleared) all the proxies.
|
|
Move the core implementation to a separate file. Make a default
core object in the context.
Pass impl-core to server. We now tie the server to a core. Also
keep track of the core that a client connected to.
Fill the properties that we usually use to connect in the context
and copy them when a connection is made.
Use "internal" as the remote name to connect to the default
internal core.
|
|
|