Commit graph

70 commits

Author SHA1 Message Date
Wim Taymans
a1ec7f5fa7 pod: add helper function to copy array values 2019-08-12 15:14:39 +02:00
Wim Taymans
891c5fd79d builder: make _rewind part of _reset()
_reset() should also rewind the work that has been done. We don't
need _rewind() anymore then.
2019-06-26 12:45:36 +02:00
Wim Taymans
350e8051a7 builder: add _rewind method
Add a rewind method to undoes the data of a frame.
Add unit test for overflow and rewind
2019-06-26 12:17:01 +02:00
Wim Taymans
f19ca292e8 builder: take size of the frame
spa_pod_builder_frame() should return the position in the builder
memory or NULL when the frame doesn't fit. Check the size of the
frame instead of assuming the frame is already written to the
buffer.
2019-06-26 05:21:37 -04:00
Wim Taymans
bb60708ccc pod: _builder_deref() always works with builder size 2019-06-26 05:16:44 -04:00
Wim Taymans
448c1937ad hook: separate spa_callbacks from the hook
Make a spa_callbacks with just the functions and data and use this
in the hook and objects.
2019-05-15 12:17:52 +02:00
Wim Taymans
6ee192dff5 hooks: use hook to implement the callbacks
This way we get the version check implemented and save some
code.
2019-05-15 11:19:23 +02:00
Wim Taymans
ecde090a1f pod: remove type check, it causes errors 2019-05-09 09:34:23 +02:00
Wim Taymans
7b12212eeb node: improve async handling
Remove the done and error callbacks. The error callback is in an
error message. The done callback is replace with spa_pending.

Make enum_params take a callback and data for the results. This allows
us to push the results one after another to the app and avoids ownership
issues of the passed data. We can then extend this to handle the async
case by doing a _wait call with a spa_pending+callback+data that will
be called when the _enum_params returns and async result.
Add a sync method.

All methods can now return SPA_RESULT_IS_ASYNC return values and you
can use spa_node_wait() to register a callback when they complete
with optional extra parameters. This makes it easier to sync and
handle the reply.

Make helper methods to simulate the sync enum_params behaviour for
sync nodes.

Let the transport generate the sequence number for pw_resource_sync()
and pw_proxy_sync(). That way we don't need to keep track of numbers
ourselves and we can match the reply to the request easily.
2019-02-21 09:40:12 +01:00
Wim Taymans
68bcc6b8e8 pod: move vararg macros to separate file 2019-01-25 16:17:29 +01:00
Wim Taymans
a1d45d2b25 add missing file 2019-01-22 17:47:55 +01:00
Wim Taymans
351fb9ce29 pod: improve parser and builder
Remove the spa_pod_iter helpers
Remove builder/parser vararg recurse option, you have to
manually recurse into structures when needed. This simplifies
things a lot.
Pass spa_pod_frames to builder and parser explicitly, we don't
have to keep an internal stack anymore.
The parser is now almost a mirror image of the builder.
Make the parser safer when iterating over objects, add functions
to check and get pod contents in a safe way.
Make the builder return errno style results on errors
Improve performance of object properties when they are stored and
retrieved in the same order.
Add many more tests for the builder and parser
Add some benchmarks
2019-01-22 17:38:23 +01:00
Wim Taymans
878ae769ef parser: improve parser
Add more unit tests
2019-01-18 13:40:05 +01:00
Wim Taymans
2622e085a9 pod: add more helpers
Implement more unit-tests
2019-01-17 17:23:47 +01:00
Wim Taymans
767e7efc0e parser: fix parse of 'V' as Choice 2019-01-17 17:19:13 +01:00
Wim Taymans
be1725c67b compare: add size to compare 2019-01-17 17:16:46 +01:00
Wim Taymans
5376832676 builder: control_header -> control 2019-01-17 17:11:58 +01:00
Wim Taymans
92e9d99d0a add some padding and fix types 2019-01-16 17:37:58 +01:00
Wim Taymans
cb346c0745 builder: improve builder
Only write a prop or control header when not already done.
2019-01-16 17:35:31 +01:00
Wim Taymans
80cfda89c1 pod: improve the vararg pod builder and parser
Automatically parse and build key/value when in objects without having
to prefix the key with ":"
Automatically build control/value when in sequence without the "."
prefix.
Remove the builder with key/pod, taking a reference to the stack built
temporary pods is not allowed in c++. We can use the varargs version
with the same convenient syntax.
Remove the parser "*" option, it is unused.
Improve spa_pod_builder_add_* and spa_pod_parser_get_* and make them
look similar.
2019-01-16 11:05:12 +01:00
Wim Taymans
3dc6820e9e Don't use __ in defines or declarations, it's reserved
SPA_TYPE -> SPA_TYPE_INFO for type info strings
improve includes

Fixes #115
2019-01-14 13:00:00 +01:00
Wim Taymans
b0f4be5fbc fix more compile errors
Avoid void * arithmetic
Do explicit casts to target type to make c++ happy
2019-01-08 11:53:36 +01:00
Wim Taymans
e918f9f77c fix sign confusion 2019-01-07 15:52:42 +01:00
Wim Taymans
7cd55c2c6b fix switch fallthrough cases 2019-01-07 15:11:34 +01:00
Wim Taymans
3cfd1e6cf1 compare: fix sign for compare of id 2019-01-07 13:41:10 +01:00
Wim Taymans
3480765561 parser: add more parser helpers 2019-01-04 10:00:12 +01:00
Wim Taymans
a41624d48b iter: make iteration safer
Check if the pod size is within the parent pod size
2019-01-04 09:59:33 +01:00
Wim Taymans
f246c7b8ef parser: add more parser helpers 2019-01-03 17:43:07 +01:00
Wim Taymans
9d44d0b135 parser: add some utils to parse values 2018-11-16 16:52:04 +01:00
Wim Taymans
85f2e93c54 Relicense as MIT/X11
Remove some obsolete files
2018-11-05 17:48:52 +01:00
Jan Grulich
a61f8cf666 Coding style 2018-10-31 07:48:28 +00:00
Jan Grulich
a813afd810 Fix build with c++ compilers 2018-10-31 07:48:28 +00:00
Wim Taymans
58c6d76328 pod: also handle choice in compare 2018-10-27 10:43:09 +01:00
Wim Taymans
ad35e8ef3b pod: fix pod compare 2018-10-16 16:50:06 +02:00
Wim Taymans
595daf86c6 spa: add some macros to events and object types 2018-10-08 11:43:18 +02:00
Wim Taymans
940c8645d3 remove property flags
Remove the property flags, we will add info about properties
with the param interface.
2018-09-28 17:44:14 +02:00
Wim Taymans
1ea3d5c474 compare: fix pod compare 2018-09-17 21:51:58 +02:00
Wim Taymans
fef616615e filter: add leftover properties
Add the extra properties from the filter to the result.
2018-09-17 09:38:10 +02:00
Wim Taymans
fcd90b25d3 More work on multichannel
Reorder channels to a more common default order.
Only add channel layout when channels > 1
Don't try to link to a session that is still starting
Small sse fixes.
2018-09-14 15:23:12 +02:00
Wim Taymans
5196f7f053 audio: remove layout from audio
Make special format types for planar and interleaved instead of
having a field.
Add enum for audio channel positions
Add some default audio channel layouts
Place the channel layout in the audio format when possible
alsa: place audio channel positions in format
Add sse optimized channel mixing for some common cases
Remove name from port info, it's not mandatory and in the properties
Add direction to port info
2018-09-13 17:03:56 +02:00
Wim Taymans
d80274e663 pod: small improvements for pod iterator 2018-09-10 18:46:33 +02:00
Wim Taymans
c904bed186 More test 2018-09-05 17:23:14 +02:00
Wim Taymans
cc842cbdc8 Type changes
Only allow properties inside objects, this makes it easier to
iterate the object, which is needed for efficiently processing
control streams.
Add a choice type to mark variable properties.
SPA_TYPE_Enum -> SPA_TYPE_Id to avoid confusion with choice enum
Make it easier to allocate and initialize properties on the stack
Make more efficient methods to make objects.
2018-09-05 16:41:07 +02:00
Wim Taymans
699bed4a1f channelmix: improve control parsing 2018-08-31 09:17:21 +02:00
Wim Taymans
2631db14a8 pod: use {} as object delimited, like json
Use <> for sequence
2018-08-30 09:53:29 +02:00
Wim Taymans
c9526dc2bb Implement control streams
spa_io_control_range -> spa_io_range
Add helpers for sequence and control pod objects
Implement control properties in audiotestsrc, update test example.
2018-08-28 18:16:41 +02:00
Wim Taymans
90c1a95eef More type cleanups
SPA_ID_* -> SPA_TYPE_*. We use 'type' for all registered types.
ID refers to either a registered type or an enum.
Improve introspection of object ids. Make 0 an invalid enum and
use it to look up the object id type.
Move some type-info files together.
Swap type and id of the object, we first specify the type and then
the id because the meaning of the id depends on the object type.
2018-08-27 15:03:11 +02:00
Wim Taymans
265b4476a1 more type cleanup
Move some types in the type-info
Remove unused type files
2018-08-25 12:26:18 +02:00
Wim Taymans
d26aecfef2 More type fixes
Param ids and IO ids are now simple enums.
Move some type info in one place, delete some type-info files
Fix type debug
Make audio layout an enum
Mark more enums as enums in types so they show us with their names in
the debug.
2018-08-25 12:08:29 +02:00
Wim Taymans
805e3bb6c1 types: work on types
Move static pod types to type system
work on type info for types
Move the event and command ids to an enum to make it easier to extend
later.
2018-08-24 10:53:09 +02:00