Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package v4l2loopback for openSUSE:Factory checked in at 2025-11-27 15:21:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/v4l2loopback (Old) and /work/SRC/openSUSE:Factory/.v4l2loopback.new.14147 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "v4l2loopback" Thu Nov 27 15:21:50 2025 rev:27 rq:1320340 version:0.15.3 Changes: -------- --- /work/SRC/openSUSE:Factory/v4l2loopback/v4l2loopback.changes 2025-10-16 17:40:06.879851606 +0200 +++ /work/SRC/openSUSE:Factory/.v4l2loopback.new.14147/v4l2loopback.changes 2025-11-27 15:23:34.118059298 +0100 @@ -1,0 +2,10 @@ +Wed Nov 26 20:16:05 UTC 2025 - <[email protected]> + +- Update to version 0.15.3: + * Release v0.15.3 + * slightly better name for compat macro + * use linux>=6.18 accessor for v4l2->private_data + +- Fix version 0.15.2 changelog + +------------------------------------------------------------------- @@ -10,5 +19,0 @@ - * Bump version to v0.15.1 - * [ci] also allow skipping of exactly known kernel-version - * [ci] mark alpine/6.15.0.0-edge as known-failure - * [ci] don't fail if the badge-file did not change - * Adds support for XBGR32 (XR24) Old: ---- v4l2loopback-0.15.2.tar.xz New: ---- v4l2loopback-0.15.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ v4l2loopback.spec ++++++ --- /var/tmp/diff_new_pack.rIULBh/_old 2025-11-27 15:23:34.670082578 +0100 +++ /var/tmp/diff_new_pack.rIULBh/_new 2025-11-27 15:23:34.674082747 +0100 @@ -30,7 +30,7 @@ %{!?_modulesloaddir: %define _modulesloaddir /usr/lib/modules-load.d/} Name: v4l2loopback -Version: 0.15.2 +Version: 0.15.3 Release: 0 Summary: A kernel module to create V4L2 loopback devices License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.rIULBh/_old 2025-11-27 15:23:34.710084265 +0100 +++ /var/tmp/diff_new_pack.rIULBh/_new 2025-11-27 15:23:34.718084602 +0100 @@ -4,7 +4,7 @@ <param name="scm">git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> - <param name="revision">v0.15.2</param> + <param name="revision">v0.15.3</param> <param name="changesgenerate">enable</param> </service> <service name="recompress" mode="manual"> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.rIULBh/_old 2025-11-27 15:23:34.750085952 +0100 +++ /var/tmp/diff_new_pack.rIULBh/_new 2025-11-27 15:23:34.754086120 +0100 @@ -1,5 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/v4l2loopback/v4l2loopback.git</param> - <param name="changesrevision">c394f8fb2c168932055c2577247c42390198d7c9</param></service></servicedata> + <param name="changesrevision">a7e4a4dea36187ad3550c797d647bcc50faced42</param></service></servicedata> +(No newline at EOF) ++++++ v4l2loopback-0.15.2.tar.xz -> v4l2loopback-0.15.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v4l2loopback-0.15.2/ChangeLog new/v4l2loopback-0.15.3/ChangeLog --- old/v4l2loopback-0.15.2/ChangeLog 2025-10-15 19:56:39.000000000 +0200 +++ new/v4l2loopback-0.15.3/ChangeLog 2025-11-24 14:15:11.000000000 +0100 @@ -1,3 +1,10 @@ +v4l2loopback (0.15.3) unstable; urgency=medium + + [ IOhannes m zmölnig ] + * Use linux>=6.18 accessor for v4l2->private_data (#653) + + -- IOhannes m zmölnig (Debian/GNU) <[email protected]> Mon, 24 Nov 2025 14:11:58 +0100 + v4l2loopback (0.15.2) unstable; urgency=medium [ Simon Richter ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v4l2loopback-0.15.2/NEWS new/v4l2loopback-0.15.3/NEWS --- old/v4l2loopback-0.15.2/NEWS 2025-10-15 19:56:39.000000000 +0200 +++ new/v4l2loopback-0.15.3/NEWS 2025-11-24 14:15:11.000000000 +0100 @@ -1,3 +1,9 @@ +v4l2loopback (0.15.3) unstable; urgency=medium + + * Fix oops with linux 6.18+ + + -- IOhannes m zmölnig (Debian/GNU) <[email protected]> Mon, 24 Nov 2025 14:11:58 +0100 + v4l2loopback (0.15.2) unstable; urgency=medium * Fix FTBFS with linux 6.18+ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v4l2loopback-0.15.2/dkms.conf new/v4l2loopback-0.15.3/dkms.conf --- old/v4l2loopback-0.15.2/dkms.conf 2025-10-15 19:56:39.000000000 +0200 +++ new/v4l2loopback-0.15.3/dkms.conf 2025-11-24 14:15:11.000000000 +0100 @@ -1,5 +1,5 @@ PACKAGE_NAME="v4l2loopback" -PACKAGE_VERSION="0.15.2" +PACKAGE_VERSION="0.15.3" # V4L2_COLORSPACE_DCI_P3 BUILD_EXCLUSIVE_KERNEL_MIN="4.4" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v4l2loopback-0.15.2/v4l2loopback.c new/v4l2loopback-0.15.3/v4l2loopback.c --- old/v4l2loopback-0.15.2/v4l2loopback.c 2025-10-15 19:56:39.000000000 +0200 +++ new/v4l2loopback-0.15.3/v4l2loopback.c 2025-11-24 14:15:11.000000000 +0100 @@ -58,9 +58,16 @@ #define timer_delete_sync del_timer_sync #endif +#define fh_to_opener(ptr) container_of((ptr), struct v4l2_loopback_opener, fh) +#define file_to_opener(ptr) \ + container_of(file_to_v4l2_fh(ptr), struct v4l2_loopback_opener, fh) + #if LINUX_VERSION_CODE < KERNEL_VERSION(6, 18, 0) +#define v4l2l_f_to_opener(_file, _fh) fh_to_opener(_fh) #define v4l2_fh_add(fh, filp) v4l2_fh_add(fh) #define v4l2_fh_del(fh, filp) v4l2_fh_del(fh) +#else +#define v4l2l_f_to_opener(_file, _fh) file_to_opener(_file) #endif #define V4L2LOOPBACK_VERSION_CODE \ @@ -413,8 +420,6 @@ struct v4l2_fh fh; }; -#define fh_to_opener(ptr) container_of((ptr), struct v4l2_loopback_opener, fh) - /* this is heavily inspired by the bttv driver found in the linux kernel */ struct v4l2l_format { char *name; @@ -894,7 +899,7 @@ struct v4l2_capability *cap) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); int device_nr = v4l2loopback_get_vdev_nr(dev->vdev); __u32 capabilities = V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; @@ -929,7 +934,7 @@ struct v4l2_frmsizeenum *argp) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); /* there can be only one... */ if (argp->index) @@ -1011,7 +1016,7 @@ struct v4l2_frmivalenum *argp) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); /* there can be only one... */ if (argp->index) @@ -1054,7 +1059,7 @@ struct v4l2_fmtdesc *f) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); int fixed = dev->keep_format || has_other_owners(opener, dev); const struct v4l2l_format *fmt; @@ -1088,7 +1093,7 @@ struct v4l2_format *f) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, f->type) < 0) return -EINVAL; @@ -1112,7 +1117,7 @@ static int vidioc_s_fmt_vid(struct file *file, void *fh, struct v4l2_format *f) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 token = opener->io_method == V4L2L_IO_TIMEOUT ? V4L2L_TOKEN_TIMEOUT : token_from_type(f->type); @@ -1183,7 +1188,7 @@ static int vidioc_g_fmt_cap(struct file *file, void *fh, struct v4l2_format *f) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, f->type) < 0) return -EINVAL; f->fmt.pix = dev->pix_format; @@ -1214,7 +1219,7 @@ static int vidioc_g_fmt_out(struct file *file, void *fh, struct v4l2_format *f) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, f->type) < 0) return -EINVAL; /* @@ -1273,7 +1278,7 @@ /* do not care about type of opener, hope these enums would always be * compatible */ struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, parm->type) < 0) return -EINVAL; parm->parm.capture = dev->capture_param; @@ -1288,7 +1293,7 @@ struct v4l2_streamparm *parm) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); dprintk("S_PARM(frame-time=%u/%u)\n", parm->parm.capture.timeperframe.numerator, @@ -1429,7 +1434,7 @@ { __u32 index = outp->index; struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_OUTPUT)) return -ENOTTY; @@ -1460,7 +1465,7 @@ static int vidioc_g_output(struct file *file, void *fh, unsigned int *index) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_OUTPUT)) return -ENOTTY; if (index) @@ -1474,7 +1479,7 @@ static int vidioc_s_output(struct file *file, void *fh, unsigned int index) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_OUTPUT)) return -ENOTTY; return index == 0 ? index : -EINVAL; @@ -1488,7 +1493,7 @@ struct v4l2_input *inp) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); __u32 index = inp->index; if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_CAPTURE)) @@ -1526,7 +1531,7 @@ static int vidioc_g_input(struct file *file, void *fh, unsigned int *index) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_CAPTURE)) return -ENOTTY; /* NOTE: -EAGAIN might be more informative */ if (index) @@ -1540,7 +1545,7 @@ static int vidioc_s_input(struct file *file, void *fh, unsigned int index) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); if (index != 0) return -EINVAL; if (check_buffer_capability(dev, opener, V4L2_BUF_TYPE_VIDEO_CAPTURE)) @@ -1634,7 +1639,7 @@ struct v4l2_requestbuffers *reqbuf) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 token = opener->io_method == V4L2L_IO_TIMEOUT ? V4L2L_TOKEN_TIMEOUT : token_from_type(reqbuf->type); @@ -1763,7 +1768,7 @@ static int vidioc_querybuf(struct file *file, void *fh, struct v4l2_buffer *buf) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 type = buf->type; u32 index = buf->index; @@ -1826,7 +1831,7 @@ static int vidioc_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); struct v4l2l_buffer *bufd; u32 index = buf->index; u32 type = buf->type; @@ -1917,7 +1922,8 @@ static int get_capture_buffer(struct file *file) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(file->private_data); + struct v4l2_loopback_opener *opener = + v4l2l_f_to_opener(file, file->private_data); int pos, timeout_happened; u32 index; @@ -1972,7 +1978,7 @@ static int vidioc_dqbuf(struct file *file, void *fh, struct v4l2_buffer *buf) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 type = buf->type; int index; struct v4l2l_buffer *bufd; @@ -2030,7 +2036,7 @@ static int vidioc_streamon(struct file *file, void *fh, enum v4l2_buf_type type) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 token = token_from_type(type); /* short-circuit when using timeout buffer set */ @@ -2065,7 +2071,7 @@ enum v4l2_buf_type type) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); u32 token = token_from_type(type); /* short-circuit when using timeout buffer set */ @@ -2204,7 +2210,8 @@ u8 *addr; unsigned long start, size, offset; struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(file->private_data); + struct v4l2_loopback_opener *opener = + v4l2l_f_to_opener(file, file->private_data); struct v4l2l_buffer *buffer = NULL; int result = 0; MARK(); @@ -2278,7 +2285,8 @@ struct poll_table_struct *pts) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(file->private_data); + struct v4l2_loopback_opener *opener = + v4l2l_f_to_opener(file, file->private_data); __poll_t req_events = poll_requested_events(pts); int ret_mask = 0; @@ -2349,7 +2357,8 @@ static int v4l2_loopback_close(struct file *file) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(file->private_data); + struct v4l2_loopback_opener *opener = + v4l2l_f_to_opener(file, file->private_data); int result = 0; dprintk("close() -> dev@%p with image@%p\n", dev, dev ? dev->image : NULL); @@ -2399,7 +2408,7 @@ static int start_fileio(struct file *file, void *fh, enum v4l2_buf_type type) { struct v4l2_loopback_device *dev = v4l2loopback_getdevice(file); - struct v4l2_loopback_opener *opener = fh_to_opener(fh); + struct v4l2_loopback_opener *opener = v4l2l_f_to_opener(file, fh); struct v4l2_requestbuffers reqbuf = { .count = dev->buffer_count, .memory = V4L2_MEMORY_MMAP, .type = type }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/v4l2loopback-0.15.2/v4l2loopback.h new/v4l2loopback-0.15.3/v4l2loopback.h --- old/v4l2loopback-0.15.2/v4l2loopback.h 2025-10-15 19:56:39.000000000 +0200 +++ new/v4l2loopback-0.15.3/v4l2loopback.h 2025-11-24 14:15:11.000000000 +0100 @@ -12,7 +12,7 @@ #define V4L2LOOPBACK_VERSION_MAJOR 0 #define V4L2LOOPBACK_VERSION_MINOR 15 -#define V4L2LOOPBACK_VERSION_BUGFIX 2 +#define V4L2LOOPBACK_VERSION_BUGFIX 3 /* /dev/v4l2loopback interface */
