pulseaudio/src/meson.build
Georg Chini 156b572954 pulsecore: Add alternative time smoother implementation
This patch adds an alternative time smoother implementation based on the theory
found at https://www.freedesktop.org/software/pulseaudio/misc/rate_estimator.odt.

The functions were written to replace the current smoother functions nearly on
a one-to-one basis, though there are a few differences:
- The smoother_2_put() function takes a byte count instead of a sound card
  time as argument. This was changed because in most places a sample count
  was converted to a time before passing it to the smoother.
- The smoother needs to know sample rate and frame size to convert byte
  counts to time.
- A smoother_2_get_delay() function was added to directly retrieve the stream
  delay from the smoother.
- A hack for USB devices was added which works around an issue in the alsa
  latency reports for USB devices.

The smoother delivers much better precision than the current implementation.
For results, see the document referenced above.

The new functions are still unused. The following patches will convert all
callers of the smoother functions so that they can use both smoother
implementations, depending on a configure option.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/55>
2021-11-03 21:13:38 +00:00

218 lines
5.2 KiB
Meson

libpulsecommon_sources = [
'pulse/client-conf.c',
'pulse/error.c',
'pulse/fork-detect.c',
'pulse/format.c',
'pulse/mainloop-api.c',
'pulse/xmalloc.c',
'pulse/proplist.c',
'pulse/utf8.c',
'pulse/channelmap.c',
'pulse/sample.c',
'pulse/util.c',
'pulse/timeval.c',
'pulse/rtclock.c',
'pulse/volume.c',
'pulsecore/authkey.c',
'pulsecore/conf-parser.c',
'pulsecore/core-error.c',
'pulsecore/core-format.c',
'pulsecore/core-rtclock.c',
'pulsecore/core-util.c',
'pulsecore/dynarray.c',
'pulsecore/fdsem.c',
'pulsecore/flist.c',
'pulsecore/g711.c',
'pulsecore/hashmap.c',
'pulsecore/i18n.c',
'pulsecore/idxset.c',
'pulsecore/arpa-inet.c',
'pulsecore/iochannel.c',
'pulsecore/ioline.c',
'pulsecore/ipacl.c',
'pulsecore/json.c',
'pulsecore/lock-autospawn.c',
'pulsecore/log.c',
'pulsecore/ratelimit.c',
'pulsecore/mcalign.c',
'pulsecore/memblock.c',
'pulsecore/memblockq.c',
'pulsecore/memchunk.c',
'pulsecore/native-common.c',
'pulsecore/once.c',
'pulsecore/packet.c',
'pulsecore/parseaddr.c',
'pulsecore/pdispatch.c',
'pulsecore/pid.c',
'pulsecore/pipe.c',
'pulsecore/memtrap.c',
'pulsecore/aupdate.c',
'pulsecore/proplist-util.c',
'pulsecore/pstream-util.c',
'pulsecore/pstream.c',
'pulsecore/queue.c',
'pulsecore/random.c',
'pulsecore/srbchannel.c',
'pulsecore/sample-util.c',
'pulsecore/shm.c',
'pulsecore/bitset.c',
'pulsecore/socket-client.c',
'pulsecore/socket-util.c',
'pulsecore/strbuf.c',
'pulsecore/strlist.c',
'pulsecore/tagstruct.c',
'pulsecore/time-smoother.c',
'pulsecore/time-smoother_2.c',
'pulsecore/tokenizer.c',
'pulsecore/usergroup.c',
'pulsecore/sndfile-util.c',
]
libpulsecommon_headers = [
'pulse/client-conf.h',
'pulse/error.h',
'pulse/fork-detect.h',
'pulse/format.h',
'pulse/mainloop-api.h',
'pulse/xmalloc.h',
'pulse/proplist.h',
'pulse/utf8.h',
'pulse/channelmap.h',
'pulse/sample.h',
'pulse/util.h',
'pulse/timeval.h',
'pulse/rtclock.h',
'pulse/volume.h',
'pulsecore/atomic.h',
'pulsecore/authkey.h',
'pulsecore/conf-parser.h',
'pulsecore/core-error.h',
'pulsecore/core-format.h',
'pulsecore/core-rtclock.h',
'pulsecore/core-util.h',
'pulsecore/creds.h',
'pulsecore/dynarray.h',
'pulsecore/endianmacros.h',
'pulsecore/fdsem.h',
'pulsecore/flist.h',
'pulsecore/g711.h',
'pulsecore/hashmap.h',
'pulsecore/i18n.h',
'pulsecore/idxset.h',
'pulsecore/arpa-inet.h',
'pulsecore/iochannel.h',
'pulsecore/ioline.h',
'pulsecore/ipacl.h',
'pulsecore/json.h',
'pulsecore/llist.h',
'pulsecore/lock-autospawn.h',
'pulsecore/log.h',
'pulsecore/ratelimit.h',
'pulsecore/macro.h',
'pulsecore/mcalign.h',
'pulsecore/mem.h',
'pulsecore/memblock.h',
'pulsecore/memblockq.h',
'pulsecore/memchunk.h',
'pulsecore/mutex.h',
'pulsecore/native-common.h',
'pulsecore/once.h',
'pulsecore/packet.h',
'pulsecore/parseaddr.h',
'pulsecore/pdispatch.h',
'pulsecore/pid.h',
'pulsecore/pipe.h',
'pulsecore/memtrap.h',
'pulsecore/aupdate.h',
'pulsecore/proplist-util.h',
'pulsecore/pstream-util.h',
'pulsecore/pstream.h',
'pulsecore/queue.h',
'pulsecore/random.h',
'pulsecore/refcnt.h',
'pulsecore/srbchannel.h',
'pulsecore/sample-util.h',
'pulsecore/semaphore.h',
'pulsecore/shm.h',
'pulsecore/bitset.h',
'pulsecore/socket-client.h',
'pulsecore/socket-util.h',
'pulsecore/strbuf.h',
'pulsecore/strlist.h',
'pulsecore/tagstruct.h',
'pulsecore/thread.h',
'pulsecore/time-smoother.h',
'pulsecore/time-smoother_2.h',
'pulsecore/tokenizer.h',
'pulsecore/usergroup.h',
'pulsecore/sndfile-util.h',
'pulsecore/socket.h',
]
if dbus_dep.found()
libpulsecommon_sources += [
'pulsecore/dbus-util.c',
'pulsecore/rtkit.c',
]
libpulsecommon_headers += [
'pulsecore/dbus-util.h',
'pulsecore/rtkit.h',
]
endif
if x11_dep.found()
libpulsecommon_sources += [
'pulse/client-conf-x11.c',
'pulsecore/x11prop.c',
]
libpulsecommon_headers += [
'pulse/client-conf-x11.h',
'pulsecore/x11prop.h',
]
endif
# FIXME: Do non-POSIX thread things
if host_machine.system() == 'windows'
libpulsecommon_sources += [
'pulsecore/mutex-win32.c',
'pulsecore/poll-win32.c',
'pulsecore/semaphore-win32.c',
'pulsecore/thread-win32.c',
]
else
libpulsecommon_sources += [
'pulsecore/mutex-posix.c',
'pulsecore/semaphore-posix.c',
'pulsecore/thread-posix.c'
]
endif
# FIXME: Do SIMD things
libpulsecommon = shared_library('pulsecommon-' + pa_version_major_minor,
libpulsecommon_sources,
libpulsecommon_headers,
include_directories : [configinc, topinc],
c_args : [pa_c_args],
link_args : [nodelete_link_args],
install : true,
install_dir : privlibdir,
dependencies : [
libm_dep, thread_dep, dl_dep, shm_dep, iconv_dep, sndfile_dep, dbus_dep,
x11_dep, libsystemd_dep, glib_dep.partial_dependency(compile_args: true),
gtk_dep.partial_dependency(compile_args: true), asyncns_dep, libintl_dep,
platform_dep, platform_socket_dep, execinfo_dep,
],
implicit_include_directories : false)
libpulsecommon_dep = declare_dependency(link_with: libpulsecommon)
subdir('pulse')
if get_option('daemon')
subdir('pulsecore')
subdir('daemon')
subdir('modules')
endif
if get_option('tests')
subdir('tests')
endif
subdir('utils')