1. 26 May, 2021 1 commit
    • Peter Hutterer's avatar
      spa: group the spa headers into doxygen modules · 07533cb7
      Peter Hutterer authored and Wim Taymans's avatar Wim Taymans committed
      Subdirectories buffer, control, debug, monitor, pod, support and utils, others
      are still missing. Headers are grouped either per subdirectory (e.g. buffer/
      gets added to group spa_buffer) or per-file (e.g. spa_json is a separate
      group), whatever seemed like the most sensible approach.
  2. 07 May, 2021 1 commit
  3. 30 Apr, 2021 1 commit
  4. 17 Aug, 2020 1 commit
    • Link Mauve's avatar
      Run codespell on the entire codebase · 14fdf07e
      Link Mauve authored and Wim Taymans's avatar Wim Taymans committed
      This tool detects and fixes common English spelling mistakes, with
      generally very few mistakes.
      Here is the command I used to generate this commit.  There were a few
      changes that had to be done manually, and of course adding the ignore
      codespell -I .codespell-ignore -x .codespell-ignore -w
      I didn’t add it to the CI, but this would be a good place for it.
  5. 06 Aug, 2020 1 commit
    • Wim Taymans's avatar
      Improve naming · e71936f8
      Wim Taymans authored
      master -> driving
      priority_master -> priority_driver
      segment_master -> segment_owner
  6. 07 Apr, 2020 1 commit
    • Wim Taymans's avatar
      spa: improve draining · b18dacde
      Wim Taymans authored
      Make a new DRAINED status.
      Place the DRAINED status on an input IO when a stream is out of
      buffers and draining.
      All nodes that don't have HAVE_DATA on the input io need to copy
      it to the output io and return the status. This makes sure the
      DRAINED is forwarded and nodes return DRAINED from _process()
      DRAINED on the resampler flushes out the last queued samples and then
      forwards the DRAINED in the next iteration.
      Emit a new drained signal from the context when a node returns
      DRAINED. Use this to trigger the drained signal in the stream.
  7. 29 Oct, 2019 1 commit
  8. 23 Oct, 2019 2 commits
    • Wim Taymans's avatar
      alsa: Disable rate matching for the same card · 53837823
      Wim Taymans authored
      Add a clock name to the clock, remove the old api/clock_id. This makes
      it easier to add descriptive names
      Place the alsa card number in the clock name.
      Check the clock name of the master clock and if it matches our own
      clock, disable rate matching.
    • Wim Taymans's avatar
      io: add clock_id to clock · 54f6834d
      Wim Taymans authored
      Can be used to determine if we need to slave or not.
      Add node abi test
      Fix some headers
  9. 21 Oct, 2019 1 commit
    • Wim Taymans's avatar
      node: add active flag for rate match · 116676e1
      Wim Taymans authored
      Add flags to the rate match io area
      Add flag to activate/deactivate rate match
      Set active flag in rate match when slaved
      Update rate before starting resample
  10. 16 Oct, 2019 1 commit
  11. 16 Sep, 2019 2 commits
  12. 05 Sep, 2019 1 commit
  13. 02 Sep, 2019 1 commit
    • Wim Taymans's avatar
      node: improve position and transport · faaf8428
      Wim Taymans authored
      Reorganize some things, let the clients update the segment info
      in their own activation, then let the server merge it. This avoids
      clients stepping on eachother. When looping through the clients,
      copy the segment info when we encounter its owner.
      Remove the list of segment owners to the activation. This is better
      than in the activation because we can then just keep one list of
      Remove the NONBLOCK flag from the eventfd so that we can do blocking
      reads as well.
      Just keep a reposition owner in the driver activation. This points
      to the node that has the reposition info. This avoid complicated
      synchronization to keep multiple nodes from stepping on eachother.
      Now they can just prepare the reposition info in their activation and
      set themselves as the reposition owner. The last one who succeeds
  14. 29 Aug, 2019 1 commit
    • Wim Taymans's avatar
      node: move segment owner into the io area · 8afa5b0a
      Wim Taymans authored
      This makes it easier to keep track of who is responsible for what.
      Also remove the valid fields and move them to flags in the segment
      info. That way, the owner can update the flags without having to
      worry about concurrency.
      Keep separate info for the reposition information. We need to do this
      to make it possible to seek in other formats than the frame.
      Clear out the owner field when the node is destroyed or removed from
      the driver.
  15. 28 Aug, 2019 2 commits
    • Wim Taymans's avatar
      node: add fields to support sync · 84405dae
      Wim Taymans authored
      Sync is enabled when clients need time to move to a new location.
      It's a bit like GStreamer preroll after a seek. Clients that need
      time, increment the sync_total. Whenever a seek is done, the server
      waits in the Starting state until the sync_pending is 0 (or timeout
      Improve atomic operations
    • Wim Taymans's avatar
      io: add offset for clock times · 0a15e1f8
      Wim Taymans authored
      Add an offset to apply to the clock time before we can compare to the
      segment values. This way we can keep the segment start independent of the
      clock values and we only need to adjust the offset when paused. It's
      like the base_time in GStreamer to calculate the running time.
  16. 27 Aug, 2019 3 commits
    • Wim Taymans's avatar
      io: rename some segment variables · 2805713d
      Wim Taymans authored
      Also initalize a default segment in the node.
    • Wim Taymans's avatar
      io: add support for segment · 7c865f5d
      Wim Taymans authored
      Move fields from the io_position to io_segment. The segment contains
      the mapping between raw clock time and stream time in various
      formats. We keep an array of pending segments available in the
      io_position field so clients can anticipate changes.
      Make looping a flag in the segment instead of a state.
      Prepare for segment masters. These will be registered clients that
      are responsible for updating parts of the extended segment info.
      Add namespace to some defines.
    • Wim Taymans's avatar
      node: add support for transport · b356c83d
      Wim Taymans authored
      Move some things around. Move the duration of the current cycle
      to the clock. Also add the estimated next timeout to the clock.
      Add a generic media specific counter to the clock.
      Clean up the position_bar info. We can do with only a double beat
      value and make the signature in floats.
      Flesh out the io_position info. This has now the information needed
      to convert a raw clock time into a stream time. It basically has
      the same kind of features as GStreamer segments such as looping,
      variable rate playback etc.. It also contains the state of the
      timeline (paused/playing) and it can be used to update the position
      and state from clients.
      There is also extended information in the position field that
      clients can update when they can.
      Plugins basically only update the clock info they get (and use
      the position info to check if they are slaved or not).
      Before each cycle, check if there is a pending position update and
      apply it.
  17. 09 Jul, 2019 1 commit
    • Wim Taymans's avatar
      Improve rate matching and clock slaving · c7d70588
      Wim Taymans authored
      Use a new rate_match io area to exhange rate matching info between
      sink/source and resampler.
      Compensate for the rate match delay when scheduling timeouts.
      Let the resampler notify the source of how many samples it needs to
      produce the desired quantum. Make sure we keep an extra buffer in
      the device to be able to make this possible.
      Let the adapter directly call the slave node process function.
  18. 27 Feb, 2019 1 commit
    • Wim Taymans's avatar
      node: add port and node params · 499dd3ff
      Wim Taymans authored
      Add a new struct spa_param_info that lists the available params on
      a node/port and if they are readable/writable/updated. We can use
      this to replace and improve the PARAM_List and also to notify
      property change and updates.
      Update elements and code to deal with this new param stuff. Add
      port and node info to most elements and signal changes.
      Use async enum_params in -inspect and use the param info to know
      which ones to enumerate.
      Use the port info to know what parameters to update in the
  19. 07 Feb, 2019 1 commit
    • Wim Taymans's avatar
      io: add graph version of graph in position io · 87033894
      Wim Taymans authored
      This will make it possible to select the right graph before we
      start processing. The idea is that graph updates happen in a new
      version and that the switch will to the new updated graph is done
      when the period starts.
  20. 14 Jan, 2019 1 commit
  21. 09 Nov, 2018 1 commit
  22. 05 Nov, 2018 1 commit
  23. 24 Oct, 2018 1 commit
  24. 23 Oct, 2018 1 commit
  25. 29 Aug, 2018 1 commit
  26. 28 Aug, 2018 1 commit
    • Wim Taymans's avatar
      Implement control streams · c9526dc2
      Wim Taymans authored
      spa_io_control_range -> spa_io_range
      Add helpers for sequence and control pod objects
      Implement control properties in audiotestsrc, update test example.
  27. 27 Aug, 2018 1 commit
    • Wim Taymans's avatar
      More type cleanups · 90c1a95e
      Wim Taymans authored
      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.
  28. 25 Aug, 2018 1 commit
    • Wim Taymans's avatar
      More type fixes · d26aecfe
      Wim Taymans authored
      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.
  29. 23 Aug, 2018 1 commit
    • Wim Taymans's avatar
      Remove dynamic types · fca3e1d8
      Wim Taymans authored
      Do not use dynamic types anymore. The reason is that it's difficult:
      - to maintain a shared type database over a network.
      - the extra overhead when translating between processes and for
        maintaining the translation tables.
      - race conditions in translating in RT-threads, this is a problem
        because we want to make event streams.
      We now have simple enums with types and extension points for all
      types. This is also nicer to use in general.
      We don't need the mapper anymore or pass strings around as types.
      There is a parallel type info system to get more info about ids and
      enums and their hierarchy. It can also be used for debugging.
  30. 19 Jul, 2018 2 commits
  31. 17 Jul, 2018 1 commit
    • Wim Taymans's avatar
      clock: remove clock interface · fba00fb7
      Wim Taymans authored
      Remove the clock interface, we need to get timing information with an io
      area to get the required precision and performance.
  32. 08 May, 2018 1 commit
  33. 19 Apr, 2018 1 commit
  34. 29 Nov, 2017 1 commit
    • Wim Taymans's avatar
      param-io: work on IO parameters · 425073af
      Wim Taymans authored
      Reorganize the io parameter ids and objects. Make separate enumerations
      for buffer, control, input and output properties.
      Add a volume output property to export-source. This is still unused
      but will eventually be routed to a PropsIn io area where it can
      control the volume of a mixer, for example.