Changes of Revision 45

pipewire-aptx.changes Changed
x
 
1
@@ -1,4 +1,9 @@
2
 -------------------------------------------------------------------
3
+Wed Sep 25 20:09:19 UTC 2024 - Bjørn Lie <zaitor@opensuse.org>
4
+
5
+- Update to version 1.2.4
6
+
7
+-------------------------------------------------------------------
8
 Mon Sep 16 18:48:10 UTC 2024 - Bjørn Lie <zaitor@opensuse.org>
9
 
10
 - Update to version 1.2.3
11
pipewire-aptx.spec Changed
10
 
1
@@ -7,7 +7,7 @@
2
 %define soversion 0_2
3
 
4
 Name:           pipewire-aptx
5
-Version:        1.2.3
6
+Version:        1.2.4
7
 Release:        0
8
 Summary:        PipeWire Bluetooth aptX codec plugin
9
 License:        MIT
10
pipewire-1.2.3.tar.bz2/NEWS -> pipewire-1.2.4.tar.bz2/NEWS Changed
46
 
1
@@ -1,3 +1,34 @@
2
+# PipeWire 1.2.4 (2024-09-19)
3
+
4
+This is a bugfix release that is API and ABI compatible with the
5
+previous 1.2.x and 1.0.x releases.
6
+
7
+## Highlights
8
+  - Avoid a crash in cleanup of globals. (#4250)
9
+  - Use systemd-logind to scan for new devices in v4l2.
10
+  - Some more bugfixes and improvements.
11
+
12
+
13
+## PipeWire
14
+  - Avoid a crash in cleanup of globals. (#4250)
15
+  - Improve RequestProcess dispatch.
16
+
17
+## Tools
18
+  - Improve float parsing. (#4234)
19
+
20
+## SPA
21
+  - Clear the ringbuffer when stopping in libcamera.
22
+  - Use systemd-logind to scan for new devices in v4l2. (#3539, #3960)
23
+  - Queue dropped first buffer in v4l2.
24
+  - Unlink pcm devices when moving drivers to avoid broken pipe.
25
+
26
+## JACK
27
+  - Emit buffer_size callback in jack_activate() to improve
28
+    compatibility with GStreamer. (#4260)
29
+
30
+Older versions:
31
+
32
+
33
 # PipeWire 1.2.3 (2024-08-22)
34
 
35
 This is a bugfix release that is API and ABI compatible with the
36
@@ -39,9 +70,6 @@
37
   - pw-cli can now handle arbitrarily large input and params. (#4166)
38
   - Avoid some compiler warnings in pw-top.
39
 
40
-Older versions:
41
-
42
-
43
 # PipeWire 1.2.2 (2024-07-31)
44
 
45
 This is a bugfix release that is API and ABI compatible with the
46
pipewire-1.2.3.tar.bz2/meson.build -> pipewire-1.2.4.tar.bz2/meson.build Changed
17
 
1
@@ -1,5 +1,5 @@
2
 project('pipewire', 'c' ,
3
-  version : '1.2.3',
4
+  version : '1.2.4',
5
   license :  'MIT', 'LGPL-2.1-or-later', 'GPL-2.0-only' ,
6
   meson_version : '>= 0.61.1',
7
   default_options :  'warning_level=3',
8
@@ -363,7 +363,7 @@
9
   'gio-2.0': {},
10
   'gio-unix-2.0': {},
11
   'gstreamer-1.0': {'version': '>= 1.10.0'},
12
-  'gstreamer-plugins-base-1.0': {},
13
+  'gstreamer-base-1.0': {},
14
   'gstreamer-video-1.0': {},
15
   'gstreamer-audio-1.0': {},
16
   'gstreamer-allocators-1.0': {},
17
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
33
 
1
@@ -4537,6 +4537,17 @@
2
    return res;
3
 }
4
 
5
+static int
6
+do_emit_buffer_size(struct spa_loop *loop,
7
+                  bool async, uint32_t seq, const void *data, size_t size, void *user_data)
8
+{
9
+   struct client *c = user_data;
10
+   c->buffer_frames = c->rt.position->clock.duration;
11
+   pw_log_debug("%p: emit buffersize %d", c, c->buffer_frames);
12
+   c->bufsize_callback(c->buffer_frames, c->bufsize_arg);
13
+   return 0;
14
+}
15
+
16
 SPA_EXPORT
17
 int jack_activate (jack_client_t *client)
18
 {
19
@@ -4577,8 +4588,12 @@
20
    if (res < 0) {
21
        c->active = false;
22
        pw_data_loop_stop(c->loop);
23
+   } else if (SPA_LIKELY(c->bufsize_callback != NULL)) {
24
+       pw_thread_loop_unlock(c->context.loop);
25
+       pw_data_loop_invoke(c->loop,
26
+               do_emit_buffer_size, SPA_ID_INVALID, NULL, 0, true, c);
27
+       pw_thread_loop_lock(c->context.loop);
28
    }
29
-
30
    pw_log_debug("%p: activate result:%d", c, res);
31
    thaw_callbacks(c);
32
    pw_thread_loop_unlock(c->context.loop);
33
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
10
 
1
@@ -49,7 +49,7 @@
2
            SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&info->framerate), 0);
3
    if (info->max_framerate.denom != 0)
4
        spa_pod_builder_add(builder,
5
-           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(info->max_framerate), 0);
6
+           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(&info->max_framerate), 0);
7
    if (info->stream_format != 0)
8
        spa_pod_builder_add(builder,
9
            SPA_FORMAT_VIDEO_H264_streamFormat, SPA_POD_Id(info->stream_format), 0);
10
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
10
 
1
@@ -47,7 +47,7 @@
2
            SPA_FORMAT_VIDEO_framerate, SPA_POD_Fraction(&info->framerate), 0);
3
    if (info->max_framerate.denom != 0)
4
        spa_pod_builder_add(builder,
5
-           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(info->max_framerate), 0);
6
+           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(&info->max_framerate), 0);
7
    return (struct spa_pod*)spa_pod_builder_pop(builder, &f);
8
 }
9
 
10
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
19
 
1
@@ -75,7 +75,7 @@
2
    }
3
    if (info->max_framerate.denom != 0)
4
        spa_pod_builder_add(builder,
5
-           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(info->max_framerate), 0);
6
+           SPA_FORMAT_VIDEO_maxFramerate,  SPA_POD_Fraction(&info->max_framerate), 0);
7
    if (info->views != 0)
8
        spa_pod_builder_add(builder,
9
            SPA_FORMAT_VIDEO_views,     SPA_POD_Int(info->views), 0);
10
@@ -84,7 +84,7 @@
11
            SPA_FORMAT_VIDEO_interlaceMode, SPA_POD_Id(info->interlace_mode), 0);
12
    if (info->pixel_aspect_ratio.denom != 0)
13
        spa_pod_builder_add(builder,
14
-           SPA_FORMAT_VIDEO_pixelAspectRatio,SPA_POD_Fraction(info->pixel_aspect_ratio), 0);
15
+           SPA_FORMAT_VIDEO_pixelAspectRatio, SPA_POD_Fraction(&info->pixel_aspect_ratio), 0);
16
    if (info->multiview_mode != 0)
17
        spa_pod_builder_add(builder,
18
            SPA_FORMAT_VIDEO_multiviewMode, SPA_POD_Id(info->multiview_mode), 0);
19
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
12
 
1
@@ -3489,6 +3489,10 @@
2
                spa_list_append(&state->driver->rt.followers, &rt->driver_link);
3
            rt->driver = state->driver;
4
            spa_log_debug(state->log, "state:%p -> driver:%p", state, state->driver);
5
+
6
+           if(state->linked && state->matching) {
7
+               try_unlink(state);
8
+           }
9
        }
10
        if (state->following) {
11
            remove_sources(state);
12
pipewire-1.2.3.tar.bz2/spa/plugins/audioconvert/audioadapter.c -> pipewire-1.2.4.tar.bz2/spa/plugins/audioconvert/audioadapter.c Changed
11
 
1
@@ -1360,7 +1360,8 @@
2
 
3
    switch (SPA_NODE_EVENT_ID(event)) {
4
    case SPA_NODE_EVENT_Error:
5
-       /* Forward errors */
6
+   case SPA_NODE_EVENT_RequestProcess:
7
+       /* Forward errors and process requests */
8
        spa_node_emit_event(&this->hooks, event);
9
        break;
10
    default:
11
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
9
 
1
@@ -149,6 +149,7 @@
2
 
3
    freeBuffers(impl, port);
4
    port->n_buffers = 0;
5
+   port->ring = SPA_RINGBUFFER_INIT();
6
 
7
    return 0;
8
 }
9
pipewire-1.2.3.tar.bz2/spa/plugins/v4l2/meson.build -> pipewire-1.2.4.tar.bz2/spa/plugins/v4l2/meson.build Changed
15
 
1
@@ -4,8 +4,11 @@
2
 v4l2_dependencies =  spa_dep, libinotify_dep 
3
 
4
 if libudev_dep.found()
5
-v4l2_sources +=  'v4l2-udev.c' 
6
-v4l2_dependencies +=  libudev_dep 
7
+  v4l2_sources +=  'v4l2-udev.c' 
8
+  v4l2_dependencies +=  libudev_dep 
9
+  if systemd_dep.found()
10
+    v4l2_dependencies +=  systemd_dep 
11
+  endif
12
 endif
13
 
14
 v4l2lib = shared_library('spa-v4l2',
15
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
142
 
1
@@ -24,8 +24,13 @@
2
 #include <spa/monitor/device.h>
3
 #include <spa/monitor/utils.h>
4
 
5
+#include "config.h"
6
 #include "v4l2.h"
7
 
8
+#ifdef HAVE_SYSTEMD
9
+#include <systemd/sd-login.h>
10
+#endif
11
+
12
 #define MAX_DEVICES    64
13
 
14
 enum action {
15
@@ -61,6 +66,10 @@
16
 
17
    struct spa_source source;
18
    struct spa_source notify;
19
+#ifdef HAVE_SYSTEMD
20
+   struct spa_source logind;
21
+   sd_login_monitor *logind_monitor;
22
+#endif
23
 };
24
 
25
 static int impl_udev_open(struct impl *this)
26
@@ -463,6 +472,12 @@
27
 {
28
    int notify_fd;
29
 
30
+#ifdef HAVE_SYSTEMD
31
+   /* Do not use inotify when using logind session monitoring */
32
+   if (this->logind_monitor)
33
+       return 0;
34
+#endif
35
+
36
    if (this->notify.fd != -1)
37
        return 0;
38
 
39
@@ -480,6 +495,65 @@
40
    return 0;
41
 }
42
 
43
+#ifdef HAVE_SYSTEMD
44
+static void impl_on_logind_events(struct spa_source *source)
45
+{
46
+   struct impl *this = source->data;
47
+
48
+   /* Recheck access on all v4l2 devices on logind session changes */
49
+   for (size_t i = 0; i < this->n_devices; i++)
50
+       process_device(this, ACTION_CHANGE, &this->devicesi);
51
+
52
+   sd_login_monitor_flush(this->logind_monitor);
53
+}
54
+
55
+static int start_logind(struct impl *this)
56
+{
57
+   int res;
58
+
59
+   if (this->logind_monitor)
60
+       return 0;
61
+
62
+   /* If we are not actually running logind become a NOP */
63
+   if (access("/run/systemd/seats/", F_OK) < 0)
64
+       return 0;
65
+
66
+   res = sd_login_monitor_new("session", &this->logind_monitor);
67
+   if (res < 0)
68
+       return res;
69
+
70
+   spa_log_info(this->log, "start logind monitoring");
71
+
72
+   this->logind.func = impl_on_logind_events;
73
+   this->logind.data = this;
74
+   this->logind.fd = sd_login_monitor_get_fd(this->logind_monitor);
75
+   this->logind.mask = SPA_IO_IN | SPA_IO_ERR;
76
+
77
+   spa_loop_add_source(this->main_loop, &this->logind);
78
+
79
+   return 0;
80
+}
81
+
82
+static void stop_logind(struct impl *this)
83
+{
84
+   if (this->logind_monitor) {
85
+       spa_loop_remove_source(this->main_loop, &this->logind);
86
+       sd_login_monitor_unref(this->logind_monitor);
87
+       this->logind_monitor = NULL;
88
+   }
89
+}
90
+#else
91
+/* Stubs to avoid more ifdefs below */
92
+static int start_logind(struct impl *this)
93
+{
94
+   return 0;
95
+}
96
+
97
+static void stop_logind(struct impl *this)
98
+{
99
+}
100
+#endif
101
+
102
 static void impl_on_fd_events(struct spa_source *source)
103
 {
104
    struct impl *this = source->data;
105
@@ -495,8 +569,6 @@
106
 
107
    spa_log_debug(this->log, "action %s", action);
108
 
109
-   start_inotify(this);
110
-
111
    if (spa_streq(action, "add") ||
112
        spa_streq(action, "change")) {
113
        process_udev_device(this, ACTION_CHANGE, dev);
114
@@ -529,6 +601,9 @@
115
    spa_log_debug(this->log, "monitor %p", this->umonitor);
116
    spa_loop_add_source(this->main_loop, &this->source);
117
 
118
+   if ((res = start_logind(this)) < 0)
119
+       return res;
120
+
121
    if ((res = start_inotify(this)) < 0)
122
        return res;
123
 
124
@@ -547,6 +622,7 @@
125
    this->umonitor = NULL;
126
 
127
    stop_inotify(this);
128
+   stop_logind(this);
129
 
130
    return 0;
131
 }
132
@@ -693,6 +769,9 @@
133
 
134
    this = (struct impl *) handle;
135
    this->notify.fd = -1;
136
+#ifdef HAVE_SYSTEMD
137
+   this->logind_monitor = NULL;
138
+#endif
139
 
140
    this->log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log);
141
    this->main_loop = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Loop);
142
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
25
 
1
@@ -1324,6 +1324,11 @@
2
        spa_zero(control);
3
        control.id = c->ctrl_id;
4
        if (xioctl(dev->fd, VIDIOC_G_CTRL, &control) < 0) {
5
+           /* Write only controls like relative pan/tilt return EACCES */
6
+           if (errno == EACCES) {
7
+               c->value = 0;
8
+               continue;
9
+           }
10
            res = -errno;
11
            goto done;
12
        }
13
@@ -1403,8 +1408,10 @@
14
 
15
    /* Drop the first frame in order to work around common firmware
16
     * timestamp issues */
17
-   if (buf.sequence == 0)
18
+   if (buf.sequence == 0) {
19
+       xioctl(dev->fd, VIDIOC_QBUF, &buf);
20
        return 0;
21
+   }
22
 
23
    pts = SPA_TIMEVAL_TO_NSEC(&buf.timestamp);
24
    spa_log_trace(this->log, "v4l2 %p: have output %d", this, buf.index);
25
pipewire-1.2.3.tar.bz2/spa/plugins/videoconvert/videoadapter.c -> pipewire-1.2.4.tar.bz2/spa/plugins/videoconvert/videoadapter.c Changed
11
 
1
@@ -1333,7 +1333,8 @@
2
 
3
    switch (SPA_NODE_EVENT_ID(event)) {
4
    case SPA_NODE_EVENT_Error:
5
-       /* Forward errors */
6
+   case SPA_NODE_EVENT_RequestProcess:
7
+       /* Forward errors and process requests */
8
        spa_node_emit_event(&this->hooks, event);
9
        break;
10
    default:
11
pipewire-1.2.3.tar.bz2/src/gst/gstpipewireformat.c -> pipewire-1.2.4.tar.bz2/src/gst/gstpipewireformat.c Changed
10
 
1
@@ -923,7 +923,7 @@
2
         g_ptr_array_add(fmt_array, g_strdup_printf ("%s", fmt_str));
3
 
4
 #ifdef HAVE_GSTREAMER_DMA_DRM
5
-      {
6
+      if (modsj != DRM_FORMAT_MOD_INVALID) {
7
         char *drm_str;
8
 
9
         if ((drm_str = video_id_to_dma_drm_fourcc(idi, modsj)))
10
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
15
 
1
@@ -753,10 +753,10 @@
2
                    impl->gm_id6,
3
                    impl->gm_id7,
4
                    0/* domain */);
5
-       } else {
6
-           spa_strbuf_append(&buf, "a=ts-refclk:%s\n", sdp->ts_refclk);
7
+       } else if (sdp->ts_refclk != NULL) {
8
+           spa_strbuf_append(&buf, "a=ts-refclk:%s\n", sdp->ts_refclk);
9
        }
10
-       spa_strbuf_append(&buf, "a=mediaclk:direct=%u\n",   sdp->ts_offset);
11
+       spa_strbuf_append(&buf, "a=mediaclk:direct=%u\n", sdp->ts_offset);
12
    } else {
13
        spa_strbuf_append(&buf, "a=mediaclk:sender\n");
14
    }
15
pipewire-1.2.3.tar.bz2/src/pipewire/global.c -> pipewire-1.2.4.tar.bz2/src/pipewire/global.c Changed
11
 
1
@@ -399,6 +399,9 @@
2
    struct pw_resource *resource;
3
    struct pw_context *context = global->context;
4
 
5
+   if (global->destroyed)
6
+       return;
7
+
8
    global->destroyed = true;
9
 
10
    pw_log_debug("%p: destroy %u", global, global->id);
11
pipewire-1.2.3.tar.bz2/src/pipewire/impl-node.c -> pipewire-1.2.4.tar.bz2/src/pipewire/impl-node.c Changed
10
 
1
@@ -1894,7 +1894,7 @@
2
        break;
3
    case SPA_NODE_EVENT_RequestProcess:
4
        pw_log_debug("request process");
5
-       if (!node->driving) {
6
+       if (!node->driving && !node->exported) {
7
            pw_impl_node_send_command(node->driver_node,
8
                    &SPA_NODE_COMMAND_INIT(SPA_NODE_COMMAND_RequestProcess));
9
        }
10
pipewire-1.2.3.tar.bz2/src/tools/pw-cat.c -> pipewire-1.2.4.tar.bz2/src/tools/pw-cat.c Changed
11
 
1
@@ -1778,7 +1778,8 @@
2
            break;
3
 
4
        case OPT_VOLUME:
5
-           data.volume = (float)atof(optarg);
6
+           if (!spa_atof(optarg, &data.volume))
7
+               data.volume = (float)atof(optarg);
8
            break;
9
        default:
10
            goto error_usage;
11
pipewire-1.2.3.tar.bz2/src/tools/pw-loopback.c -> pipewire-1.2.4.tar.bz2/src/tools/pw-loopback.c Changed
11
 
1
@@ -163,7 +163,8 @@
2
            data.latency = atoi(optarg) * DEFAULT_RATE / SPA_MSEC_PER_SEC;
3
            break;
4
        case 'd':
5
-           data.delay = (float)atof(optarg);
6
+           if (!spa_atof(optarg, &data.delay))
7
+               data.delay = (float)atof(optarg);
8
            break;
9
        case 'C':
10
            pw_properties_set(data.capture_props, PW_KEY_TARGET_OBJECT, optarg);
11