Commit graph

581 commits

Author SHA1 Message Date
Wim Taymans
e79a294816 tests: add static caps example
Add example of how to define a static caps.
2017-02-24 18:46:30 +01:00
Wim Taymans
825cbbbdd6 v4l2: fix negotiation 2017-02-24 17:15:29 +01:00
Wim Taymans
7a66af71ca pinosformat: rewrite format conversion 2017-02-24 16:27:36 +01:00
Wim Taymans
47714886c0 prop-builder: remove propbuilder
Replaced by more flexible POD
2017-02-24 09:53:40 +01:00
Wim Taymans
16b62de53a Rework formats
Use a POD for the format body. This allows us to more easily build
and copy the formats.
Remove obsolete code to make video and audio formats.
Use SpaVideo/AudioInfo to keep track of formats. Make functions to parse
the format into the structures.
Update plugins
2017-02-24 09:28:18 +01:00
Wim Taymans
7fc73953cd Add POD helper objects
POD (plain old data) objects are similar to LV2 Atoms and allows storage
and construction of datastructures in memory or on the stack. They can
be copied with a simple memcpy.

The idea is to use this to construct the network messages and to replace
the structures used for describing formats and properties.
2017-02-22 13:12:32 +01:00
Wim Taymans
922997175d add new header 2017-02-21 15:02:54 +01:00
Wim Taymans
808d6b6fca prop-builder: add helper to make properties and formats
Use this to make a format filter. Use the filter to negotiate
a format automatically.
2017-02-20 17:22:46 +01:00
David Svensson Fors
c433df9d32 context: connect to a specified socket
Support in the context API for connecting to a Pinos instance
listening at a specified socket - not only to the one pointed out by
the environment variables XDG_RUNTIME_DIR and PINOS_CORE.
2017-02-15 11:57:40 +01:00
David Svensson Fors
dac9755765 stream: free formats and transport in destroy() 2017-02-15 11:56:45 +01:00
David Svensson Fors
dda5a22fcd context: free objects map in destroy() 2017-02-15 11:56:17 +01:00
Wim Taymans
df86fcec10 Improve negotiation
Try to link ports based on compatible formats
Add methods to filter formats.
2017-02-10 10:17:07 +01:00
Wim Taymans
1370fafd5b Fix renegotiation
When we are idle and are asked to negotiate, suspend first so that we
can do full negotiation again instead of using the old format.
Stability fixes.
2017-02-02 17:48:39 +01:00
Wim Taymans
fd54471249 Implement SYNC message
A sync message returns a notify-done after all request are finished and
can be used to wait for completion of a bunch of commands. Use it wait
for all proxy BIND requests to complete so that we can look at the
info immediately.
Copy the default value of unset properties.
2017-02-01 17:48:12 +01:00
Wim Taymans
b38ecafe81 Use int counters for iterating items
Use counters instead of void* to iterate items. This simplifies some
things and makes it easier to do over the wire.
Add format description to NodeInfo and use this to add format
descriptions to pinos devices.
Small fixes to fix leaks and crashes.
2017-02-01 08:58:21 +01:00
Wim Taymans
8b84d8fde6 fix some leaks
Fix some leaks
Remove some unused fields
Install a loop so that plugins can use it
Start on adding format introspection
2017-01-31 09:57:58 +01:00
Wim Taymans
4b55d7c4da Fix proxy ids
The proxy/resource ids are generated by the client and so we need to
used them as index in the client resource map instead of making our own
number.
Fix stream disconnect and client-node destroy
Fix gstreamer device provider
Make all sockets non-blocking to avoid errors with bad clients
Advertise the subsystems we monitor and disable the gstreamer monitors.
Implement core properties updates
Make sure we send REMOVE_ID after we are done with the resource.
2017-01-20 15:53:03 +01:00
Wim Taymans
e579efea10 loop: don't destroy the event twice 2017-01-20 09:17:55 +01:00
Wim Taymans
fd5f0d96f3 improve states 2017-01-19 20:07:03 +01:00
Wim Taymans
e92e1acec4 Improve logging 2017-01-19 18:53:45 +01:00
Wim Taymans
0398f997d7 cleanups
Update some docs
Remove special structs for some events
Remove some unused flags
Update some plugins
2017-01-19 18:10:00 +01:00
Wim Taymans
7a9dc2c4fd optimize data transport
Remove queue and ringbuffer between nodes. transfer the buffer id
directly between the io areas when possible.
Let only pinos send push or pull requests for now.
Allow polling multiple fds, like how alsa wants it
Remove port_id from events.
2017-01-18 18:29:15 +01:00
Wim Taymans
c8648eaf59 only send events
Only send events between client and server and use the socket simply
to wake up the other end.
2017-01-17 15:02:06 +01:00
Wim Taymans
cae971e106 improve error reporting
Move signals from core to the objects themselves
Use per object info to track object signals
Use periods in alsasink and source
2017-01-17 10:27:58 +01:00
Wim Taymans
fb69758251 Do cleanup of queues
Wait for async state changes to complete
2017-01-12 20:02:58 +01:00
Wim Taymans
474981ddda Refactor the work queue
Make a separate work queue to track async operations. Keep separate
work queues for links and nodes. This avoids lockups when some async
operation take a long time and the work queue has SYNC_WAIT operations.
2017-01-12 16:48:17 +01:00
Wim Taymans
6d4db64767 Use refcounting for async shutdown
fix some memory leaks
2017-01-12 15:13:15 +01:00
Wim Taymans
ee0aa6a2ac Implement access control
Move send and dispatch functions to the implementation. This makes it
possible to place an access check before sending and dispatching.
Add module-access that allows to bind and notify on globals owned by
the client.
2017-01-10 17:26:43 +01:00
Wim Taymans
a8964ca657 fix device provider 2016-12-22 17:08:19 +01:00
Wim Taymans
85d375e4bb Implement subscription with a signal
Use a signal for subscription events
Work on handling OOM errors and other errors.
2016-12-22 16:50:01 +01:00
Wim Taymans
1b66bbcffd Remove old makefiles 2016-12-21 17:21:25 +01:00
Wim Taymans
ff5e260d67 Add client info message
Update client info and improve core info
2016-12-21 17:19:06 +01:00
Wim Taymans
2f18af1fb2 plugins: small fixes 2016-12-20 19:13:04 +01:00
Wim Taymans
618f5ec2b2 thread-mainloop: use recursive mutex 2016-12-20 18:37:06 +01:00
Wim Taymans
f5dbdbc0df Improve process_output
process_output is now to finish processing of the output in async nodes,
which means we need to fill the io area before sending the HAVE_OUTPUT
event. This simplifies some things and improves performance because we
don't need to deal with queues and additional checks.
2016-12-20 18:10:50 +01:00
Wim Taymans
5b0b9c43d0 Improve upload
Only send a buffer when we have received a NEED_DATA message.
Add a signal to pulla buffer from the sink. Restructure the sink to use
a queue like the source and only push a buffer when we can.
Improve SpaData. Offset and size should be between 0 and maxsize, make
sure we clamp correctly when needed.
node_process_output completes the processing of the output after
receiving HAVE_OUTPUT for async elements. It instructs the node that
it now can produce more output.
2016-12-20 16:51:57 +01:00
Wim Taymans
8ce3f949e2 Add core introspection
Use global ids in info messages to refer to global objects.
2016-12-15 20:09:48 +01:00
Wim Taymans
0d0385b881 Rework buffer memory layout
Move offset, size and stride to separate chunk structure that we
can keep in shared memory.
Add shared metadata type to hold the memory block holding the
metadata.
2016-12-15 14:57:34 +01:00
Wim Taymans
5e8a3afe17 handle cleanup of remote proxies
Destroying a resource informs the client to destroy the proxy.
Destroying an object destroys all the bound resources on it.
2016-12-02 17:14:32 +01:00
Wim Taymans
e6f45a7686 Add link introspection 2016-12-02 16:06:16 +01:00
Wim Taymans
b969623ec8 Work on introspection 2016-12-02 13:38:43 +01:00
Wim Taymans
7c29209023 Registry: implement registry
Make GET_REGISTRY method to create a registry resource, send global
added and removed to this resource.
Use map for storing proxies and resources.
2016-11-30 19:09:09 +01:00
Wim Taymans
3dada4731c rename signal -> sig
Meson puts the directory of the source file in the include path and then
it picks up our signal.h instead of the system one...
2016-11-28 16:24:10 +01:00
David Svensson Fors
497febf2f1 node: check links list in get_free_port()
When searching for an unused port, look for an empty links list.
2016-11-28 15:46:09 +01:00
Wim Taymans
046c2b1cae remove last glib bits
Improve pinossink
2016-11-26 19:18:51 +01:00
Wim Taymans
ee67929a7c cleanups 2016-11-25 13:38:49 +01:00
Wim Taymans
1d61fd3696 Work on async cleanup
Track all async changes and only perform free of resources when all
previous async operations completed.
2016-11-25 13:06:23 +01:00
Wim Taymans
7ecfc28d0f use plain libdbus instead of GDBus 2016-11-24 18:17:29 +01:00
Wim Taymans
4e94743906 Use pinos loop for mainloop
Remove more glib stuff
2016-11-24 17:40:26 +01:00
Wim Taymans
27bba6f587 Make native protocol
Remove DBus and work towards something like wayland.
Remove more glib stuff from the client code
2016-11-24 17:00:42 +01:00