diff options
-rw-r--r-- | user/v4l-utils/APKBUILD | 82 | ||||
-rw-r--r-- | user/v4l-utils/getsubopt.patch | 36 | ||||
-rw-r--r-- | user/v4l-utils/qv4l2.desktop | 12 | ||||
-rw-r--r-- | user/v4l-utils/qv4l2.svg | 31 |
4 files changed, 161 insertions, 0 deletions
diff --git a/user/v4l-utils/APKBUILD b/user/v4l-utils/APKBUILD new file mode 100644 index 000000000..1ea8ea930 --- /dev/null +++ b/user/v4l-utils/APKBUILD @@ -0,0 +1,82 @@ +# Contributor: Leonardo Arena <rnalrd@alpinelinux.org> +# Maintainer: +pkgname=v4l-utils +pkgver=1.14.2 +pkgrel=0 +pkgdesc="Userspace tools and conversion library for Video 4 Linux" +url="https://www.linuxtv.org/wiki/index.php/V4l-utils" +arch="all" +license="LGPL-2.0+" +makedepends="qt5-qtbase-dev libjpeg-turbo-dev argp-standalone linux-headers + eudev-dev alsa-lib-dev" +subpackages="$pkgname-dev $pkgname-doc qv4l2 $pkgname-libs ir_keytable" +source="https://www.linuxtv.org/downloads/v4l-utils/$pkgname-$pkgver.tar.bz2 + qv4l2.svg + qv4l2.desktop + getsubopt.patch + " + +build() { + cd "$builddir" + [ "$CLIBC" = "musl" ] && export CFLAGS="$CFLAGS -D__off_t=off_t" + LIBS="-largp -lintl" ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --localstatedir=/var \ + --disable-libdvbv5 \ + --disable-static + make +} + +check() { + cd "$builddir" + make check +} + +package() { + cd "$builddir" + make -j1 DESTDIR="$pkgdir" install + install -Dm644 "$srcdir"/qv4l2.desktop \ + "$pkgdir"/usr/share/applications/qv4l2.desktop + install -Dm644 "$srcdir"/qv4l2.svg \ + "$pkgdir"/usr/share/icons/hicolor/scalable/apps/qv4l2.svg +} + +qv4l2() { + pkgdesc="Qt V4L2 test control and streaming test application" + mkdir -p "$subpkgdir"/usr/bin + mv "$pkgdir"/usr/bin/qv4l2 "$subpkgdir"/usr/bin/ + mv "$pkgdir"/usr/share "$subpkgdir"/usr/ +} + +libs() { + pkgdesc="Collection of Video4Linux support libraries" + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/* \ + "$subpkgdir"/usr/lib +} + +ir_keytable() { + pkgdesc="Alter keymaps of Remote Controller devices" + mkdir -p "$subpkgdir"/lib/udev/rc_keymaps \ + "$subpkgdir"/lib/udev/rules.d \ + "$subpkgdir"/usr/bin \ + "$subpkgdir"/etc + mv "$pkgdir"/lib/udev/rc_keymaps/* \ + "$subpkgdir"/lib/udev/rc_keymaps + mv "$pkgdir"/lib/udev/rules.d/* \ + "$subpkgdir"/lib/udev/rules.d + mv "$pkgdir"/usr/bin/ir-keytable \ + "$subpkgdir"/usr/bin + mv "$pkgdir"/etc/rc_maps.cfg \ + "$subpkgdir"/etc +} + +sha512sums="5c469479deb7065768e0254d1c80d9096caf05e445ceeabc7649f7158f02fb2d11ff2ad8c82debc1dbe6bbd7776cc5aa2febb52d5da0328d2b60b54af67c7a27 v4l-utils-1.14.2.tar.bz2 +bc18280046c15b19984103f7c2bb44a0aea79715803c64f0c64bc932499c09022c956914c3b15ae59499adc09f6fbff5378be45707fe851250f495a26b63d682 qv4l2.svg +6f74aa524b3de420eeb8de788ff3f717020732a3f1f6530caee50e63aae7eddbe5f551ffc50065c9f5d6078c13bace089948ecdcacf01f8b82c1a44960e06315 qv4l2.desktop +9a4f6d0a44d30bb7afe4db8b40074d362f240cae1f1b13feb0eb2b1b666479fc6f73ef27542f6f80fb1b922c9540feadc9ff8563890ff3041d3f7fc62e504e29 getsubopt.patch" diff --git a/user/v4l-utils/getsubopt.patch b/user/v4l-utils/getsubopt.patch new file mode 100644 index 000000000..c476e5ed7 --- /dev/null +++ b/user/v4l-utils/getsubopt.patch @@ -0,0 +1,36 @@ +POSIX says that behavior when subopts list is empty is undefined. +musl libs will set value to NULL which leads to crash. + +Simply avoid getsubopt, since we cannot rely on it. + +diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp +index 3ea6cd3..291fb3e 100644 +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp +@@ -692,16 +692,17 @@ static bool parse_subset(char *optarg) + + static bool parse_next_subopt(char **subs, char **value) + { +- static char *const subopts[] = { +- NULL +- }; +- int opt = getsubopt(subs, subopts, value); ++ char *p = *subs; ++ *value = *subs; + +- if (opt < 0 || *value) +- return false; +- fprintf(stderr, "No value given to suboption <%s>\n", +- subopts[opt]); +- return true; ++ while (*p && *p != ',') ++ p++; ++ ++ if (*p) ++ *p++ = '\0'; ++ ++ *subs = p; ++ return false; + } + + void common_cmd(int ch, char *optarg) diff --git a/user/v4l-utils/qv4l2.desktop b/user/v4l-utils/qv4l2.desktop new file mode 100644 index 000000000..55e369c7c --- /dev/null +++ b/user/v4l-utils/qv4l2.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=QT V4L2 test Utility +Name[pt]=Utilitário de teste V4L2 +Comment=Allow testing Video4Linux devices +Comment[pt]=Permite testar dispositivos Video4Linux +Exec=qv4l2 +Icon=qv4l2 +Terminal=false +Type=Application +Categories=Application;AudioVideo; + diff --git a/user/v4l-utils/qv4l2.svg b/user/v4l-utils/qv4l2.svg new file mode 100644 index 000000000..3d4f375cc --- /dev/null +++ b/user/v4l-utils/qv4l2.svg @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:version="0.47 r22583" version="1.1" id="svg2839" height="297mm" width="210mm" sodipodi:docname="Novo documento 3"> + <defs id="defs2841"> + <linearGradient id="linearGradient2963"> + <stop style="stop-color: rgb(255, 236, 187); stop-opacity: 1;" offset="0" id="stop2965"/> + <stop id="stop2971" offset="1" style="stop-color: rgb(0, 0, 0); stop-opacity: 0.498039;"/> + </linearGradient> + <inkscape:perspective sodipodi:type="inkscape:persp3d" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" id="perspective2847"/> + <inkscape:perspective id="perspective2935" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d"/> + <linearGradient inkscape:collect="always" xlink:href="#linearGradient2963" id="linearGradient2969" x1="-719.14288" y1="494.69958" x2="-324.21902" y2="968.98529" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0512, 0, 0, 1.05137, 651.058, -25.2444)"/> + <inkscape:perspective id="perspective2992" inkscape:persp3d-origin="0.5 : 0.33333333 : 1" inkscape:vp_z="1 : 0.5 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_x="0 : 0.5 : 1" sodipodi:type="inkscape:persp3d"/> + </defs> + <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.7" inkscape:cx="376.9721" inkscape:cy="468.42546" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1513" inkscape:window-height="1044" inkscape:window-x="1941" inkscape:window-y="0" inkscape:window-maximized="0"/> + <metadata id="metadata2844"> + <rdf:RDF> + <cc:Work rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:title/> + </cc:Work> + </rdf:RDF> + </metadata> + <g inkscape:label="Camada 1" inkscape:groupmode="layer" id="layer1"> + <rect style="fill: rgb(173, 160, 127); fill-opacity: 1;" id="rect2959" width="498.57132" height="402.52496" x="101.42867" y="345.21906" ry="15.848869"/> + <rect style="fill: rgb(214, 207, 189); fill-opacity: 1; fill-rule: evenodd; stroke: rgb(0, 0, 0); stroke-width: 1.09651px; stroke-linecap: butt; stroke-linejoin: miter; stroke-opacity: 1;" id="rect2955" width="366.37466" height="268.80539" x="172.03215" y="409.8259" ry="24.860613"/> + <path style="fill: url("#linearGradient2969") rgb(0, 0, 0); fill-opacity: 1;" d="m 111.92284,745.80915 c -1.7443,-0.70488 -4.61634,-3.11878 -6.38231,-5.3642 l -3.21086,-4.08259 0,-189.14299 c 0,-136.34795 0.46823,-190.05871 1.67748,-192.42365 0.92263,-1.80438 3.11889,-4.44845 4.8806,-5.87571 3.00442,-2.43405 17.98923,-2.5971 241.57759,-2.62843 l 238.37448,-0.0334 4.90427,4.38251 4.90429,4.3825 0.39257,189.41161 c 0.43575,210.24489 1.09242,196.30432 -9.4544,200.71175 -4.34407,1.81535 -40.20923,2.12038 -239.80015,2.0394 -129.08065,-0.0523 -236.11926,-0.67193 -237.86356,-1.37681 z m 413.94314,-69.49552 c 4.39946,-2.22093 7.85143,-5.43895 10.06966,-9.38725 l 3.37535,-6.00784 -0.36571,-118.16973 c -0.36124,-116.72035 -0.4037,-118.22058 -3.46195,-122.31682 -4.69144,-6.28374 -10.15101,-9.79936 -17.39001,-11.19809 -8.54594,-1.65125 -316.90144,-1.65125 -325.4474,0 -7.68,1.48394 -13.16379,5.20817 -17.88452,12.146 l -3.40519,5.00442 0.40173,119.03503 c 0.39878,118.15286 0.42505,119.06645 3.54637,123.27494 1.72955,2.33195 5.7842,5.74954 9.01033,7.59462 l 5.8657,3.35471 164.49565,0.0248 164.49566,0.0246 6.69433,-3.3794 z" id="path2961"/> + <rect style="fill: rgb(25, 20, 8); fill-opacity: 1;" id="rect2980" width="63.072273" height="39.050926" x="499.38467" y="744.74005" ry="0"/> + <rect style="fill: rgb(25, 20, 8); fill-opacity: 1;" id="rect2980-1" width="63.072273" height="39.050926" x="130.56888" y="744.74005" ry="0"/> + </g> +</svg>
\ No newline at end of file |