Projects
Essentials
pipewire-aptx
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 45
View file
pipewire-aptx.changes
Changed
@@ -1,4 +1,9 @@ ------------------------------------------------------------------- +Wed Sep 25 20:09:19 UTC 2024 - Bjørn Lie <zaitor@opensuse.org> + +- Update to version 1.2.4 + +------------------------------------------------------------------- Mon Sep 16 18:48:10 UTC 2024 - Bjørn Lie <zaitor@opensuse.org> - Update to version 1.2.3
View file
pipewire-aptx.spec
Changed
@@ -7,7 +7,7 @@ %define soversion 0_2 Name: pipewire-aptx -Version: 1.2.3 +Version: 1.2.4 Release: 0 Summary: PipeWire Bluetooth aptX codec plugin License: MIT
View file
pipewire-1.2.3.tar.bz2/NEWS -> pipewire-1.2.4.tar.bz2/NEWS
Changed
@@ -1,3 +1,34 @@ +# PipeWire 1.2.4 (2024-09-19) + +This is a bugfix release that is API and ABI compatible with the +previous 1.2.x and 1.0.x releases. + +## Highlights + - Avoid a crash in cleanup of globals. (#4250) + - Use systemd-logind to scan for new devices in v4l2. + - Some more bugfixes and improvements. + + +## PipeWire + - Avoid a crash in cleanup of globals. (#4250) + - Improve RequestProcess dispatch. + +## Tools + - Improve float parsing. (#4234) + +## SPA + - Clear the ringbuffer when stopping in libcamera. + - Use systemd-logind to scan for new devices in v4l2. (#3539, #3960) + - Queue dropped first buffer in v4l2. + - Unlink pcm devices when moving drivers to avoid broken pipe. + +## JACK + - Emit buffer_size callback in jack_activate() to improve + compatibility with GStreamer. (#4260) + +Older versions: + + # PipeWire 1.2.3 (2024-08-22) This is a bugfix release that is API and ABI compatible with the @@ -39,9 +70,6 @@ - pw-cli can now handle arbitrarily large input and params. (#4166) - Avoid some compiler warnings in pw-top. -Older versions: - - # PipeWire 1.2.2 (2024-07-31) This is a bugfix release that is API and ABI compatible with the
View file
pipewire-1.2.3.tar.bz2/meson.build -> pipewire-1.2.4.tar.bz2/meson.build
Changed
@@ -1,5 +1,5 @@ project('pipewire', 'c' , - version : '1.2.3', + version : '1.2.4', license : 'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' , meson_version : '>= 0.61.1', default_options : 'warning_level=3', @@ -363,7 +363,7 @@ 'gio-2.0': {}, 'gio-unix-2.0': {}, 'gstreamer-1.0': {'version': '>= 1.10.0'}, - 'gstreamer-plugins-base-1.0': {}, + 'gstreamer-base-1.0': {}, 'gstreamer-video-1.0': {}, 'gstreamer-audio-1.0': {}, 'gstreamer-allocators-1.0': {},
View file
pipewire-1.2.3.tar.bz2/pipewire-jack/src/pipewire-jack.c -> pipewire-1.2.4.tar.bz2/pipewire-jack/src/pipewire-jack.c
Changed
@@ -4537,6 +4537,17 @@ return res; } +static int +do_emit_buffer_size(struct spa_loop *loop, + bool async, uint32_t seq, const void *data, size_t size, void *user_data) +{ + struct client *c = user_data; + c->buffer_frames = c->rt.position->clock.duration; + pw_log_debug("%p: emit buffersize %d", c, c->buffer_frames); + c->bufsize_callback(c->buffer_frames, c->bufsize_arg); + return 0; +} + SPA_EXPORT int jack_activate (jack_client_t *client) { @@ -4577,8 +4588,12 @@ if (res < 0) { c->active = false; pw_data_loop_stop(c->loop); + } else if (SPA_LIKELY(c->bufsize_callback != NULL)) { + pw_thread_loop_unlock(c->context.loop); + pw_data_loop_invoke(c->loop, + do_emit_buffer_size, SPA_ID_INVALID, NULL, 0, true, c); + pw_thread_loop_lock(c->context.loop); } - pw_log_debug("%p: activate result:%d", c, res); thaw_callbacks(c); pw_thread_loop_unlock(c->context.loop);
View file
pipewire-1.2.3.tar.bz2/spa/include/spa/param/video/h264-utils.h -> pipewire-1.2.4.tar.bz2/spa/include/spa/param/video/h264-utils.h
Changed
@@ -49,7 +49,7 @@ SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&info->framerate), 0); if (info->max_framerate.denom != 0) spa_pod_builder_add(builder, - SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(info->max_framerate), 0); + SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(&info->max_framerate), 0); if (info->stream_format != 0) spa_pod_builder_add(builder, SPA_FORMAT_VIDEO_H264_streamFormat, SPA_POD_Id(info->stream_format), 0);
View file
pipewire-1.2.3.tar.bz2/spa/include/spa/param/video/mjpg-utils.h -> pipewire-1.2.4.tar.bz2/spa/include/spa/param/video/mjpg-utils.h
Changed
@@ -47,7 +47,7 @@ SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&info->framerate), 0); if (info->max_framerate.denom != 0) spa_pod_builder_add(builder, - SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(info->max_framerate), 0); + SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(&info->max_framerate), 0); return (struct spa_pod*)spa_pod_builder_pop(builder, &f); }
View file
pipewire-1.2.3.tar.bz2/spa/include/spa/param/video/raw-utils.h -> pipewire-1.2.4.tar.bz2/spa/include/spa/param/video/raw-utils.h
Changed
@@ -75,7 +75,7 @@ } if (info->max_framerate.denom != 0) spa_pod_builder_add(builder, - SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(info->max_framerate), 0); + SPA_FORMAT_VIDEO_maxFramerate, SPA_POD_Fraction(&info->max_framerate), 0); if (info->views != 0) spa_pod_builder_add(builder, SPA_FORMAT_VIDEO_views, SPA_POD_Int(info->views), 0); @@ -84,7 +84,7 @@ SPA_FORMAT_VIDEO_interlaceMode, SPA_POD_Id(info->interlace_mode), 0); if (info->pixel_aspect_ratio.denom != 0) spa_pod_builder_add(builder, - SPA_FORMAT_VIDEO_pixelAspectRatio,SPA_POD_Fraction(info->pixel_aspect_ratio), 0); + SPA_FORMAT_VIDEO_pixelAspectRatio, SPA_POD_Fraction(&info->pixel_aspect_ratio), 0); if (info->multiview_mode != 0) spa_pod_builder_add(builder, SPA_FORMAT_VIDEO_multiviewMode, SPA_POD_Id(info->multiview_mode), 0);
View file
pipewire-1.2.3.tar.bz2/spa/plugins/alsa/alsa-pcm.c -> pipewire-1.2.4.tar.bz2/spa/plugins/alsa/alsa-pcm.c
Changed
@@ -3489,6 +3489,10 @@ spa_list_append(&state->driver->rt.followers, &rt->driver_link); rt->driver = state->driver; spa_log_debug(state->log, "state:%p -> driver:%p", state, state->driver); + + if(state->linked && state->matching) { + try_unlink(state); + } } if (state->following) { remove_sources(state);
View file
pipewire-1.2.3.tar.bz2/spa/plugins/audioconvert/audioadapter.c -> pipewire-1.2.4.tar.bz2/spa/plugins/audioconvert/audioadapter.c
Changed
@@ -1360,7 +1360,8 @@ switch (SPA_NODE_EVENT_ID(event)) { case SPA_NODE_EVENT_Error: - /* Forward errors */ + case SPA_NODE_EVENT_RequestProcess: + /* Forward errors and process requests */ spa_node_emit_event(&this->hooks, event); break; default:
View file
pipewire-1.2.3.tar.bz2/spa/plugins/libcamera/libcamera-utils.cpp -> pipewire-1.2.4.tar.bz2/spa/plugins/libcamera/libcamera-utils.cpp
Changed
@@ -149,6 +149,7 @@ freeBuffers(impl, port); port->n_buffers = 0; + port->ring = SPA_RINGBUFFER_INIT(); return 0; }
View file
pipewire-1.2.3.tar.bz2/spa/plugins/v4l2/meson.build -> pipewire-1.2.4.tar.bz2/spa/plugins/v4l2/meson.build
Changed
@@ -4,8 +4,11 @@ v4l2_dependencies = spa_dep, libinotify_dep if libudev_dep.found() -v4l2_sources += 'v4l2-udev.c' -v4l2_dependencies += libudev_dep + v4l2_sources += 'v4l2-udev.c' + v4l2_dependencies += libudev_dep + if systemd_dep.found() + v4l2_dependencies += systemd_dep + endif endif v4l2lib = shared_library('spa-v4l2',
View file
pipewire-1.2.3.tar.bz2/spa/plugins/v4l2/v4l2-udev.c -> pipewire-1.2.4.tar.bz2/spa/plugins/v4l2/v4l2-udev.c
Changed
@@ -24,8 +24,13 @@ #include <spa/monitor/device.h> #include <spa/monitor/utils.h> +#include "config.h" #include "v4l2.h" +#ifdef HAVE_SYSTEMD +#include <systemd/sd-login.h> +#endif + #define MAX_DEVICES 64 enum action { @@ -61,6 +66,10 @@ struct spa_source source; struct spa_source notify; +#ifdef HAVE_SYSTEMD + struct spa_source logind; + sd_login_monitor *logind_monitor; +#endif }; static int impl_udev_open(struct impl *this) @@ -463,6 +472,12 @@ { int notify_fd; +#ifdef HAVE_SYSTEMD + /* Do not use inotify when using logind session monitoring */ + if (this->logind_monitor) + return 0; +#endif + if (this->notify.fd != -1) return 0; @@ -480,6 +495,65 @@ return 0; } +#ifdef HAVE_SYSTEMD +static void impl_on_logind_events(struct spa_source *source) +{ + struct impl *this = source->data; + + /* Recheck access on all v4l2 devices on logind session changes */ + for (size_t i = 0; i < this->n_devices; i++) + process_device(this, ACTION_CHANGE, &this->devicesi); + + sd_login_monitor_flush(this->logind_monitor); +} + +static int start_logind(struct impl *this) +{ + int res; + + if (this->logind_monitor) + return 0; + + /* If we are not actually running logind become a NOP */ + if (access("/run/systemd/seats/", F_OK) < 0) + return 0; + + res = sd_login_monitor_new("session", &this->logind_monitor); + if (res < 0) + return res; + + spa_log_info(this->log, "start logind monitoring"); + + this->logind.func = impl_on_logind_events; + this->logind.data = this; + this->logind.fd = sd_login_monitor_get_fd(this->logind_monitor); + this->logind.mask = SPA_IO_IN | SPA_IO_ERR; + + spa_loop_add_source(this->main_loop, &this->logind); + + return 0; +} + +static void stop_logind(struct impl *this) +{ + if (this->logind_monitor) { + spa_loop_remove_source(this->main_loop, &this->logind); + sd_login_monitor_unref(this->logind_monitor); + this->logind_monitor = NULL; + } +} +#else +/* Stubs to avoid more ifdefs below */ +static int start_logind(struct impl *this) +{ + return 0; +} + +static void stop_logind(struct impl *this) +{ +} +#endif + static void impl_on_fd_events(struct spa_source *source) { struct impl *this = source->data; @@ -495,8 +569,6 @@ spa_log_debug(this->log, "action %s", action); - start_inotify(this); - if (spa_streq(action, "add") || spa_streq(action, "change")) { process_udev_device(this, ACTION_CHANGE, dev); @@ -529,6 +601,9 @@ spa_log_debug(this->log, "monitor %p", this->umonitor); spa_loop_add_source(this->main_loop, &this->source); + if ((res = start_logind(this)) < 0) + return res; + if ((res = start_inotify(this)) < 0) return res; @@ -547,6 +622,7 @@ this->umonitor = NULL; stop_inotify(this); + stop_logind(this); return 0; } @@ -693,6 +769,9 @@ this = (struct impl *) handle; this->notify.fd = -1; +#ifdef HAVE_SYSTEMD + this->logind_monitor = NULL; +#endif this->log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log); this->main_loop = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Loop);
View file
pipewire-1.2.3.tar.bz2/spa/plugins/v4l2/v4l2-utils.c -> pipewire-1.2.4.tar.bz2/spa/plugins/v4l2/v4l2-utils.c
Changed
@@ -1324,6 +1324,11 @@ spa_zero(control); control.id = c->ctrl_id; if (xioctl(dev->fd, VIDIOC_G_CTRL, &control) < 0) { + /* Write only controls like relative pan/tilt return EACCES */ + if (errno == EACCES) { + c->value = 0; + continue; + } res = -errno; goto done; } @@ -1403,8 +1408,10 @@ /* Drop the first frame in order to work around common firmware * timestamp issues */ - if (buf.sequence == 0) + if (buf.sequence == 0) { + xioctl(dev->fd, VIDIOC_QBUF, &buf); return 0; + } pts = SPA_TIMEVAL_TO_NSEC(&buf.timestamp); spa_log_trace(this->log, "v4l2 %p: have output %d", this, buf.index);
View file
pipewire-1.2.3.tar.bz2/spa/plugins/videoconvert/videoadapter.c -> pipewire-1.2.4.tar.bz2/spa/plugins/videoconvert/videoadapter.c
Changed
@@ -1333,7 +1333,8 @@ switch (SPA_NODE_EVENT_ID(event)) { case SPA_NODE_EVENT_Error: - /* Forward errors */ + case SPA_NODE_EVENT_RequestProcess: + /* Forward errors and process requests */ spa_node_emit_event(&this->hooks, event); break; default:
View file
pipewire-1.2.3.tar.bz2/src/gst/gstpipewireformat.c -> pipewire-1.2.4.tar.bz2/src/gst/gstpipewireformat.c
Changed
@@ -923,7 +923,7 @@ g_ptr_array_add(fmt_array, g_strdup_printf ("%s", fmt_str)); #ifdef HAVE_GSTREAMER_DMA_DRM - { + if (modsj != DRM_FORMAT_MOD_INVALID) { char *drm_str; if ((drm_str = video_id_to_dma_drm_fourcc(idi, modsj)))
View file
pipewire-1.2.3.tar.bz2/src/modules/module-rtp-sap.c -> pipewire-1.2.4.tar.bz2/src/modules/module-rtp-sap.c
Changed
@@ -753,10 +753,10 @@ impl->gm_id6, impl->gm_id7, 0/* domain */); - } else { - spa_strbuf_append(&buf, "a=ts-refclk:%s\n", sdp->ts_refclk); + } else if (sdp->ts_refclk != NULL) { + spa_strbuf_append(&buf, "a=ts-refclk:%s\n", sdp->ts_refclk); } - spa_strbuf_append(&buf, "a=mediaclk:direct=%u\n", sdp->ts_offset); + spa_strbuf_append(&buf, "a=mediaclk:direct=%u\n", sdp->ts_offset); } else { spa_strbuf_append(&buf, "a=mediaclk:sender\n"); }
View file
pipewire-1.2.3.tar.bz2/src/pipewire/global.c -> pipewire-1.2.4.tar.bz2/src/pipewire/global.c
Changed
@@ -399,6 +399,9 @@ struct pw_resource *resource; struct pw_context *context = global->context; + if (global->destroyed) + return; + global->destroyed = true; pw_log_debug("%p: destroy %u", global, global->id);
View file
pipewire-1.2.3.tar.bz2/src/pipewire/impl-node.c -> pipewire-1.2.4.tar.bz2/src/pipewire/impl-node.c
Changed
@@ -1894,7 +1894,7 @@ break; case SPA_NODE_EVENT_RequestProcess: pw_log_debug("request process"); - if (!node->driving) { + if (!node->driving && !node->exported) { pw_impl_node_send_command(node->driver_node, &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_RequestProcess)); }
View file
pipewire-1.2.3.tar.bz2/src/tools/pw-cat.c -> pipewire-1.2.4.tar.bz2/src/tools/pw-cat.c
Changed
@@ -1778,7 +1778,8 @@ break; case OPT_VOLUME: - data.volume = (float)atof(optarg); + if (!spa_atof(optarg, &data.volume)) + data.volume = (float)atof(optarg); break; default: goto error_usage;
View file
pipewire-1.2.3.tar.bz2/src/tools/pw-loopback.c -> pipewire-1.2.4.tar.bz2/src/tools/pw-loopback.c
Changed
@@ -163,7 +163,8 @@ data.latency = atoi(optarg) * DEFAULT_RATE / SPA_MSEC_PER_SEC; break; case 'd': - data.delay = (float)atof(optarg); + if (!spa_atof(optarg, &data.delay)) + data.delay = (float)atof(optarg); break; case 'C': pw_properties_set(data.capture_props, PW_KEY_TARGET_OBJECT, optarg);
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.