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-06-03 17:54:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/v4l2loopback (Old)
 and      /work/SRC/openSUSE:Factory/.v4l2loopback.new.16005 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "v4l2loopback"

Tue Jun  3 17:54:36 2025 rev:24 rq:1282195 version:0.15.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/v4l2loopback/v4l2loopback.changes        
2025-03-13 15:08:28.679939431 +0100
+++ /work/SRC/openSUSE:Factory/.v4l2loopback.new.16005/v4l2loopback.changes     
2025-06-03 17:55:29.514463558 +0200
@@ -1,0 +2,32 @@
+Tue Jun 03 06:44:50 UTC 2025 - mun...@googlemail.com
+
+- Update to version 0.15.0:
+  * Release v0.15.0
+  * DKMS: dummy 'clean' rule
+  * Replace 'Skype' with 'Zoom'
+  * [github] note on "exact" v4l2loopback version
+  * [github] fix name of ArchLinux job
+  * publish build-state.svg directly to the Wiki
+  * [github] use current data for rolling releaeses
+  * [github] case-insensitive sort
+  * [github] drop openSUSE/leap
+  * [github] build more Fedora releases, and ArchLinux
+  * [github] support ArchLinux
+  * [github] DNF>=5 supports the "--skip-unavailable" flag
+  * [github] build on openSUSE
+  * [github] rename "not_${os}" to "not_${packager}"
+  * run CI against more kernels
+  * Create a badge with all kernels tested in the CI
+  * [github] 2nd attempt on testing with more kernels
+  * [github] also install kernels without a debrevision in the name
+  * only use `timer_delete_sync` compat macro for linux<6.2.0
+  * added functionality for linux 6.15+ (#626)
+  * use fixed-size types in public API
+  * [meta] pre-commit config to automatically run clang-format before 
committing
+  * v4l2loopback-ctl: (also) query the module version via ioctl
+  * change public ioctl numbers!
+  * V4L2LOOPBACK_CTL_VERSION ioctl
+  * order ioctl's by value
+  * dkms.conf updates
+
+-------------------------------------------------------------------

Old:
----
  v4l2loopback-0.14.0.tar.xz

New:
----
  v4l2loopback-0.15.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ v4l2loopback.spec ++++++
--- /var/tmp/diff_new_pack.xXIblr/_old  2025-06-03 17:55:30.402500379 +0200
+++ /var/tmp/diff_new_pack.xXIblr/_new  2025-06-03 17:55:30.406500545 +0200
@@ -30,7 +30,7 @@
 %{!?_modulesloaddir: %define _modulesloaddir /usr/lib/modules-load.d/}
 
 Name:           v4l2loopback
-Version:        0.14.0
+Version:        0.15.0
 Release:        0
 Summary:        A kernel module to create V4L2 loopback devices
 License:        GPL-2.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.xXIblr/_old  2025-06-03 17:55:30.442502037 +0200
+++ /var/tmp/diff_new_pack.xXIblr/_new  2025-06-03 17:55:30.450502369 +0200
@@ -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.14.0</param>
+    <param name="revision">v0.15.0</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="manual">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.xXIblr/_old  2025-06-03 17:55:30.470503199 +0200
+++ /var/tmp/diff_new_pack.xXIblr/_new  2025-06-03 17:55:30.474503365 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/umlaeute/v4l2loopback</param>
-              <param 
name="changesrevision">60a0315c6db154597dc733ea42139cf159644a7a</param></service></servicedata>
+              <param 
name="changesrevision">b9d5c7591ae96db3919c6f56b884955ae2f37236</param></service></servicedata>
 (No newline at EOF)
 

++++++ v4l2loopback-0.14.0.tar.xz -> v4l2loopback-0.15.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/.gitattributes 
new/v4l2loopback-0.15.0/.gitattributes
--- old/v4l2loopback-0.14.0/.gitattributes      2025-02-28 10:40:50.000000000 
+0100
+++ new/v4l2loopback-0.15.0/.gitattributes      2025-05-27 23:11:33.000000000 
+0200
@@ -1,2 +1,3 @@
 .git*          export-ignore
 .travis.yml    export-ignore
+.pre-commit-config.yaml        export-ignore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/.github/ISSUE_TEMPLATE/bug.yml 
new/v4l2loopback-0.15.0/.github/ISSUE_TEMPLATE/bug.yml
--- old/v4l2loopback-0.14.0/.github/ISSUE_TEMPLATE/bug.yml      2025-02-28 
10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/.github/ISSUE_TEMPLATE/bug.yml      2025-05-27 
23:11:33.000000000 +0200
@@ -40,7 +40,6 @@
         Use 
[Markdown](https://docs.github.com/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax)
 for formatting.
       placeholder: |
         What did you do (step by step)? What did you expect? What happened?
-      render: markdown
     validations:
       required: true
 
@@ -49,7 +48,8 @@
     attributes:
       label: v4l2loopback version
       description: |
-        What is the exact version of v4l2loopback you are using? (e.g. as 
reported by `sudo dmesg  | grep -i "v4l2loopback driver version"` or `git 
describe`)
+        What is the exact version of v4l2loopback you are using? (e.g. as 
reported by `sudo dmesg  | grep -i "v4l2loopback driver version"` or `git 
describe`).
+        Please do **not** use a generic version like `latest from main` as 
this will change over time.
       placeholder: |
         e.g. v0.13.1-10-g2014627
     validations:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/v4l2loopback-0.14.0/.github/workflows/kmod-compatibility-checks.yml 
new/v4l2loopback-0.15.0/.github/workflows/kmod-compatibility-checks.yml
--- old/v4l2loopback-0.14.0/.github/workflows/kmod-compatibility-checks.yml     
2025-02-28 10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/.github/workflows/kmod-compatibility-checks.yml     
2025-05-27 23:11:33.000000000 +0200
@@ -1,3 +1,4 @@
+---
 name: kmod compatibility checks
 on:
   pull_request:
@@ -8,9 +9,11 @@
     branches:
       - develop
       - main
+  schedule:
+    - cron: '37 5 * * 1'
 
 jobs:
-  get_debuntu_releases:
+  get_distro_releases:
     runs-on: ubuntu-latest
     steps:
       - name: install dependencies
@@ -26,20 +29,38 @@
         # - drop some blacklisted releases (e.g. 'bionic', 'xenial')
         # - format as a JSON array
         run: |
-          blacklist="bionic|xenial"
-          echo matrix=$(true; (curl -s 
"https://hub.docker.com/v2/repositories/library/buildpack-deps/tags?page_size=1000";
 | jq -r '.results[] | .name' | sort -u; for url in 
http://archive.ubuntu.com/ubuntu; do curl -s "${url}/dists/" | grep "href=" | 
sed -e 's|.*a href="||' -e 's|".*||' -e 's|/$||'; done | sort -u; for d in 
unstable testing stable oldstable; do echo $d; done) | grep -vE 
"^(${blacklist})$" | sort | uniq -d | while read x; do echo -n '"'${x}'" '; 
done | sed -e 's|^ *|[|' -e 's| *$|]|' -e 's|  *|,|g') | tee -a $GITHUB_OUTPUT
+          ubuntu_blacklist="bionic|xenial"
+          # debian (hardcoded)
+          debimages="unstable testing stable oldstable"
+          # ubuntu (based on availability)
+          debimages="${debimages} $(true; (curl -s 
"https://hub.docker.com/v2/repositories/library/buildpack-deps/tags?page_size=1000";
 | jq -r '.results[] | .name' | sort -u; curl -s 
"http://archive.ubuntu.com/ubuntu/dists/"; | grep "href=" | sed -e 's|.*a 
href="||' -e 's|".*||' -e 's|/$||') | sort | uniq -d | grep -vE 
"^(${ubuntu_blacklist})$")"
+
+          # last 5 fedora images
+          fedversions="$(curl -s 
"https://hub.docker.com/v2/repositories/library/fedora/tags?page_size=20"; | jq 
-r '.results[] | .name' | sort -u | egrep "^[0-9]*$" | sort -n | tail -5)"
+
+          # make images
+          images=""
+          # Debian: prefix deb-images with 'buildpack-deps:'
+          images="$(for i in ${debimages}; do echo "${i} buildpack-deps:${i}"; 
done) ${images}"
+          # Fedora
+          images="$(for i in ${fedversions}; do echo "fedora${i} fedora:${i}"; 
done) ${images}"
+
+          # more images in name/container pairs
+          images="alpine openebs/alpine-bash archlinux archlinux:base-devel 
tumbleweed opensuse/tumbleweed ${images}"
+
+          # create a JSON matrix
+          echo matrix=$(echo ${images} | xargs -n2 echo | jq -Rn '{include: 
[inputs] | map( split(" ") | { name:.[0], image:.[1] } )}') | tee -a 
${GITHUB_OUTPUT}
         id: set-matrix
     outputs:
       matrix: ${{ steps.set-matrix.outputs.matrix }}
 
   kmod-compile:
     runs-on: ubuntu-latest
-    needs: get_debuntu_releases
+    needs: get_distro_releases
     strategy:
-      matrix:
-        series: ${{ fromJson(needs.get_debuntu_releases.outputs.matrix) }}
+      matrix: ${{ fromJson(needs.get_distro_releases.outputs.matrix) }}
       fail-fast: false
-    container: buildpack-deps:${{ matrix.series }}
+    container: ${{ matrix.image }}
     env:
       JOB_KNOWN_FAILURES: "3.13 3.16 3.19 4.2"
     steps:
@@ -48,29 +69,74 @@
       - name: Compile against all available kernel header versions
         shell: bash
         run: |
-          apt-get update --quiet;
-          apt-get install --yes --no-install-recommends kmod
-          apt-get install --yes --no-install-recommends dkms || true
-          apt-cache search "linux-headers-[0-9.]*-[0-9]*-" | cut -d " " -f1 \
+          echo "name '${{ matrix.name }}' on image '${{ matrix.image }}'"
+
+          # Debian and derivatives
+          not_apt=true; if which apt-get >/dev/null 2>/dev/null; then 
not_apt=false; fi
+          ${not_apt} || echo "running apt-based distribution (Debian and 
derivatives)"
+          deb_packages="kmod dkms lsb-release dctrl-tools 
linux-headers-generic linux-headers"
+          ${not_apt} || apt-get update --quiet
+          ${not_apt} || apt-cache show ${deb_packages} \
+                | sed -e '/^Package:/!d' -e 's|^Package:[[:space:]]*||' | sort 
-u \
+                | xargs apt-get install --yes --no-install-recommends || true
+          ${not_apt} || grep-aptavail -n -s Package  -F Provides -X 
linux-headers -o -F Provides -X linux-headers-generic \
+                | xargs apt-get install --yes --no-install-recommends || true
+          ${not_apt} || apt-cache search "linux-headers-[0-9.]*-[0-9]*-" | cut 
-d " " -f1 \
                 | sed -e 's|linux-headers-\([0-9.]*\)-[0-9]*-\(.*\)|\0 \1 \2|' 
| sort -t- -k3,4 -V -r | sort  -u -k2,3 -V | cut -d " " -f1 \
-                | xargs apt-get install --yes --no-install-recommends
+                | xargs apt-get install --yes --no-install-recommends || true
+
+          # Alpine
+          not_apkg=true; if which apk >/dev/null 2>/dev/null; then 
not_apkg=false; fi
+          ${not_apkg} || echo "running apk-based distribution (Alpine,...)"
+          ${not_apkg} || apk add lsb-release build-base linux-headers 
linux-firmware-none
+          ${not_apkg} || apk search "linux-*-dev" | grep "^linux" | sed -e 
's|-dev-.*|-dev|' | xargs -n1 apk add
+
+          # Fedora
+          not_dnf5=true; if dnf5 --version >/dev/null; then not_dnf5=false; fi
+          ${not_dnf5} || echo "running dnf5-based distribution 
(Fedora>=41,...)"
+          ${not_dnf5} || dnf5 upgrade -y --refresh
+          ${not_dnf5} || dnf5 install -y --setopt=install_weak_deps=False 
--skip-unavailable lsb-release dkms kernel-devel kernel-headers 
kernel-modules-core
+          not_dnf=true; if ${not_dnf5} && dnf --version>/dev/null; then 
not_dnf=false; fi
+          ${not_dnf} || echo "running dnf-based distribution (Fedora<41,...)"
+          ${not_dnf} || dnf upgrade -y --refresh
+          ${not_dnf} || dnf install -y --setopt=install_weak_deps=False 
lsb-release dkms kernel-devel kernel-headers kernel-modules-core
+
+          # openSUSE
+          not_zypper=true; if zypper --version >/dev/null; then 
not_zypper=false; fi
+          ${not_zypper} || echo "running zypper-based distribution 
(openSUSE,...)"
+          ${not_zypper} || zypper update --no-confirm
+          ${not_zypper} || zypper --ignore-unknown install --no-confirm 
--no-recommends dkms lsb-release  kernel-devel
+
+          # Arch
+          not_pacman=true; if pacman --version >/dev/null; then 
not_pacman=false; fi
+          ${not_pacman} || echo "running pacman-based distribution 
(ArchLinux,...)"
+          ${not_pacman} || pacman --noconfirm -Suy dkms lsb-release
+          ${not_pacman} || pacman -Si dkms | sed -n '/^Optional/{ s/[^:]*: 
//;:a;s/:.*//p;n;/^[^ \t]/q;ba;}' | sort -u | xargs pacman -S --noconfirm
+
+          # run the actual builds
+          lsb_release -a
           failed=""
+          soft_failed=""
           succeeded=""
           skipped=""
           for kbuild in /lib/modules/*/build; do
             test -d $kbuild || continue
             kver=${kbuild%/build}
             kver=${kver##*/}
+            echo "=== Preparing ${kver} ===";
+            touch "/lib/modules/${kver}/modules.builtin"
+            depmod ${kver}
             echo "=== Testing ${kver} ===";
-            ret=$(make KERNELRELEASE="${kver}" >&2; echo $?);
+            ret=$(make KERNELRELEASE="${kver}" >&2; echo $?)
             if [ ${ret} -eq 0 ]; then
               succeeded="${succeeded} ${kver}"
-              modinfo v4l2loopback.ko;
-            else
+              test ! -e /lib/modules/${kver}/modules.dep || ret=$(modinfo -k 
${kver} v4l2loopback.ko >&2; echo $?)
+            fi
+            if [ ${ret} -ne 0 ]; then
               case " ${JOB_KNOWN_FAILURES} " in
               *" ${kver%.*} "*)
                 echo "#### Skipped known failure ${kver}";
-                skipped="${skipped} ${kver}";
+                soft_failed="${soft_failed} ${kver}";
                 ;;
               *)
                 if test -e "${kbuild}/.config" && ! grep -qE 
"^(CONFIG_VIDEO_DEV|CONFIG_VIDEO_V4L2)=" "${kbuild}/.config"; then
@@ -85,11 +151,84 @@
             fi;
             make KERNELRELEASE="${kver}" clean || test ${ret} -ne 0
           done
+
+          # record & report the build state
+          statefile=buildstate.txt
+          osname="$(lsb_release -si)"
+          osversion="$(lsb_release -sr)"
+          osrelease="$(lsb_release -sc)"
+          test "${osrelease}" != "n/a" || osrelease="${osversion}"
+          test "${osrelease}" != "rolling" || osrelease="$(date +%Y%m%d)"
+          rm -rf "${statefile}"
+          for k in ${succeeded}; do
+            echo "${osname} ${osversion} ${osrelease} ${k} success"
+          done >> "${statefile}"
+          for k in ${skipped}; do
+            echo "${osname} ${osversion} ${osrelease} ${k} skip"
+          done >> "${statefile}"
+          for k in ${soft_failed}; do
+            echo "${osname} ${osversion} ${osrelease} ${k} softfail"
+          done >> "${statefile}"
+          for k in ${failed}; do
+            echo "${osname} ${osversion} ${osrelease} ${k} failure"
+          done >> "${statefile}"
+          echo "#### Successful builds for kernels: ${succeeded}";
+          if [ "x${skipped}" != "x" ]; then
+            echo "#### Skipped kernels: ${skipped}";
+          fi
+          if [ "x${soft_failed}" != "x" ]; then
+            echo "#### Skipped failed kernels: ${soft_failed}";
+          fi
           if [ "x${failed}" != "x" ]; then
             echo "#### Failed kernels: ${failed}";
             exit 1
           fi
-          if [ "x${skipped}" != "x" ]; then
-            echo "#### Skipped kernels: ${skipped}";
-          fi
-          echo "#### Successful builds for kernels: ${succeeded}";
+      - name: Publish state
+        if: success() || failure()
+        uses: actions/upload-artifact@v4
+        with:
+          name: ${{ matrix.name }}
+          path: buildstate.txt
+
+  make_badges:
+    if: always()
+    needs: kmod-compile
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout WIKI repository
+        uses: actions/checkout@v4
+        with:
+          repository: v4l2loopback/v4l2loopback.wiki.git
+          ref: master
+          token: ${{ secrets.PUSH2REPO_TOKEN }}
+      - name: Get status artifacts
+        uses: actions/download-artifact@v4
+      - name: Create badge
+        id: createbadge
+        shell: bash
+        run: |
+          badge=build-state.svg
+          echo "badge=${badge}" >> ${GITHUB_OUTPUT}
+          find */ -type f -name "buildstate.txt" -exec grep -h . {} + | sort 
-uf > allstates.txt
+          cat -n allstates.txt
+          numtests=$(grep -c . allstates.txt)
+          echo -n > "${badge}"
+          echo '<?xml version="1.0" encoding="UTF-8"?> <svg 
xmlns="http://www.w3.org/2000/svg"; width="333" height="@height@">' | sed -e 
"s|@height@|$((numtests*22))|g">> "${badge}"
+          echo '<style>.success {fill:#4C1} .skip {fill:#D3D3D3} .softfail 
{fill:#FE7D37} .failure {fill:#E05D44}</style> <g fill="#fff" 
text-anchor="left" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" 
font-size="11"> <linearGradient id="b" x2="0" y2="100%"> <stop offset="0" 
stop-color="#bbb" stop-opacity=".1"/> <stop offset="1" stop-opacity=".1"/> 
</linearGradient>' | sed -e "s|@height@|$((numtests * 22))|g" >> "${badge}"
+          cat -n allstates.txt | while read num os _ version kernel state; do
+            dy=$(((num-1)*22))
+            echo '<g transform="translate(0 @dy@)" mask="url(#anybadge_1)"> 
<path fill="#555" d="M0 0h148v20H0z"/> <path class="@state@" d="M148 
0h185v20H148z"/> <path fill="url(#b)" d="M0 0h333v20H0z"/> <text x="9.0" y="15" 
fill="#010101" fill-opacity=".3">@os@/@version@</text> <text x="8.0" 
y="14">@os@/@version@</text> <text x="156.5" y="15" fill="#010101" 
fill-opacity=".3">@kernel@</text> <text x="155.5" y="14">@kernel@</text> </g>' 
| sed -e "s|@dy@|${dy}|g" -e "s|@state@|${state}|g" -e "s|@os@|${os}|g" -e 
"s|@version@|${version}|g" -e "s|@kernel@|${kernel}|g"
+          done >> "${badge}"
+          echo '</g> </svg>' >> "${badge}"
+          cat "${badge}"
+      - name: Deploy badge to wiki
+        if: github.ref == 'refs/heads/main' && github.event_name != 
'pull_request'
+        env:
+          badge: ${{ steps.createbadge.outputs.badge }}
+        run: |
+          echo "${badge}"
+          git config user.name "github-actions[bot]"
+          git config user.email 
"41898282+github-actions[bot]@users.noreply.github.com"
+          git add "${badge}"
+          git commit -m "Update build-state.svg for ${{ github.sha }}"
+          git push
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/.pre-commit-config.yaml 
new/v4l2loopback-0.15.0/.pre-commit-config.yaml
--- old/v4l2loopback-0.14.0/.pre-commit-config.yaml     1970-01-01 
01:00:00.000000000 +0100
+++ new/v4l2loopback-0.15.0/.pre-commit-config.yaml     2025-05-27 
23:11:33.000000000 +0200
@@ -0,0 +1,6 @@
+---
+repos:
+-   repo: https://github.com/pre-commit/mirrors-clang-format
+    rev: v20.1.0
+    hooks:
+    -   id: clang-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/ChangeLog 
new/v4l2loopback-0.15.0/ChangeLog
--- old/v4l2loopback-0.14.0/ChangeLog   2025-02-28 10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/ChangeLog   2025-05-27 23:11:33.000000000 +0200
@@ -1,3 +1,28 @@
+v4l2loopback (0.15.0) unstable; urgency=medium
+
+  [ IOhannes m zmölnig ]
+  * change public ioctl numbers!
+  * add V4L2LOOPBACK_CTL_VERSION ioctl
+
+  * use fixed-size types in public API
+  * order ioctl's by value
+  * v4l2loopback-ctl: (also) query the module version via ioctl
+  * [meta] pre-commit config to automatically run clang-format before 
committing
+  * only use `timer_delete_sync` compat macro for linux<6.2.0
+  * [github] build on ArchLinux, Fedora, openSUSE
+  * [github] Create a badge with all kernels tested in the CI
+  * [github] note on "exact" v4l2loopback version in issue template
+  * README Replace 'Skype' with 'Zoom'
+  * DKMS: dummy 'clean' rule
+
+  [ Theodore Chiu ]
+  * added functionality for linux 6.15+ (#626)
+
+  [ Andreas Beckmann ]
+  * dkms.conf updates
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlae...@debian.org>  Tue, 27 May 2025 
22:46:46 +0200
+
 v4l2loopback (0.14.0) unstable; urgency=medium
 
   [ IOhannes m zmölnig ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/NEWS new/v4l2loopback-0.15.0/NEWS
--- old/v4l2loopback-0.14.0/NEWS        2025-02-28 10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/NEWS        2025-05-27 23:11:33.000000000 +0200
@@ -1,3 +1,26 @@
+v4l2loopback (0.15.0) unstable; urgency=medium
+
+  * Change public ioctl numbers!
+    + But retain compatibility
+  * Add V4L2LOOPBACK_CTL_VERSION ioctl
+  * Only use `timer_delete_sync` compat macro for linux<6.2.0
+  * Added functionality for linux 6.15+
+  * dkms.conf updates
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlae...@debian.org>  Tue, 27 May 2025 
22:46:46 +0200
+
+v4l2loopback (0.14.0) unstable; urgency=medium
+
+  * Refactor poll()
+  * Fix FIFO management
+  * V4L2 UAPI compliance in format negotation and stream activation
+  * Do not discard return value of vm_alloc_page
+  * Use atomic operations to count vm_open/close
+  * Simplify loop preparation cases in  mmap()
+  * Code cleanup
+
+ -- IOhannes m zmölnig (Debian/GNU) <umlae...@debian.org>  Fri, 28 Feb 2025 
09:48:06 +0100
+
 v4l2loopback-0.13.2
 
   * V4L2 UAPI compliance in format negotation and stream activation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/README.md 
new/v4l2loopback-0.15.0/README.md
--- old/v4l2loopback-0.14.0/README.md   2025-02-28 10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/README.md   2025-05-27 23:11:33.000000000 +0200
@@ -6,7 +6,7 @@
 video devices, but the video will not be read from e.g. a capture card but
 instead it is generated by another application.
 This allows you for instance to apply some nifty video effects on your
-Skype video...
+Zoom video call...
 It also allows some more serious things (e.g. I've been using it to add
 streaming capabilities to an application by the means of hooking GStreamer into
 the loopback devices).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/dkms.conf 
new/v4l2loopback-0.15.0/dkms.conf
--- old/v4l2loopback-0.14.0/dkms.conf   2025-02-28 10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/dkms.conf   2025-05-27 23:11:33.000000000 +0200
@@ -1,5 +1,8 @@
 PACKAGE_NAME="v4l2loopback"
-PACKAGE_VERSION="0.14.0"
+PACKAGE_VERSION="0.15.0"
+
+# V4L2_COLORSPACE_DCI_P3
+BUILD_EXCLUSIVE_KERNEL_MIN="4.4"
 
 if [ -f $kernel_source_dir/.config ]; then
     . $kernel_source_dir/.config
@@ -17,7 +20,7 @@
 
 # Items below here should not have to change with each driver version
 MAKE[0]="make KERNEL_DIR=${kernel_source_dir} v4l2loopback"
-CLEAN="make clean"
+CLEAN=true
 
 BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
 DEST_MODULE_LOCATION[0]="/extra"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/utils/v4l2loopback-ctl.c 
new/v4l2loopback-0.15.0/utils/v4l2loopback-ctl.c
--- old/v4l2loopback-0.14.0/utils/v4l2loopback-ctl.c    2025-02-28 
10:40:50.000000000 +0100
+++ new/v4l2loopback-0.15.0/utils/v4l2loopback-ctl.c    2025-05-27 
23:11:33.000000000 +0200
@@ -1551,7 +1551,19 @@
                        if (len > 0) {
                                if (len < sizeof(buf))
                                        buf[len] = 0;
-                               printf("v4l2loopback module v%s", buf);
+                               printf("v4l2loopback sysfs v%s", buf);
+                       }
+                       close(fd);
+               }
+               fd = open_controldevice();
+               if (fd >= 0) {
+                       __u32 version = 0;
+                       if (ioctl(fd, V4L2LOOPBACK_CTL_VERSION, &version) ==
+                           0) {
+                               printf("v4l2loopback module v%d.%d.%d\n",
+                                      (version >> 16) & 0xff,
+                                      (version >> 8) & 0xff,
+                                      (version >> 0) & 0xff);
                        }
                }
                break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/v4l2loopback.c 
new/v4l2loopback-0.15.0/v4l2loopback.c
--- old/v4l2loopback-0.14.0/v4l2loopback.c      2025-02-28 10:40:50.000000000 
+0100
+++ new/v4l2loopback-0.15.0/v4l2loopback.c      2025-05-27 23:11:33.000000000 
+0200
@@ -33,6 +33,10 @@
 #include <linux/miscdevice.h>
 #include "v4l2loopback.h"
 
+#define V4L2LOOPBACK_CTL_ADD_legacy 0x4C80
+#define V4L2LOOPBACK_CTL_REMOVE_legacy 0x4C81
+#define V4L2LOOPBACK_CTL_QUERY_legacy 0x4C82
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
 #error This module is not supported on kernels before 4.0.0.
 #endif
@@ -49,6 +53,10 @@
 #define VFL_TYPE_VIDEO VFL_TYPE_GRABBER
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
+#define timer_delete_sync del_timer_sync
+#endif
+
 #define V4L2LOOPBACK_VERSION_CODE                                              
\
        KERNEL_VERSION(V4L2LOOPBACK_VERSION_MAJOR, V4L2LOOPBACK_VERSION_MINOR, \
                       V4L2LOOPBACK_VERSION_BUGFIX)
@@ -1788,8 +1796,8 @@
 static void buffer_written(struct v4l2_loopback_device *dev,
                           struct v4l2l_buffer *buf)
 {
-       del_timer_sync(&dev->sustain_timer);
-       del_timer_sync(&dev->timeout_timer);
+       timer_delete_sync(&dev->sustain_timer);
+       timer_delete_sync(&dev->timeout_timer);
 
        spin_lock_bh(&dev->list_lock);
        list_move_tail(&buf->list_head, &dev->outbufs_list);
@@ -2366,8 +2374,8 @@
        }
 
        if (atomic_dec_and_test(&dev->open_count)) {
-               del_timer_sync(&dev->sustain_timer);
-               del_timer_sync(&dev->timeout_timer);
+               timer_delete_sync(&dev->sustain_timer);
+               timer_delete_sync(&dev->timeout_timer);
                if (!dev->keep_format) {
                        mutex_lock(&dev->image_mutex);
                        free_buffers(dev);
@@ -2972,6 +2980,7 @@
        struct v4l2_loopback_config *confptr = &conf;
        int device_nr, capture_nr, output_nr;
        int ret;
+       const __u32 version = V4L2LOOPBACK_VERSION_CODE;
 
        ret = mutex_lock_killable(&v4l2loopback_ctl_mutex);
        if (ret)
@@ -2984,6 +2993,7 @@
                break;
                /* add a v4l2loopback device (pair), based on the user-provided 
specs */
        case V4L2LOOPBACK_CTL_ADD:
+       case V4L2LOOPBACK_CTL_ADD_legacy:
                if (parm) {
                        if ((ret = copy_from_user(&conf, (void *)parm,
                                                  sizeof(conf))) < 0)
@@ -2996,7 +3006,8 @@
                break;
                /* remove a v4l2loopback device (both capture and output) */
        case V4L2LOOPBACK_CTL_REMOVE:
-               ret = v4l2loopback_lookup((int)parm, &dev);
+       case V4L2LOOPBACK_CTL_REMOVE_legacy:
+               ret = v4l2loopback_lookup((__u32)parm, &dev);
                if (ret >= 0 && dev) {
                        ret = -EBUSY;
                        if (dev->open_count.counter > 0)
@@ -3009,6 +3020,7 @@
                 * this is mostly about limits (which cannot be queried 
directly with  VIDIOC_G_FMT and friends
                 */
        case V4L2LOOPBACK_CTL_QUERY:
+       case V4L2LOOPBACK_CTL_QUERY_legacy:
                if (!parm)
                        break;
                if ((ret = copy_from_user(&conf, (void *)parm, sizeof(conf))) <
@@ -3059,6 +3071,15 @@
                        ret = -EFAULT;
                        break;
                }
+               ret = 0;
+               break;
+       case V4L2LOOPBACK_CTL_VERSION:
+               if (!parm)
+                       break;
+               if (copy_to_user((void *)parm, &version, sizeof(version))) {
+                       ret = -EFAULT;
+                       break;
+               }
                ret = 0;
                break;
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/v4l2loopback-0.14.0/v4l2loopback.h 
new/v4l2loopback-0.15.0/v4l2loopback.h
--- old/v4l2loopback-0.14.0/v4l2loopback.h      2025-02-28 10:40:50.000000000 
+0100
+++ new/v4l2loopback-0.15.0/v4l2loopback.h      2025-05-27 23:11:33.000000000 
+0200
@@ -11,7 +11,7 @@
 #define _V4L2LOOPBACK_H
 
 #define V4L2LOOPBACK_VERSION_MAJOR 0
-#define V4L2LOOPBACK_VERSION_MINOR 14
+#define V4L2LOOPBACK_VERSION_MINOR 15
 #define V4L2LOOPBACK_VERSION_BUGFIX 0
 
 /* /dev/v4l2loopback interface */
@@ -32,8 +32,8 @@
          * or one (and only one) of them must be -1
          *
          */
-       int output_nr;
-       int unused; /*capture_nr;*/
+       __s32 output_nr;
+       __s32 unused; /*capture_nr;*/
 
        /**
          * a nice name for your device
@@ -45,27 +45,27 @@
          * allowed frame size
          * if too low, default values are used
          */
-       unsigned int min_width;
-       unsigned int max_width;
-       unsigned int min_height;
-       unsigned int max_height;
+       __u32 min_width;
+       __u32 max_width;
+       __u32 min_height;
+       __u32 max_height;
 
        /**
          * number of buffers to allocate for the queue
          * if set to <=0, default values are used
          */
-       int max_buffers;
+       __s32 max_buffers;
 
        /**
          * how many consumers are allowed to open this device concurrently
          * if set to <=0, default values are used
          */
-       int max_openers;
+       __s32 max_openers;
 
        /**
          * set the debugging level for this device
          */
-       int debug;
+       __s32 debug;
 
        /**
          * whether to announce OUTPUT/CAPTURE capabilities exclusively
@@ -74,9 +74,17 @@
         * NOTE: this is going to be removed once separate output/capture
         *       devices are implemented
          */
-       int announce_all_caps;
+       __s32 announce_all_caps;
 };
 
+#define V4L2LOOPBACK_CTL_IOCTLMAGIC '~'
+
+/* a pointer to an (unsigned int) that - on success - will hold
+ * the version code of the v4l2loopback module
+ * as returned by KERNEL_VERSION(MAJOR, MINOR, BUGFIX)
+ */
+#define V4L2LOOPBACK_CTL_VERSION _IOR(V4L2LOOPBACK_CTL_IOCTLMAGIC, 0, __u32)
+
 /* a pointer to a (struct v4l2_loopback_config) that has all values you wish 
to impose on the
  * to-be-created device set.
  * if the ptr is NULL, a new device is created with default values at the 
driver's discretion.
@@ -84,15 +92,17 @@
  * returns the device_nr of the OUTPUT device (which can be used with 
V4L2LOOPBACK_CTL_QUERY,
  * to get more information on the device)
  */
-#define V4L2LOOPBACK_CTL_ADD 0x4C80
+#define V4L2LOOPBACK_CTL_ADD \
+       _IOW(V4L2LOOPBACK_CTL_IOCTLMAGIC, 1, struct v4l2_loopback_config)
+
+/* the device-number (either CAPTURE or OUTPUT) associated with the 
loopback-device */
+#define V4L2LOOPBACK_CTL_REMOVE _IOW(V4L2LOOPBACK_CTL_IOCTLMAGIC, 2, __u32)
 
 /* a pointer to a (struct v4l2_loopback_config) that has output_nr and/or 
capture_nr set
  * (the two values must either refer to video-devices associated with the same 
loopback device
  *  or exactly one of them must be <0
  */
-#define V4L2LOOPBACK_CTL_QUERY 0x4C82
-
-/* the device-number (either CAPTURE or OUTPUT) associated with the 
loopback-device */
-#define V4L2LOOPBACK_CTL_REMOVE 0x4C81
+#define V4L2LOOPBACK_CTL_QUERY \
+       _IOWR(V4L2LOOPBACK_CTL_IOCTLMAGIC, 3, struct v4l2_loopback_config)
 
 #endif /* _V4L2LOOPBACK_H */

Reply via email to