summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-01-07Make simple node policypolicy-nodeWim Taymans9-133/+1569
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
2020-01-03bluez5: cleanupsWim Taymans2-77/+81
Use export_device
2020-01-03bluez5: implement sync, profile and enum_profileWim Taymans1-2/+105
2020-01-03typemap: add more video typesWim Taymans1-88/+88
2020-01-03examples: pause timer in PAUSEDWim Taymans4-12/+8
2020-01-02avoid including private.hWim Taymans43-372/+349
Expose some more methods to make it possible to build without including the private.h header, especially in modules.
2019-12-19v4l2: print pixelformat as stringMichael Tretter1-2/+2
The pixelformats are actual 4 letter sequences. Print the letters instead of the hex value to make the output more readable.
2019-12-19gst: do not send UNKNOWN formatMichael Tretter1-1/+1
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
2019-12-19filter: return error if id cannot be dereferencedMichael Tretter1-0/+2
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
2019-12-19gst: fix NULL pointer when listing devicesMichael Tretter2-3/+3
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.
2019-12-19gst: fix log level of GStreamer debug messagesMichael Tretter1-6/+6
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.
2019-12-19gst: replace tabs with spacesMichael Tretter7-58/+58
In general, the GStreamer elements use spaces for indentation. Replace the tabs by spaces.
2019-12-19media-session: cleanup some objectsWim Taymans1-2/+8
2019-12-19proxy: never free a proxy automaticallyWim Taymans5-26/+66
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.
2019-12-19Make interface types a stringWim Taymans123-1253/+793
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.
2019-12-18alsa-seq: update duration when slaved as wellWim Taymans1-7/+7
2019-12-18media-session: improve shutdownWim Taymans3-5/+22
First emit a remove of all objects. Then signal a session destroy and then destroy the context.
2019-12-18audioadapter: avoid infinite loopWim Taymans1-6/+11
Rewrite the slave/converter loop a little to avoid infinite loops.
2019-12-18media-session: improve cleanupWim Taymans11-161/+300
2019-12-17client-node0: remap target node propertyWim Taymans1-1/+2
2019-12-17update some docsWim Taymans1-4/+4
2019-12-17stream: only set portconfig on audio formatsWim Taymans1-16/+28
2019-12-17v0: set media classWim Taymans3-4/+37
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
2019-12-17policy-ep: allow linking to nodesWim Taymans2-52/+82
When the target node or target endpoint is specified, try to link to it.
2019-12-17audioadapter: loop until we have dataWim Taymans2-4/+11
Keep caling the slave processing function until we have data from the converter or until no process can be made.
2019-12-17audioadapter: set data flagsWim Taymans1-1/+1
2019-12-17link: set the object id correctlyWim Taymans1-0/+2
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.
2019-12-17client-node: improve debugWim Taymans1-3/+4
2019-12-17media-session: improve cleanupWim Taymans8-17/+65
2019-12-17proxy: only call destroy onceWim Taymans2-2/+12
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.
2019-12-16v4l2: add v4l2 endpointsWim Taymans5-11/+709
Monitor and add endpoints for the v4l2 nodes.
2019-12-16media-session: add sync_updateWim Taymans3-17/+35
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
2019-12-16alsa-endpoint: fix stream namesWim Taymans1-2/+2
2019-12-16stream-monitor -> stream-endpointWim Taymans3-7/+7
2019-12-16policy: link endpoints based on direction and mediaWim Taymans2-90/+24
2019-12-16v4l2-monitor: clean up namesWim Taymans1-76/+76
2019-12-16context: add object storeWim Taymans5-0/+62
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.
2019-12-16array: add multistatement macro in parenthesisWim Taymans1-2/+3
2019-12-15pw-uninstalled: Don't override environment variablesPhilippe Normand1-2/+2
LD_LIBRARY_PATH and GST_PLUGIN_PATH might be set already in the parent shell.
2019-12-15pw-uninstalled: Add tools directory to $PATHPhilippe Normand1-1/+1
2019-12-13ci: export XDG_RUNTIME_DIR when running the testsGeorge Kiagiadakis1-1/+1
Recent changes make some tests start an internal pipewire server, which requires XDG_RUNTIME_DIR to create the socket file
2019-12-13install impl.hWim Taymans1-0/+1
2019-12-13pod: Use private names for variable in macrosWim Taymans1-9/+9
Fixes #197
2019-12-13media-session: remove object when proxy is destroyedWim Taymans1-0/+2
2019-12-13loop: pass spa_dict to *_loop_newWim Taymans21-192/+215
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.
2019-12-13handle policy_core destroyWim Taymans1-0/+16
2019-12-13pass spa_dict around as configWim Taymans20-68/+73
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.
2019-12-13proxy: don't remove ourselves from a destroyed coreWim Taymans2-5/+4
The core will clear (or have cleared) all the proxies.
2019-12-12context: move core implementation to impl-core.hapi3Wim Taymans16-611/+837
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.
2019-12-12keys: rename key for the module profileWim Taymans3-6/+7