diff mbox series

[master/kirkstone,RESEND,1/2] v4l-utils: Add recipe for v1.23.0

Message ID 20230523094422.1633390-1-j-luthra@ti.com
State Superseded
Delegated to: Ryan Eatmon
Headers show
Series [master/kirkstone,RESEND,1/2] v4l-utils: Add recipe for v1.23.0 | expand

Commit Message

Jai Luthra May 23, 2023, 9:44 a.m. UTC
An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
layer for kirkstone.

TI's 6.1 based kernel has backported multistream routing APIs [1] from
upstream kernel, which requires a few patches to v4l-utils [2] that only
apply cleanly on top of v1.23.0.

Thus we override the recipe in this layer to the latest (v1.23.0) found
from meta-oe master.

Link: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
Link: https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
Signed-off-by: Jai Luthra <j-luthra@ti.com>
---
 ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
 ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
 ...iginal-patch-export-mediactl-headers.patch | 24 +++++
 .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
 .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
 5 files changed, 236 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb

Comments

Devarsh Thakkar May 23, 2023, 11:48 a.m. UTC | #1
Hi Jai,

Thanks for the patch.

On 23/05/23 15:14, Jai Luthra wrote:
> An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
> layer for kirkstone.
> 
> TI's 6.1 based kernel has backported multistream routing APIs [1] from
> upstream kernel, which requires a few patches to v4l-utils [2] that only
> apply cleanly on top of v1.23.0.
> 
> Thus we override the recipe in this layer to the latest (v1.23.0) found
> from meta-oe master.
> 
> Link: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
> Link: https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
> Signed-off-by: Jai Luthra <j-luthra@ti.com>
> ---
>  ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
>  ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
>  ...iginal-patch-export-mediactl-headers.patch | 24 +++++
>  .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
>  .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++

As per my opinion, not a good idea to bump up package version than default
package version shipped by kirkstone i.e. 1.22.1
(meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)

As a general rule of thumb, there could be other layers (for e.g. added by
vendors) having bbappends assuming shipped package version same as in
kirkstone and also build time and runtime dependencies w.r.t other packages
are guaranted if all packages stay with same version as shipped by kirkstone
and with this new recipe I believe we are kind of deviating from that
protection and so my suggestion is to rebase on top of existing package
version i.e. 1.22.1

Regards
Devarsh

>  5 files changed, 236 insertions(+)
>  create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb


> 
> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
> new file mode 100644
> index 00000000..8ac8fbe1
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
> @@ -0,0 +1,44 @@
> +From 0d5c0e9a75eca43667b0e29155b635e50622b66a Mon Sep 17 00:00:00 2001
> +From: Khem Raj <raj.khem@gmail.com>
> +Date: Fri, 27 Feb 2015 21:55:36 +0000
> +Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
> +
> + libv4l2subdev"
> +
> +This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
> +
> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> +
> +Conflicts:
> +	utils/media-ctl/Makefile.am
> +
> +---
> + utils/media-ctl/Makefile.am | 10 +++-------
> + 1 file changed, 3 insertions(+), 7 deletions(-)
> +
> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> +index c48c8d6..e255e16 100644
> +--- a/utils/media-ctl/Makefile.am
> ++++ b/utils/media-ctl/Makefile.am
> +@@ -1,8 +1,7 @@
> +-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
> +-
> ++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
> + libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
> +-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
> +-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
> ++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
> ++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
> + 
> + media-bus-format-names.h: ../../include/linux/media-bus-format.h
> + 	$(AM_V_GEN) sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
> +@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
> + libv4l2subdev_la_LIBADD = libmediactl.la
> +-libv4l2subdev_la_CFLAGS = -static
> +-libv4l2subdev_la_LDFLAGS = -static
> +-
> + mediactl_includedir=$(includedir)/mediactl
> + noinst_HEADERS = mediactl.h v4l2subdev.h
> + 
> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
> new file mode 100644
> index 00000000..52fc2d7a
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
> @@ -0,0 +1,21 @@
> +From 320b8378ee30eb5e0fe83a8b397f822f2f88a4c1 Mon Sep 17 00:00:00 2001
> +From: Khem Raj <raj.khem@gmail.com>
> +Date: Sun, 1 Mar 2015 22:25:07 +0000
> +Subject: [PATCH] %% original patch: mediactl-pkgconfig.patch
> +
> +---
> + utils/media-ctl/Makefile.am | 1 +
> + 1 file changed, 1 insertion(+)
> +
> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> +index e255e16..ff7b417 100644
> +--- a/utils/media-ctl/Makefile.am
> ++++ b/utils/media-ctl/Makefile.am
> +@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
> + mediactl_includedir=$(includedir)/mediactl
> + noinst_HEADERS = mediactl.h v4l2subdev.h
> + 
> ++pkgconfig_DATA = libmediactl.pc
> + bin_PROGRAMS = media-ctl
> + media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
> + media_ctl_LDADD = libmediactl.la libv4l2subdev.la
> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
> new file mode 100644
> index 00000000..39dc3383
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
> @@ -0,0 +1,24 @@
> +From f7109d6b2fcb291824d795071c04a492d9fbc45b Mon Sep 17 00:00:00 2001
> +From: Khem Raj <raj.khem@gmail.com>
> +Date: Sun, 1 Mar 2015 22:25:07 +0000
> +Subject: [PATCH] %% original patch: export-mediactl-headers.patch
> +
> +---
> + utils/media-ctl/Makefile.am | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
> +index ff7b417..6ce656f 100644
> +--- a/utils/media-ctl/Makefile.am
> ++++ b/utils/media-ctl/Makefile.am
> +@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
> + libv4l2subdev_la_LIBADD = libmediactl.la
> +-mediactl_includedir=$(includedir)/mediactl
> +-noinst_HEADERS = mediactl.h v4l2subdev.h
> ++otherincludedir = $(includedir)/mediactl
> ++otherinclude_HEADERS = mediactl.h v4l2subdev.h
> + 
> + pkgconfig_DATA = libmediactl.pc
> + bin_PROGRAMS = media-ctl
> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
> new file mode 100644
> index 00000000..fb844acb
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
> @@ -0,0 +1,60 @@
> +From 6e7e52de7afe29597016952a7317faf9c3ea3268 Mon Sep 17 00:00:00 2001
> +From: Khem Raj <raj.khem@gmail.com>
> +Date: Sat, 30 Nov 2019 18:50:34 -0800
> +Subject: [PATCH] Do not use getsubopt
> +
> +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.
> +
> +Imported from Alpine Linux
> +
> +Upstream-Status: Pending
> +
> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
> +
> +Adapt patch to 1.23.0.
> +
> +(v4l-utils rev fd544473800d02e90bc289434cc44e5aa8fadd0f).
> +
> +%% original patch: 0007-Do-not-use-getsubopt.patch
> +
> +Signed-off-by: Daniel Gomez <daniel@qtec.com>
> +---
> + utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
> + 1 file changed, 10 insertions(+), 8 deletions(-)
> +
> +diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> +index d77f7104..838c297d 100644
> +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
> ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
> +@@ -994,15 +994,17 @@ static bool parse_subset(char *optarg)
> + 
> + static bool parse_next_subopt(char **subs, char **value)
> + {
> +-	static char *const subopts[] = {
> +-	    nullptr
> +-	};
> +-	int opt = v4l_getsubopt(subs, subopts, value);
> ++	char *p = *subs;
> ++	*value = *subs;
> + 
> +-	if (opt < 0 || *value)
> +-		return false;
> +-	fprintf(stderr, "Missing suboption value\n");
> +-	return true;
> ++	while (*p && *p != ',')
> ++		p++;
> ++
> ++	if (*p)
> ++		*p++ = '\0';
> ++
> ++	*subs = p;
> ++	return false;
> + }
> + 
> + void common_cmd(const std::string &media_bus_info, int ch, char *optarg)
> +-- 
> +2.35.1
> +
> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
> new file mode 100644
> index 00000000..21a08022
> --- /dev/null
> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
> @@ -0,0 +1,87 @@
> +SUMMARY = "v4l2 and IR applications"
> +LICENSE = "GPL-2.0-only & LGPL-2.1-only"
> +LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
> +                    file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
> +PROVIDES = "libv4l media-ctl"
> +
> +DEPENDS = "jpeg \
> +           ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11', '', d)} \
> +           ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \
> +           ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa-lib', '', d)} \
> +           ${@bb.utils.contains_any('PACKAGECONFIG', 'qv4l2 qvidcap', 'qtbase qtbase-native', '', d)}"
> +
> +DEPENDS:append:libc-musl = " argp-standalone"
> +DEPENDS:append:class-target = " udev"
> +LDFLAGS:append = " -pthread"
> +# v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
> +# both 32 and 64 bit file APIs.  But it does not handle the time side?
> +# Needs further investigation
> +GLIBC_64BIT_TIME_FLAGS = ""
> +
> +inherit autotools gettext pkgconfig
> +
> +PACKAGECONFIG ??= "media-ctl"
> +PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
> +PACKAGECONFIG[qv4l2] = ",--disable-qv4l2"
> +PACKAGECONFIG[qvidcap] = ",--disable-qvidcap"
> +
> +SRC_URI = "\
> +    git://git.linuxtv.org/v4l-utils.git;protocol=https;branch=master \
> +    file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
> +    file://0002-original-patch-mediactl-pkgconfig.patch \
> +    file://0003-original-patch-export-mediactl-headers.patch \
> +    file://0004-Do-not-use-getsubopt.patch \
> +"
> +
> +SRCREV = "9431e4b26b4842d1401e80ada9f14593dca3a94c"
> +
> +PV .= "+git${SRCPV}"
> +
> +S = "${WORKDIR}/git"
> +
> +do_configure:prepend() {
> +    cd ${S}; ./bootstrap.sh; cd -
> +}
> +
> +EXTRA_OECONF = "--enable-shared --with-udevdir=${base_libdir}/udev \
> +                --disable-v4l2-compliance-32 --disable-v4l2-ctl-32"
> +
> +VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
> +
> +PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dev qv4l2 qvidcap"
> +
> +RPROVIDES:${PN}-dbg += "libv4l-dbg"
> +
> +FILES:media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
> +FILES:qv4l2 = "\
> +    ${bindir}/qv4l2 \
> +    ${datadir}/applications/qv4l2.desktop \
> +    ${datadir}/icons/hicolor/*/apps/qv4l2.* \
> +"
> +FILES:qvidcap = "\
> +    ${bindir}/qvidcap \
> +    ${datadir}/applications/qvidcap.desktop \
> +    ${datadir}/icons/hicolor/*/apps/qvidcap.* \
> +"
> +
> +FILES:ir-keytable = "${bindir}/ir-keytable ${base_libdir}/udev/rules.d/*-infrared.rules"
> +RDEPENDS:ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
> +RDEPENDS:qv4l2 += "\
> +    ${@bb.utils.contains('PACKAGECONFIG', 'qv4l2', 'qtbase', '', d)}"
> +RDEPENDS:qvidcap += "\
> +    ${@bb.utils.contains('PACKAGECONFIG', 'qvidcap', 'qtbase', '', d)}"
> +
> +FILES:rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
> +
> +FILES:${PN} = "${bindir} ${sbindir}"
> +
> +FILES:libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so ${libdir}/libv4l/plugins/*.so \
> +                 ${libdir}/libdvbv5*${SOLIBS} \
> +                 ${libdir}/libv4l/*-decomp"
> +
> +FILES:libv4l-dev += "${includedir} ${libdir}/pkgconfig \
> +                     ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
> +                     ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la ${libdir}/libv4l/plugins/*.la"
> +
> +PARALLEL_MAKE:class-native = ""
> +BBCLASSEXTEND = "native"
Jai Luthra May 23, 2023, 1:18 p.m. UTC | #2
Hi Devarsh,

Thanks for the review,

On May 23, 2023 at 17:18:39 +0530, Devarsh Thakkar wrote:
> Hi Jai,
> 
> Thanks for the patch.
> 
> On 23/05/23 15:14, Jai Luthra wrote:
> > An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
> > layer for kirkstone.
> > 
> > TI's 6.1 based kernel has backported multistream routing APIs [1] from
> > upstream kernel, which requires a few patches to v4l-utils [2] that only
> > apply cleanly on top of v1.23.0.
> > 
> > Thus we override the recipe in this layer to the latest (v1.23.0) found
> > from meta-oe master.
> > 
> > Link: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
> > Link: https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
> > Signed-off-by: Jai Luthra <j-luthra@ti.com>
> > ---
> >  ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
> >  ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
> >  ...iginal-patch-export-mediactl-headers.patch | 24 +++++
> >  .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
> >  .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
> 
> As per my opinion, not a good idea to bump up package version than default
> package version shipped by kirkstone i.e. 1.22.1
> (meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)
> 
> As a general rule of thumb, there could be other layers (for e.g. added by
> vendors) having bbappends assuming shipped package version same as in
> kirkstone and also build time and runtime dependencies w.r.t other packages
> are guaranted if all packages stay with same version as shipped by kirkstone
> and with this new recipe I believe we are kind of deviating from that
> protection and so my suggestion is to rebase on top of existing package
> version i.e. 1.22.1

I agree that it makes sense to keep packages pinned to a version for a 
particular release (dunfell/kirkstone) for stability and compatibility 
with other dependencies.

The only issue here is multi-stream support requires a large chunk of 
changes to v4l2 userspace APIs, affecting the most commonly used tools 
for setting up the camera pipeline (media-ctl) and capturing frames 
(v4l2-ctl).

While these changes are merged in linux upstream and backported to TI's 
6.1 branch, the corresponding v4l-utils changes are still under review 
upstream.

There are two options I see here:


    1. We bump up the v4l-utils recipe in our distribution to a 
    relatively recent git commit (v1.23.0-9431e4b26b) which is in sync 
    with TI baseline kernel, and apply only the patches for the extra 
    features TI uses on top.

    We also ensure it works well with the dependencies (mainly libc) 
    provided by rest of the kirkstone layers (so far no issues seen in 
    my tests)


    2. We backport these patches to v1.22.1, which was tagged almost 
    **two years ago** in Oct 2021; while the kernel is on 6.1 (Jan 2023) 
    and using multistream APIs from 6.3/6.4/still-under-review.

    We will also have to sync with the latest kernel headers and 
    extensively test that we don't break some ioctl or are missing 
    bugfixes to v4l-utils from the past two years, as the kernel 
    developer(s) for the newer features would not have tested against 
    the old release.


That's why I chose option 1 in the current series as an exception to the 
thumb rule. Let me know if it is a complete no-go to override a recipe 
here.

> 
> Regards
> Devarsh

Thanks,
Jai
Ryan Eatmon May 23, 2023, 3:36 p.m. UTC | #3
On 5/23/2023 6:48 AM, Devarsh Thakkar wrote:
> Hi Jai,
> 
> Thanks for the patch.
> 
> On 23/05/23 15:14, Jai Luthra wrote:
>> An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
>> layer for kirkstone.
>>
>> TI's 6.1 based kernel has backported multistream routing APIs [1] from
>> upstream kernel, which requires a few patches to v4l-utils [2] that only
>> apply cleanly on top of v1.23.0.
>>
>> Thus we override the recipe in this layer to the latest (v1.23.0) found
>> from meta-oe master.
>>
>> Link: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
>> Link: https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
>> Signed-off-by: Jai Luthra <j-luthra@ti.com>
>> ---
>>   ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
>>   ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
>>   ...iginal-patch-export-mediactl-headers.patch | 24 +++++
>>   .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
>>   .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
> 
> As per my opinion, not a good idea to bump up package version than default
> package version shipped by kirkstone i.e. 1.22.1
> (meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)
> 
> As a general rule of thumb, there could be other layers (for e.g. added by
> vendors) having bbappends assuming shipped package version same as in
> kirkstone and also build time and runtime dependencies w.r.t other packages
> are guaranted if all packages stay with same version as shipped by kirkstone
> and with this new recipe I believe we are kind of deviating from that
> protection and so my suggestion is to rebase on top of existing package
> version i.e. 1.22.1

If you were talking about meta-ti then I would 100% agree with you, but 
this is meta-arago.  And as a distribution layer, we are perfectly 
within our purvue to advance to a later version of a tool beyond what 
the other upstream repos are at, or change config files, etc...

Meta-ti as a BSP layer needs to play nice in the sandbox with other 
layers and not change versions without guards.

If you wanted to be extra careful you could include the guards in arago 
as well, but since arago is not a yocto compliant layer it is not 
strictly needed at this time.


> Regards
> Devarsh
> 
>>   5 files changed, 236 insertions(+)
>>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>   create mode 100644 meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
> 
> 
>>
>> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>> new file mode 100644
>> index 00000000..8ac8fbe1
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>> @@ -0,0 +1,44 @@
>> +From 0d5c0e9a75eca43667b0e29155b635e50622b66a Mon Sep 17 00:00:00 2001
>> +From: Khem Raj <raj.khem@gmail.com>
>> +Date: Fri, 27 Feb 2015 21:55:36 +0000
>> +Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
>> +
>> + libv4l2subdev"
>> +
>> +This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
>> +
>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> +
>> +Conflicts:
>> +	utils/media-ctl/Makefile.am
>> +
>> +---
>> + utils/media-ctl/Makefile.am | 10 +++-------
>> + 1 file changed, 3 insertions(+), 7 deletions(-)
>> +
>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>> +index c48c8d6..e255e16 100644
>> +--- a/utils/media-ctl/Makefile.am
>> ++++ b/utils/media-ctl/Makefile.am
>> +@@ -1,8 +1,7 @@
>> +-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>> +-
>> ++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>> + libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
>> +-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
>> +-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
>> ++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
>> ++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
>> +
>> + media-bus-format-names.h: ../../include/linux/media-bus-format.h
>> + 	$(AM_V_GEN) sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
>> +@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>> + libv4l2subdev_la_LIBADD = libmediactl.la
>> +-libv4l2subdev_la_CFLAGS = -static
>> +-libv4l2subdev_la_LDFLAGS = -static
>> +-
>> + mediactl_includedir=$(includedir)/mediactl
>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>> +
>> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>> new file mode 100644
>> index 00000000..52fc2d7a
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>> @@ -0,0 +1,21 @@
>> +From 320b8378ee30eb5e0fe83a8b397f822f2f88a4c1 Mon Sep 17 00:00:00 2001
>> +From: Khem Raj <raj.khem@gmail.com>
>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>> +Subject: [PATCH] %% original patch: mediactl-pkgconfig.patch
>> +
>> +---
>> + utils/media-ctl/Makefile.am | 1 +
>> + 1 file changed, 1 insertion(+)
>> +
>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>> +index e255e16..ff7b417 100644
>> +--- a/utils/media-ctl/Makefile.am
>> ++++ b/utils/media-ctl/Makefile.am
>> +@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
>> + mediactl_includedir=$(includedir)/mediactl
>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>> +
>> ++pkgconfig_DATA = libmediactl.pc
>> + bin_PROGRAMS = media-ctl
>> + media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
>> + media_ctl_LDADD = libmediactl.la libv4l2subdev.la
>> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>> new file mode 100644
>> index 00000000..39dc3383
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>> @@ -0,0 +1,24 @@
>> +From f7109d6b2fcb291824d795071c04a492d9fbc45b Mon Sep 17 00:00:00 2001
>> +From: Khem Raj <raj.khem@gmail.com>
>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>> +Subject: [PATCH] %% original patch: export-mediactl-headers.patch
>> +
>> +---
>> + utils/media-ctl/Makefile.am | 4 ++--
>> + 1 file changed, 2 insertions(+), 2 deletions(-)
>> +
>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>> +index ff7b417..6ce656f 100644
>> +--- a/utils/media-ctl/Makefile.am
>> ++++ b/utils/media-ctl/Makefile.am
>> +@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>> + libv4l2subdev_la_LIBADD = libmediactl.la
>> +-mediactl_includedir=$(includedir)/mediactl
>> +-noinst_HEADERS = mediactl.h v4l2subdev.h
>> ++otherincludedir = $(includedir)/mediactl
>> ++otherinclude_HEADERS = mediactl.h v4l2subdev.h
>> +
>> + pkgconfig_DATA = libmediactl.pc
>> + bin_PROGRAMS = media-ctl
>> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>> new file mode 100644
>> index 00000000..fb844acb
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>> @@ -0,0 +1,60 @@
>> +From 6e7e52de7afe29597016952a7317faf9c3ea3268 Mon Sep 17 00:00:00 2001
>> +From: Khem Raj <raj.khem@gmail.com>
>> +Date: Sat, 30 Nov 2019 18:50:34 -0800
>> +Subject: [PATCH] Do not use getsubopt
>> +
>> +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.
>> +
>> +Imported from Alpine Linux
>> +
>> +Upstream-Status: Pending
>> +
>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> +
>> +Adapt patch to 1.23.0.
>> +
>> +(v4l-utils rev fd544473800d02e90bc289434cc44e5aa8fadd0f).
>> +
>> +%% original patch: 0007-Do-not-use-getsubopt.patch
>> +
>> +Signed-off-by: Daniel Gomez <daniel@qtec.com>
>> +---
>> + utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
>> + 1 file changed, 10 insertions(+), 8 deletions(-)
>> +
>> +diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>> +index d77f7104..838c297d 100644
>> +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
>> ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>> +@@ -994,15 +994,17 @@ static bool parse_subset(char *optarg)
>> +
>> + static bool parse_next_subopt(char **subs, char **value)
>> + {
>> +-	static char *const subopts[] = {
>> +-	    nullptr
>> +-	};
>> +-	int opt = v4l_getsubopt(subs, subopts, value);
>> ++	char *p = *subs;
>> ++	*value = *subs;
>> +
>> +-	if (opt < 0 || *value)
>> +-		return false;
>> +-	fprintf(stderr, "Missing suboption value\n");
>> +-	return true;
>> ++	while (*p && *p != ',')
>> ++		p++;
>> ++
>> ++	if (*p)
>> ++		*p++ = '\0';
>> ++
>> ++	*subs = p;
>> ++	return false;
>> + }
>> +
>> + void common_cmd(const std::string &media_bus_info, int ch, char *optarg)
>> +--
>> +2.35.1
>> +
>> diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>> new file mode 100644
>> index 00000000..21a08022
>> --- /dev/null
>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>> @@ -0,0 +1,87 @@
>> +SUMMARY = "v4l2 and IR applications"
>> +LICENSE = "GPL-2.0-only & LGPL-2.1-only"
>> +LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
>> +                    file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
>> +PROVIDES = "libv4l media-ctl"
>> +
>> +DEPENDS = "jpeg \
>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11', '', d)} \
>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \
>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa-lib', '', d)} \
>> +           ${@bb.utils.contains_any('PACKAGECONFIG', 'qv4l2 qvidcap', 'qtbase qtbase-native', '', d)}"
>> +
>> +DEPENDS:append:libc-musl = " argp-standalone"
>> +DEPENDS:append:class-target = " udev"
>> +LDFLAGS:append = " -pthread"
>> +# v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
>> +# both 32 and 64 bit file APIs.  But it does not handle the time side?
>> +# Needs further investigation
>> +GLIBC_64BIT_TIME_FLAGS = ""
>> +
>> +inherit autotools gettext pkgconfig
>> +
>> +PACKAGECONFIG ??= "media-ctl"
>> +PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
>> +PACKAGECONFIG[qv4l2] = ",--disable-qv4l2"
>> +PACKAGECONFIG[qvidcap] = ",--disable-qvidcap"
>> +
>> +SRC_URI = "\
>> +    git://git.linuxtv.org/v4l-utils.git;protocol=https;branch=master \
>> +    file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
>> +    file://0002-original-patch-mediactl-pkgconfig.patch \
>> +    file://0003-original-patch-export-mediactl-headers.patch \
>> +    file://0004-Do-not-use-getsubopt.patch \
>> +"
>> +
>> +SRCREV = "9431e4b26b4842d1401e80ada9f14593dca3a94c"
>> +
>> +PV .= "+git${SRCPV}"
>> +
>> +S = "${WORKDIR}/git"
>> +
>> +do_configure:prepend() {
>> +    cd ${S}; ./bootstrap.sh; cd -
>> +}
>> +
>> +EXTRA_OECONF = "--enable-shared --with-udevdir=${base_libdir}/udev \
>> +                --disable-v4l2-compliance-32 --disable-v4l2-ctl-32"
>> +
>> +VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
>> +
>> +PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dev qv4l2 qvidcap"
>> +
>> +RPROVIDES:${PN}-dbg += "libv4l-dbg"
>> +
>> +FILES:media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
>> +FILES:qv4l2 = "\
>> +    ${bindir}/qv4l2 \
>> +    ${datadir}/applications/qv4l2.desktop \
>> +    ${datadir}/icons/hicolor/*/apps/qv4l2.* \
>> +"
>> +FILES:qvidcap = "\
>> +    ${bindir}/qvidcap \
>> +    ${datadir}/applications/qvidcap.desktop \
>> +    ${datadir}/icons/hicolor/*/apps/qvidcap.* \
>> +"
>> +
>> +FILES:ir-keytable = "${bindir}/ir-keytable ${base_libdir}/udev/rules.d/*-infrared.rules"
>> +RDEPENDS:ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
>> +RDEPENDS:qv4l2 += "\
>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qv4l2', 'qtbase', '', d)}"
>> +RDEPENDS:qvidcap += "\
>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qvidcap', 'qtbase', '', d)}"
>> +
>> +FILES:rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
>> +
>> +FILES:${PN} = "${bindir} ${sbindir}"
>> +
>> +FILES:libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so ${libdir}/libv4l/plugins/*.so \
>> +                 ${libdir}/libdvbv5*${SOLIBS} \
>> +                 ${libdir}/libv4l/*-decomp"
>> +
>> +FILES:libv4l-dev += "${includedir} ${libdir}/pkgconfig \
>> +                     ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
>> +                     ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la ${libdir}/libv4l/plugins/*.la"
>> +
>> +PARALLEL_MAKE:class-native = ""
>> +BBCLASSEXTEND = "native"
Devarsh Thakkar May 24, 2023, 11:14 a.m. UTC | #4
Hi Ryan,

Thanks for the feedback,

On 23/05/23 21:06, Ryan Eatmon wrote:
> 
> 
> On 5/23/2023 6:48 AM, Devarsh Thakkar wrote:
>> Hi Jai,
>>
>> Thanks for the patch.
>>
>> On 23/05/23 15:14, Jai Luthra wrote:
>>> An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
>>> layer for kirkstone.
>>>
>>> TI's 6.1 based kernel has backported multistream routing APIs [1] from
>>> upstream kernel, which requires a few patches to v4l-utils [2] that only
>>> apply cleanly on top of v1.23.0.
>>>
>>> Thus we override the recipe in this layer to the latest (v1.23.0) found
>>> from meta-oe master.
>>>
>>> Link:
>>> https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
>>> Link:
>>> https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
>>> Signed-off-by: Jai Luthra <j-luthra@ti.com>
>>> ---
>>>   ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
>>>   ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
>>>   ...iginal-patch-export-mediactl-headers.patch | 24 +++++
>>>   .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
>>>   .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
>>
>> As per my opinion, not a good idea to bump up package version than default
>> package version shipped by kirkstone i.e. 1.22.1
>> (meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)
>>
>> As a general rule of thumb, there could be other layers (for e.g. added by
>> vendors) having bbappends assuming shipped package version same as in
>> kirkstone and also build time and runtime dependencies w.r.t other packages
>> are guaranted if all packages stay with same version as shipped by kirkstone
>> and with this new recipe I believe we are kind of deviating from that
>> protection and so my suggestion is to rebase on top of existing package
>> version i.e. 1.22.1
> 
> If you were talking about meta-ti then I would 100% agree with you, but this
> is meta-arago.  And as a distribution layer, we are perfectly within our
> purvue to advance to a later version of a tool beyond what the other upstream
> repos are at, or change config files, etc...
> 
> Meta-ti as a BSP layer needs to play nice in the sandbox with other layers and
> not change versions without guards.
> 

I am not sure what exactly you mean by guards, is it possible to share an
example? Also I think we did change linux kernel version to 6.1 in meta-ti
from the one supported in kirkstone (which I believe was 5.18) although that
has its set of advantages since it is latest LTS.

> If you wanted to be extra careful you could include the guards in arago as
> well, but since arago is not a yocto compliant layer it is not strictly needed
> at this time.
> 
> 

I think the crux of the issue here is gap between v4l-utils version (which is
1.22.1 released couple of years back as Jai mentioned ) in kirkstone and the
linux version being used which is 6.1 (which got released this year) requiring
us to bump up v4l-utils to match the latest features added in 6.1 and this is
because since we bumped up linux version to 6.1 from official kirkstone
supported version which I think is 5.18.

But I agree with Jai and you that it's better to bump up the recipe version
directly since anyway kernel version is bumped up and latest v4l-utils is a
better match.

On a sidenote is it fine if we try and decide to bump up gstreamer version too
from 1.20.5 to 1.22 series which was released this year since it has more
features and compatible to kernel version 6.1 ?

Regards
Devarsh
>> Regards
>> Devarsh
>>
>>>   5 files changed, 236 insertions(+)
>>>   create mode 100644
>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>>   create mode 100644
>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>>   create mode 100644
>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>>   create mode 100644
>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>>   create mode 100644
>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>
>>
>>>
>>> diff --git
>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>> new file mode 100644
>>> index 00000000..8ac8fbe1
>>> --- /dev/null
>>> +++
>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>> @@ -0,0 +1,44 @@
>>> +From 0d5c0e9a75eca43667b0e29155b635e50622b66a Mon Sep 17 00:00:00 2001
>>> +From: Khem Raj <raj.khem@gmail.com>
>>> +Date: Fri, 27 Feb 2015 21:55:36 +0000
>>> +Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
>>> +
>>> + libv4l2subdev"
>>> +
>>> +This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
>>> +
>>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>>> +
>>> +Conflicts:
>>> +    utils/media-ctl/Makefile.am
>>> +
>>> +---
>>> + utils/media-ctl/Makefile.am | 10 +++-------
>>> + 1 file changed, 3 insertions(+), 7 deletions(-)
>>> +
>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>> +index c48c8d6..e255e16 100644
>>> +--- a/utils/media-ctl/Makefile.am
>>> ++++ b/utils/media-ctl/Makefile.am
>>> +@@ -1,8 +1,7 @@
>>> +-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>>> +-
>>> ++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>>> + libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
>>> +-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
>>> +-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
>>> ++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
>>> ++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
>>> +
>>> + media-bus-format-names.h: ../../include/linux/media-bus-format.h
>>> +     $(AM_V_GEN) sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/
>>> d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
>>> +@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
>>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>>> + libv4l2subdev_la_LIBADD = libmediactl.la
>>> +-libv4l2subdev_la_CFLAGS = -static
>>> +-libv4l2subdev_la_LDFLAGS = -static
>>> +-
>>> + mediactl_includedir=$(includedir)/mediactl
>>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>>> +
>>> diff --git
>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>> new file mode 100644
>>> index 00000000..52fc2d7a
>>> --- /dev/null
>>> +++
>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>> @@ -0,0 +1,21 @@
>>> +From 320b8378ee30eb5e0fe83a8b397f822f2f88a4c1 Mon Sep 17 00:00:00 2001
>>> +From: Khem Raj <raj.khem@gmail.com>
>>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>>> +Subject: [PATCH] %% original patch: mediactl-pkgconfig.patch
>>> +
>>> +---
>>> + utils/media-ctl/Makefile.am | 1 +
>>> + 1 file changed, 1 insertion(+)
>>> +
>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>> +index e255e16..ff7b417 100644
>>> +--- a/utils/media-ctl/Makefile.am
>>> ++++ b/utils/media-ctl/Makefile.am
>>> +@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
>>> + mediactl_includedir=$(includedir)/mediactl
>>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>>> +
>>> ++pkgconfig_DATA = libmediactl.pc
>>> + bin_PROGRAMS = media-ctl
>>> + media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
>>> + media_ctl_LDADD = libmediactl.la libv4l2subdev.la
>>> diff --git
>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>> new file mode 100644
>>> index 00000000..39dc3383
>>> --- /dev/null
>>> +++
>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>> @@ -0,0 +1,24 @@
>>> +From f7109d6b2fcb291824d795071c04a492d9fbc45b Mon Sep 17 00:00:00 2001
>>> +From: Khem Raj <raj.khem@gmail.com>
>>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>>> +Subject: [PATCH] %% original patch: export-mediactl-headers.patch
>>> +
>>> +---
>>> + utils/media-ctl/Makefile.am | 4 ++--
>>> + 1 file changed, 2 insertions(+), 2 deletions(-)
>>> +
>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>> +index ff7b417..6ce656f 100644
>>> +--- a/utils/media-ctl/Makefile.am
>>> ++++ b/utils/media-ctl/Makefile.am
>>> +@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
>>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>>> + libv4l2subdev_la_LIBADD = libmediactl.la
>>> +-mediactl_includedir=$(includedir)/mediactl
>>> +-noinst_HEADERS = mediactl.h v4l2subdev.h
>>> ++otherincludedir = $(includedir)/mediactl
>>> ++otherinclude_HEADERS = mediactl.h v4l2subdev.h
>>> +
>>> + pkgconfig_DATA = libmediactl.pc
>>> + bin_PROGRAMS = media-ctl
>>> diff --git
>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>> new file mode 100644
>>> index 00000000..fb844acb
>>> --- /dev/null
>>> +++
>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>> @@ -0,0 +1,60 @@
>>> +From 6e7e52de7afe29597016952a7317faf9c3ea3268 Mon Sep 17 00:00:00 2001
>>> +From: Khem Raj <raj.khem@gmail.com>
>>> +Date: Sat, 30 Nov 2019 18:50:34 -0800
>>> +Subject: [PATCH] Do not use getsubopt
>>> +
>>> +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.
>>> +
>>> +Imported from Alpine Linux
>>> +
>>> +Upstream-Status: Pending
>>> +
>>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>>> +
>>> +Adapt patch to 1.23.0.
>>> +
>>> +(v4l-utils rev fd544473800d02e90bc289434cc44e5aa8fadd0f).
>>> +
>>> +%% original patch: 0007-Do-not-use-getsubopt.patch
>>> +
>>> +Signed-off-by: Daniel Gomez <daniel@qtec.com>
>>> +---
>>> + utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
>>> + 1 file changed, 10 insertions(+), 8 deletions(-)
>>> +
>>> +diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>> b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>> +index d77f7104..838c297d 100644
>>> +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>> ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>> +@@ -994,15 +994,17 @@ static bool parse_subset(char *optarg)
>>> +
>>> + static bool parse_next_subopt(char **subs, char **value)
>>> + {
>>> +-    static char *const subopts[] = {
>>> +-        nullptr
>>> +-    };
>>> +-    int opt = v4l_getsubopt(subs, subopts, value);
>>> ++    char *p = *subs;
>>> ++    *value = *subs;
>>> +
>>> +-    if (opt < 0 || *value)
>>> +-        return false;
>>> +-    fprintf(stderr, "Missing suboption value\n");
>>> +-    return true;
>>> ++    while (*p && *p != ',')
>>> ++        p++;
>>> ++
>>> ++    if (*p)
>>> ++        *p++ = '\0';
>>> ++
>>> ++    *subs = p;
>>> ++    return false;
>>> + }
>>> +
>>> + void common_cmd(const std::string &media_bus_info, int ch, char *optarg)
>>> +--
>>> +2.35.1
>>> +
>>> diff --git
>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>> new file mode 100644
>>> index 00000000..21a08022
>>> --- /dev/null
>>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>> @@ -0,0 +1,87 @@
>>> +SUMMARY = "v4l2 and IR applications"
>>> +LICENSE = "GPL-2.0-only & LGPL-2.1-only"
>>> +LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
>>> +                   
>>> file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
>>> +PROVIDES = "libv4l media-ctl"
>>> +
>>> +DEPENDS = "jpeg \
>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'x11',
>>> 'virtual/libx11', '', d)} \
>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd',
>>> '', d)} \
>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa-lib', '',
>>> d)} \
>>> +           ${@bb.utils.contains_any('PACKAGECONFIG', 'qv4l2 qvidcap',
>>> 'qtbase qtbase-native', '', d)}"
>>> +
>>> +DEPENDS:append:libc-musl = " argp-standalone"
>>> +DEPENDS:append:class-target = " udev"
>>> +LDFLAGS:append = " -pthread"
>>> +# v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
>>> +# both 32 and 64 bit file APIs.  But it does not handle the time side?
>>> +# Needs further investigation
>>> +GLIBC_64BIT_TIME_FLAGS = ""
>>> +
>>> +inherit autotools gettext pkgconfig
>>> +
>>> +PACKAGECONFIG ??= "media-ctl"
>>> +PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
>>> +PACKAGECONFIG[qv4l2] = ",--disable-qv4l2"
>>> +PACKAGECONFIG[qvidcap] = ",--disable-qvidcap"
>>> +
>>> +SRC_URI = "\
>>> +    git://git.linuxtv.org/v4l-utils.git;protocol=https;branch=master \
>>> +    file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
>>> +    file://0002-original-patch-mediactl-pkgconfig.patch \
>>> +    file://0003-original-patch-export-mediactl-headers.patch \
>>> +    file://0004-Do-not-use-getsubopt.patch \
>>> +"
>>> +
>>> +SRCREV = "9431e4b26b4842d1401e80ada9f14593dca3a94c"
>>> +
>>> +PV .= "+git${SRCPV}"
>>> +
>>> +S = "${WORKDIR}/git"
>>> +
>>> +do_configure:prepend() {
>>> +    cd ${S}; ./bootstrap.sh; cd -
>>> +}
>>> +
>>> +EXTRA_OECONF = "--enable-shared --with-udevdir=${base_libdir}/udev \
>>> +                --disable-v4l2-compliance-32 --disable-v4l2-ctl-32"
>>> +
>>> +VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
>>> +
>>> +PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dev qv4l2
>>> qvidcap"
>>> +
>>> +RPROVIDES:${PN}-dbg += "libv4l-dbg"
>>> +
>>> +FILES:media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
>>> +FILES:qv4l2 = "\
>>> +    ${bindir}/qv4l2 \
>>> +    ${datadir}/applications/qv4l2.desktop \
>>> +    ${datadir}/icons/hicolor/*/apps/qv4l2.* \
>>> +"
>>> +FILES:qvidcap = "\
>>> +    ${bindir}/qvidcap \
>>> +    ${datadir}/applications/qvidcap.desktop \
>>> +    ${datadir}/icons/hicolor/*/apps/qvidcap.* \
>>> +"
>>> +
>>> +FILES:ir-keytable = "${bindir}/ir-keytable
>>> ${base_libdir}/udev/rules.d/*-infrared.rules"
>>> +RDEPENDS:ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
>>> +RDEPENDS:qv4l2 += "\
>>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qv4l2', 'qtbase', '', d)}"
>>> +RDEPENDS:qvidcap += "\
>>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qvidcap', 'qtbase', '', d)}"
>>> +
>>> +FILES:rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
>>> +
>>> +FILES:${PN} = "${bindir} ${sbindir}"
>>> +
>>> +FILES:libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so
>>> ${libdir}/libv4l/plugins/*.so \
>>> +                 ${libdir}/libdvbv5*${SOLIBS} \
>>> +                 ${libdir}/libv4l/*-decomp"
>>> +
>>> +FILES:libv4l-dev += "${includedir} ${libdir}/pkgconfig \
>>> +                     ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
>>> +                     ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la
>>> ${libdir}/libv4l/plugins/*.la"
>>> +
>>> +PARALLEL_MAKE:class-native = ""
>>> +BBCLASSEXTEND = "native"
>
Devarsh Thakkar May 24, 2023, 12:41 p.m. UTC | #5
Hi Jai,

On 23/05/23 18:48, Jai Luthra wrote:
> Hi Devarsh,
> 
> Thanks for the review,
> 
> On May 23, 2023 at 17:18:39 +0530, Devarsh Thakkar wrote:
>> Hi Jai,
>>
>> Thanks for the patch.
>>
>> On 23/05/23 15:14, Jai Luthra wrote:
>>> An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
>>> layer for kirkstone.
>>>
>>> TI's 6.1 based kernel has backported multistream routing APIs [1] from
>>> upstream kernel, which requires a few patches to v4l-utils [2] that only
>>> apply cleanly on top of v1.23.0.
>>>
>>> Thus we override the recipe in this layer to the latest (v1.23.0) found
>>> from meta-oe master.
>>>
>>> Link: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
>>> Link: https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
>>> Signed-off-by: Jai Luthra <j-luthra@ti.com>
>>> ---
>>>  ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
>>>  ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
>>>  ...iginal-patch-export-mediactl-headers.patch | 24 +++++
>>>  .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
>>>  .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
>>
>> As per my opinion, not a good idea to bump up package version than default
>> package version shipped by kirkstone i.e. 1.22.1
>> (meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)
>>
>> As a general rule of thumb, there could be other layers (for e.g. added by
>> vendors) having bbappends assuming shipped package version same as in
>> kirkstone and also build time and runtime dependencies w.r.t other packages
>> are guaranted if all packages stay with same version as shipped by kirkstone
>> and with this new recipe I believe we are kind of deviating from that
>> protection and so my suggestion is to rebase on top of existing package
>> version i.e. 1.22.1
> 
> I agree that it makes sense to keep packages pinned to a version for a 
> particular release (dunfell/kirkstone) for stability and compatibility 
> with other dependencies.
> 
> The only issue here is multi-stream support requires a large chunk of 
> changes to v4l2 userspace APIs, affecting the most commonly used tools 
> for setting up the camera pipeline (media-ctl) and capturing frames 
> (v4l2-ctl).
> 
> While these changes are merged in linux upstream and backported to TI's 
> 6.1 branch, the corresponding v4l-utils changes are still under review 
> upstream.
> 
> There are two options I see here:
> 
> 
>     1. We bump up the v4l-utils recipe in our distribution to a 
>     relatively recent git commit (v1.23.0-9431e4b26b) which is in sync 
>     with TI baseline kernel, and apply only the patches for the extra 
>     features TI uses on top.
> 
>     We also ensure it works well with the dependencies (mainly libc) 
>     provided by rest of the kirkstone layers (so far no issues seen in 
>     my tests)
> 
> 
>     2. We backport these patches to v1.22.1, which was tagged almost 
>     **two years ago** in Oct 2021; while the kernel is on 6.1 (Jan 2023) 
>     and using multistream APIs from 6.3/6.4/still-under-review.
> 
>     We will also have to sync with the latest kernel headers and 
>     extensively test that we don't break some ioctl or are missing 
>     bugfixes to v4l-utils from the past two years, as the kernel 
>     developer(s) for the newer features would not have tested against 
>     the old release.
> 
> 
> That's why I chose option 1 in the current series as an exception to the 
> thumb rule. Let me know if it is a complete no-go to override a recipe 
> here.
> 

Thanks for sharing this details, as discussed in other thread
https://lore.kernel.org/all/1f00c11f-f413-c015-c2fd-24afb475295b@ti.com/
I think v4l-utils is behind since we bumped up kernel to 6.1 so agreed that we
should bump up v4l-utils too.

If possible, I would suggest to go with latest stable version of v4l-utils to
minimize local patch list to apply in new recipe.

Regards
Devarsh

>>
>> Regards
>> Devarsh
> 
> Thanks,
> Jai
Ryan Eatmon May 24, 2023, 1:44 p.m. UTC | #6
On 5/24/2023 6:14 AM, Devarsh Thakkar wrote:
> Hi Ryan,
> 
> Thanks for the feedback,
> 
> On 23/05/23 21:06, Ryan Eatmon wrote:
>>
>>
>> On 5/23/2023 6:48 AM, Devarsh Thakkar wrote:
>>> Hi Jai,
>>>
>>> Thanks for the patch.
>>>
>>> On 23/05/23 15:14, Jai Luthra wrote:
>>>> An older recipe (v1.22.0) is present in the meta-openembedded/meta-oe
>>>> layer for kirkstone.
>>>>
>>>> TI's 6.1 based kernel has backported multistream routing APIs [1] from
>>>> upstream kernel, which requires a few patches to v4l-utils [2] that only
>>>> apply cleanly on top of v1.23.0.
>>>>
>>>> Thus we override the recipe in this layer to the latest (v1.23.0) found
>>>> from meta-oe master.
>>>>
>>>> Link:
>>>> https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/log/?h=ca55d70b41e [1]
>>>> Link:
>>>> https://lore.kernel.org/all/20230210115546.199809-1-tomi.valkeinen@ideasonboard.com/ [2]
>>>> Signed-off-by: Jai Luthra <j-luthra@ti.com>
>>>> ---
>>>>    ...-Don-t-install-libmediactl-and-libv4.patch | 44 ++++++++++
>>>>    ...02-original-patch-mediactl-pkgconfig.patch | 21 +++++
>>>>    ...iginal-patch-export-mediactl-headers.patch | 24 +++++
>>>>    .../v4l-utils/0004-Do-not-use-getsubopt.patch | 60 +++++++++++++
>>>>    .../v4l-utils/v4l-utils_1.23.0.bb             | 87 +++++++++++++++++++
>>>
>>> As per my opinion, not a good idea to bump up package version than default
>>> package version shipped by kirkstone i.e. 1.22.1
>>> (meta-oe/recipes-multimedia/v4l2apps/v4l-utils_1.22.1.bb)
>>>
>>> As a general rule of thumb, there could be other layers (for e.g. added by
>>> vendors) having bbappends assuming shipped package version same as in
>>> kirkstone and also build time and runtime dependencies w.r.t other packages
>>> are guaranted if all packages stay with same version as shipped by kirkstone
>>> and with this new recipe I believe we are kind of deviating from that
>>> protection and so my suggestion is to rebase on top of existing package
>>> version i.e. 1.22.1
>>
>> If you were talking about meta-ti then I would 100% agree with you, but this
>> is meta-arago.  And as a distribution layer, we are perfectly within our
>> purvue to advance to a later version of a tool beyond what the other upstream
>> repos are at, or change config files, etc...
>>
>> Meta-ti as a BSP layer needs to play nice in the sandbox with other layers and
>> not change versions without guards.
>>
> 
> I am not sure what exactly you mean by guards, is it possible to share an
> example? Also I think we did change linux kernel version to 6.1 in meta-ti
> from the one supported in kirkstone (which I believe was 5.18) although that
> has its set of advantages since it is latest LTS.

Check out the recent patch that Denys submitted for meta-ti kirkstone 
for optee.  Basically, hide any changes we make to something that is 
upstream behind an override so that the change only applies when 
building one our machine targets.

https://lists.yoctoproject.org/g/meta-ti/message/16574


>> If you wanted to be extra careful you could include the guards in arago as
>> well, but since arago is not a yocto compliant layer it is not strictly needed
>> at this time.
>>
>>
> 
> I think the crux of the issue here is gap between v4l-utils version (which is
> 1.22.1 released couple of years back as Jai mentioned ) in kirkstone and the
> linux version being used which is 6.1 (which got released this year) requiring
> us to bump up v4l-utils to match the latest features added in 6.1 and this is
> because since we bumped up linux version to 6.1 from official kirkstone
> supported version which I think is 5.18.
> 
> But I agree with Jai and you that it's better to bump up the recipe version
> directly since anyway kernel version is bumped up and latest v4l-utils is a
> better match.
> 
> On a sidenote is it fine if we try and decide to bump up gstreamer version too
> from 1.20.5 to 1.22 series which was released this year since it has more
> features and compatible to kernel version 6.1 ?

I would be fine with that.


> Regards
> Devarsh
>>> Regards
>>> Devarsh
>>>
>>>>    5 files changed, 236 insertions(+)
>>>>    create mode 100644
>>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>>>    create mode 100644
>>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>>>    create mode 100644
>>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>>>    create mode 100644
>>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>>>    create mode 100644
>>>> meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>>
>>>
>>>>
>>>> diff --git
>>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>>> new file mode 100644
>>>> index 00000000..8ac8fbe1
>>>> --- /dev/null
>>>> +++
>>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
>>>> @@ -0,0 +1,44 @@
>>>> +From 0d5c0e9a75eca43667b0e29155b635e50622b66a Mon Sep 17 00:00:00 2001
>>>> +From: Khem Raj <raj.khem@gmail.com>
>>>> +Date: Fri, 27 Feb 2015 21:55:36 +0000
>>>> +Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
>>>> +
>>>> + libv4l2subdev"
>>>> +
>>>> +This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
>>>> +
>>>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>>>> +
>>>> +Conflicts:
>>>> +    utils/media-ctl/Makefile.am
>>>> +
>>>> +---
>>>> + utils/media-ctl/Makefile.am | 10 +++-------
>>>> + 1 file changed, 3 insertions(+), 7 deletions(-)
>>>> +
>>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>>> +index c48c8d6..e255e16 100644
>>>> +--- a/utils/media-ctl/Makefile.am
>>>> ++++ b/utils/media-ctl/Makefile.am
>>>> +@@ -1,8 +1,7 @@
>>>> +-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>>>> +-
>>>> ++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
>>>> + libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
>>>> +-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
>>>> +-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
>>>> ++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
>>>> ++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
>>>> +
>>>> + media-bus-format-names.h: ../../include/linux/media-bus-format.h
>>>> +     $(AM_V_GEN) sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/
>>>> d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
>>>> +@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
>>>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>>>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>>>> + libv4l2subdev_la_LIBADD = libmediactl.la
>>>> +-libv4l2subdev_la_CFLAGS = -static
>>>> +-libv4l2subdev_la_LDFLAGS = -static
>>>> +-
>>>> + mediactl_includedir=$(includedir)/mediactl
>>>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>>>> +
>>>> diff --git
>>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>>> new file mode 100644
>>>> index 00000000..52fc2d7a
>>>> --- /dev/null
>>>> +++
>>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
>>>> @@ -0,0 +1,21 @@
>>>> +From 320b8378ee30eb5e0fe83a8b397f822f2f88a4c1 Mon Sep 17 00:00:00 2001
>>>> +From: Khem Raj <raj.khem@gmail.com>
>>>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>>>> +Subject: [PATCH] %% original patch: mediactl-pkgconfig.patch
>>>> +
>>>> +---
>>>> + utils/media-ctl/Makefile.am | 1 +
>>>> + 1 file changed, 1 insertion(+)
>>>> +
>>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>>> +index e255e16..ff7b417 100644
>>>> +--- a/utils/media-ctl/Makefile.am
>>>> ++++ b/utils/media-ctl/Makefile.am
>>>> +@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
>>>> + mediactl_includedir=$(includedir)/mediactl
>>>> + noinst_HEADERS = mediactl.h v4l2subdev.h
>>>> +
>>>> ++pkgconfig_DATA = libmediactl.pc
>>>> + bin_PROGRAMS = media-ctl
>>>> + media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
>>>> + media_ctl_LDADD = libmediactl.la libv4l2subdev.la
>>>> diff --git
>>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>>> new file mode 100644
>>>> index 00000000..39dc3383
>>>> --- /dev/null
>>>> +++
>>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
>>>> @@ -0,0 +1,24 @@
>>>> +From f7109d6b2fcb291824d795071c04a492d9fbc45b Mon Sep 17 00:00:00 2001
>>>> +From: Khem Raj <raj.khem@gmail.com>
>>>> +Date: Sun, 1 Mar 2015 22:25:07 +0000
>>>> +Subject: [PATCH] %% original patch: export-mediactl-headers.patch
>>>> +
>>>> +---
>>>> + utils/media-ctl/Makefile.am | 4 ++--
>>>> + 1 file changed, 2 insertions(+), 2 deletions(-)
>>>> +
>>>> +diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
>>>> +index ff7b417..6ce656f 100644
>>>> +--- a/utils/media-ctl/Makefile.am
>>>> ++++ b/utils/media-ctl/Makefile.am
>>>> +@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
>>>> + nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
>>>> + libv4l2subdev_la_SOURCES = libv4l2subdev.c
>>>> + libv4l2subdev_la_LIBADD = libmediactl.la
>>>> +-mediactl_includedir=$(includedir)/mediactl
>>>> +-noinst_HEADERS = mediactl.h v4l2subdev.h
>>>> ++otherincludedir = $(includedir)/mediactl
>>>> ++otherinclude_HEADERS = mediactl.h v4l2subdev.h
>>>> +
>>>> + pkgconfig_DATA = libmediactl.pc
>>>> + bin_PROGRAMS = media-ctl
>>>> diff --git
>>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>>> new file mode 100644
>>>> index 00000000..fb844acb
>>>> --- /dev/null
>>>> +++
>>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
>>>> @@ -0,0 +1,60 @@
>>>> +From 6e7e52de7afe29597016952a7317faf9c3ea3268 Mon Sep 17 00:00:00 2001
>>>> +From: Khem Raj <raj.khem@gmail.com>
>>>> +Date: Sat, 30 Nov 2019 18:50:34 -0800
>>>> +Subject: [PATCH] Do not use getsubopt
>>>> +
>>>> +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.
>>>> +
>>>> +Imported from Alpine Linux
>>>> +
>>>> +Upstream-Status: Pending
>>>> +
>>>> +Signed-off-by: Khem Raj <raj.khem@gmail.com>
>>>> +
>>>> +Adapt patch to 1.23.0.
>>>> +
>>>> +(v4l-utils rev fd544473800d02e90bc289434cc44e5aa8fadd0f).
>>>> +
>>>> +%% original patch: 0007-Do-not-use-getsubopt.patch
>>>> +
>>>> +Signed-off-by: Daniel Gomez <daniel@qtec.com>
>>>> +---
>>>> + utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
>>>> + 1 file changed, 10 insertions(+), 8 deletions(-)
>>>> +
>>>> +diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>>> b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>>> +index d77f7104..838c297d 100644
>>>> +--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>>> ++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
>>>> +@@ -994,15 +994,17 @@ static bool parse_subset(char *optarg)
>>>> +
>>>> + static bool parse_next_subopt(char **subs, char **value)
>>>> + {
>>>> +-    static char *const subopts[] = {
>>>> +-        nullptr
>>>> +-    };
>>>> +-    int opt = v4l_getsubopt(subs, subopts, value);
>>>> ++    char *p = *subs;
>>>> ++    *value = *subs;
>>>> +
>>>> +-    if (opt < 0 || *value)
>>>> +-        return false;
>>>> +-    fprintf(stderr, "Missing suboption value\n");
>>>> +-    return true;
>>>> ++    while (*p && *p != ',')
>>>> ++        p++;
>>>> ++
>>>> ++    if (*p)
>>>> ++        *p++ = '\0';
>>>> ++
>>>> ++    *subs = p;
>>>> ++    return false;
>>>> + }
>>>> +
>>>> + void common_cmd(const std::string &media_bus_info, int ch, char *optarg)
>>>> +--
>>>> +2.35.1
>>>> +
>>>> diff --git
>>>> a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>>> b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>>> new file mode 100644
>>>> index 00000000..21a08022
>>>> --- /dev/null
>>>> +++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
>>>> @@ -0,0 +1,87 @@
>>>> +SUMMARY = "v4l2 and IR applications"
>>>> +LICENSE = "GPL-2.0-only & LGPL-2.1-only"
>>>> +LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
>>>> +
>>>> file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
>>>> +PROVIDES = "libv4l media-ctl"
>>>> +
>>>> +DEPENDS = "jpeg \
>>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'x11',
>>>> 'virtual/libx11', '', d)} \
>>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd',
>>>> '', d)} \
>>>> +           ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa-lib', '',
>>>> d)} \
>>>> +           ${@bb.utils.contains_any('PACKAGECONFIG', 'qv4l2 qvidcap',
>>>> 'qtbase qtbase-native', '', d)}"
>>>> +
>>>> +DEPENDS:append:libc-musl = " argp-standalone"
>>>> +DEPENDS:append:class-target = " udev"
>>>> +LDFLAGS:append = " -pthread"
>>>> +# v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
>>>> +# both 32 and 64 bit file APIs.  But it does not handle the time side?
>>>> +# Needs further investigation
>>>> +GLIBC_64BIT_TIME_FLAGS = ""
>>>> +
>>>> +inherit autotools gettext pkgconfig
>>>> +
>>>> +PACKAGECONFIG ??= "media-ctl"
>>>> +PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
>>>> +PACKAGECONFIG[qv4l2] = ",--disable-qv4l2"
>>>> +PACKAGECONFIG[qvidcap] = ",--disable-qvidcap"
>>>> +
>>>> +SRC_URI = "\
>>>> +    git://git.linuxtv.org/v4l-utils.git;protocol=https;branch=master \
>>>> +    file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
>>>> +    file://0002-original-patch-mediactl-pkgconfig.patch \
>>>> +    file://0003-original-patch-export-mediactl-headers.patch \
>>>> +    file://0004-Do-not-use-getsubopt.patch \
>>>> +"
>>>> +
>>>> +SRCREV = "9431e4b26b4842d1401e80ada9f14593dca3a94c"
>>>> +
>>>> +PV .= "+git${SRCPV}"
>>>> +
>>>> +S = "${WORKDIR}/git"
>>>> +
>>>> +do_configure:prepend() {
>>>> +    cd ${S}; ./bootstrap.sh; cd -
>>>> +}
>>>> +
>>>> +EXTRA_OECONF = "--enable-shared --with-udevdir=${base_libdir}/udev \
>>>> +                --disable-v4l2-compliance-32 --disable-v4l2-ctl-32"
>>>> +
>>>> +VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
>>>> +
>>>> +PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dev qv4l2
>>>> qvidcap"
>>>> +
>>>> +RPROVIDES:${PN}-dbg += "libv4l-dbg"
>>>> +
>>>> +FILES:media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
>>>> +FILES:qv4l2 = "\
>>>> +    ${bindir}/qv4l2 \
>>>> +    ${datadir}/applications/qv4l2.desktop \
>>>> +    ${datadir}/icons/hicolor/*/apps/qv4l2.* \
>>>> +"
>>>> +FILES:qvidcap = "\
>>>> +    ${bindir}/qvidcap \
>>>> +    ${datadir}/applications/qvidcap.desktop \
>>>> +    ${datadir}/icons/hicolor/*/apps/qvidcap.* \
>>>> +"
>>>> +
>>>> +FILES:ir-keytable = "${bindir}/ir-keytable
>>>> ${base_libdir}/udev/rules.d/*-infrared.rules"
>>>> +RDEPENDS:ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
>>>> +RDEPENDS:qv4l2 += "\
>>>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qv4l2', 'qtbase', '', d)}"
>>>> +RDEPENDS:qvidcap += "\
>>>> +    ${@bb.utils.contains('PACKAGECONFIG', 'qvidcap', 'qtbase', '', d)}"
>>>> +
>>>> +FILES:rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
>>>> +
>>>> +FILES:${PN} = "${bindir} ${sbindir}"
>>>> +
>>>> +FILES:libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so
>>>> ${libdir}/libv4l/plugins/*.so \
>>>> +                 ${libdir}/libdvbv5*${SOLIBS} \
>>>> +                 ${libdir}/libv4l/*-decomp"
>>>> +
>>>> +FILES:libv4l-dev += "${includedir} ${libdir}/pkgconfig \
>>>> +                     ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
>>>> +                     ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la
>>>> ${libdir}/libv4l/plugins/*.la"
>>>> +
>>>> +PARALLEL_MAKE:class-native = ""
>>>> +BBCLASSEXTEND = "native"
>>
diff mbox series

Patch

diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
new file mode 100644
index 00000000..8ac8fbe1
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch
@@ -0,0 +1,44 @@ 
+From 0d5c0e9a75eca43667b0e29155b635e50622b66a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 27 Feb 2015 21:55:36 +0000
+Subject: [PATCH] Revert "media-ctl: Don't install libmediactl and
+
+ libv4l2subdev"
+
+This reverts commit 0911dce53b08b0df3066be2c75f67e8a314d8729.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Conflicts:
+	utils/media-ctl/Makefile.am
+
+---
+ utils/media-ctl/Makefile.am | 10 +++-------
+ 1 file changed, 3 insertions(+), 7 deletions(-)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index c48c8d6..e255e16 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -1,8 +1,7 @@
+-noinst_LTLIBRARIES = libmediactl.la libv4l2subdev.la
+-
++lib_LTLIBRARIES = libmediactl.la libv4l2subdev.la
+ libmediactl_la_SOURCES = libmediactl.c mediactl-priv.h
+-libmediactl_la_CFLAGS = -static $(LIBUDEV_CFLAGS)
+-libmediactl_la_LDFLAGS = -static $(LIBUDEV_LIBS)
++libmediactl_la_CFLAGS = $(LIBUDEV_CFLAGS)
++libmediactl_la_LDFLAGS = $(LIBUDEV_LIBS)
+ 
+ media-bus-format-names.h: ../../include/linux/media-bus-format.h
+ 	$(AM_V_GEN) sed -e '/#define MEDIA_BUS_FMT/ ! d; s/.*FMT_//; /FIXED/ d; s/\t.*//; s/.*/{ \"&\", MEDIA_BUS_FMT_& },/;' \
+@@ -18,9 +17,6 @@ CLEANFILES = $(BUILT_SOURCES)
+ nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
+ libv4l2subdev_la_SOURCES = libv4l2subdev.c
+ libv4l2subdev_la_LIBADD = libmediactl.la
+-libv4l2subdev_la_CFLAGS = -static
+-libv4l2subdev_la_LDFLAGS = -static
+-
+ mediactl_includedir=$(includedir)/mediactl
+ noinst_HEADERS = mediactl.h v4l2subdev.h
+ 
diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
new file mode 100644
index 00000000..52fc2d7a
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0002-original-patch-mediactl-pkgconfig.patch
@@ -0,0 +1,21 @@ 
+From 320b8378ee30eb5e0fe83a8b397f822f2f88a4c1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Mar 2015 22:25:07 +0000
+Subject: [PATCH] %% original patch: mediactl-pkgconfig.patch
+
+---
+ utils/media-ctl/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index e255e16..ff7b417 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -20,6 +20,7 @@ libv4l2subdev_la_LIBADD = libmediactl.la
+ mediactl_includedir=$(includedir)/mediactl
+ noinst_HEADERS = mediactl.h v4l2subdev.h
+ 
++pkgconfig_DATA = libmediactl.pc
+ bin_PROGRAMS = media-ctl
+ media_ctl_SOURCES = media-ctl.c options.c options.h tools.h
+ media_ctl_LDADD = libmediactl.la libv4l2subdev.la
diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
new file mode 100644
index 00000000..39dc3383
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0003-original-patch-export-mediactl-headers.patch
@@ -0,0 +1,24 @@ 
+From f7109d6b2fcb291824d795071c04a492d9fbc45b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Mar 2015 22:25:07 +0000
+Subject: [PATCH] %% original patch: export-mediactl-headers.patch
+
+---
+ utils/media-ctl/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/utils/media-ctl/Makefile.am b/utils/media-ctl/Makefile.am
+index ff7b417..6ce656f 100644
+--- a/utils/media-ctl/Makefile.am
++++ b/utils/media-ctl/Makefile.am
+@@ -17,8 +17,8 @@ CLEANFILES = $(BUILT_SOURCES)
+ nodist_libv4l2subdev_la_SOURCES = $(BUILT_SOURCES)
+ libv4l2subdev_la_SOURCES = libv4l2subdev.c
+ libv4l2subdev_la_LIBADD = libmediactl.la
+-mediactl_includedir=$(includedir)/mediactl
+-noinst_HEADERS = mediactl.h v4l2subdev.h
++otherincludedir = $(includedir)/mediactl
++otherinclude_HEADERS = mediactl.h v4l2subdev.h
+ 
+ pkgconfig_DATA = libmediactl.pc
+ bin_PROGRAMS = media-ctl
diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
new file mode 100644
index 00000000..fb844acb
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils/0004-Do-not-use-getsubopt.patch
@@ -0,0 +1,60 @@ 
+From 6e7e52de7afe29597016952a7317faf9c3ea3268 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 30 Nov 2019 18:50:34 -0800
+Subject: [PATCH] Do not use getsubopt
+
+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.
+
+Imported from Alpine Linux
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Adapt patch to 1.23.0.
+
+(v4l-utils rev fd544473800d02e90bc289434cc44e5aa8fadd0f).
+
+%% original patch: 0007-Do-not-use-getsubopt.patch
+
+Signed-off-by: Daniel Gomez <daniel@qtec.com>
+---
+ utils/v4l2-ctl/v4l2-ctl-common.cpp | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/utils/v4l2-ctl/v4l2-ctl-common.cpp b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+index d77f7104..838c297d 100644
+--- a/utils/v4l2-ctl/v4l2-ctl-common.cpp
++++ b/utils/v4l2-ctl/v4l2-ctl-common.cpp
+@@ -994,15 +994,17 @@ static bool parse_subset(char *optarg)
+ 
+ static bool parse_next_subopt(char **subs, char **value)
+ {
+-	static char *const subopts[] = {
+-	    nullptr
+-	};
+-	int opt = v4l_getsubopt(subs, subopts, value);
++	char *p = *subs;
++	*value = *subs;
+ 
+-	if (opt < 0 || *value)
+-		return false;
+-	fprintf(stderr, "Missing suboption value\n");
+-	return true;
++	while (*p && *p != ',')
++		p++;
++
++	if (*p)
++		*p++ = '\0';
++
++	*subs = p;
++	return false;
+ }
+ 
+ void common_cmd(const std::string &media_bus_info, int ch, char *optarg)
+-- 
+2.35.1
+
diff --git a/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
new file mode 100644
index 00000000..21a08022
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/v4l-utils/v4l-utils_1.23.0.bb
@@ -0,0 +1,87 @@ 
+SUMMARY = "v4l2 and IR applications"
+LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=48da9957849056017dc568bbc43d8975 \
+                    file://COPYING.libv4l;md5=d749e86a105281d7a44c2328acebc4b0"
+PROVIDES = "libv4l media-ctl"
+
+DEPENDS = "jpeg \
+           ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11', '', d)} \
+           ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \
+           ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa-lib', '', d)} \
+           ${@bb.utils.contains_any('PACKAGECONFIG', 'qv4l2 qvidcap', 'qtbase qtbase-native', '', d)}"
+
+DEPENDS:append:libc-musl = " argp-standalone"
+DEPENDS:append:class-target = " udev"
+LDFLAGS:append = " -pthread"
+# v4l2 explicitly sets _FILE_OFFSET_BITS=32 to get access to
+# both 32 and 64 bit file APIs.  But it does not handle the time side?
+# Needs further investigation
+GLIBC_64BIT_TIME_FLAGS = ""
+
+inherit autotools gettext pkgconfig
+
+PACKAGECONFIG ??= "media-ctl"
+PACKAGECONFIG[media-ctl] = "--enable-v4l-utils,--disable-v4l-utils,,"
+PACKAGECONFIG[qv4l2] = ",--disable-qv4l2"
+PACKAGECONFIG[qvidcap] = ",--disable-qvidcap"
+
+SRC_URI = "\
+    git://git.linuxtv.org/v4l-utils.git;protocol=https;branch=master \
+    file://0001-Revert-media-ctl-Don-t-install-libmediactl-and-libv4.patch \
+    file://0002-original-patch-mediactl-pkgconfig.patch \
+    file://0003-original-patch-export-mediactl-headers.patch \
+    file://0004-Do-not-use-getsubopt.patch \
+"
+
+SRCREV = "9431e4b26b4842d1401e80ada9f14593dca3a94c"
+
+PV .= "+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+do_configure:prepend() {
+    cd ${S}; ./bootstrap.sh; cd -
+}
+
+EXTRA_OECONF = "--enable-shared --with-udevdir=${base_libdir}/udev \
+                --disable-v4l2-compliance-32 --disable-v4l2-ctl-32"
+
+VIRTUAL-RUNTIME_ir-keytable-keymaps ?= "rc-keymaps"
+
+PACKAGES =+ "media-ctl ir-keytable rc-keymaps libv4l libv4l-dev qv4l2 qvidcap"
+
+RPROVIDES:${PN}-dbg += "libv4l-dbg"
+
+FILES:media-ctl = "${bindir}/media-ctl ${libdir}/libmediactl.so.*"
+FILES:qv4l2 = "\
+    ${bindir}/qv4l2 \
+    ${datadir}/applications/qv4l2.desktop \
+    ${datadir}/icons/hicolor/*/apps/qv4l2.* \
+"
+FILES:qvidcap = "\
+    ${bindir}/qvidcap \
+    ${datadir}/applications/qvidcap.desktop \
+    ${datadir}/icons/hicolor/*/apps/qvidcap.* \
+"
+
+FILES:ir-keytable = "${bindir}/ir-keytable ${base_libdir}/udev/rules.d/*-infrared.rules"
+RDEPENDS:ir-keytable += "${VIRTUAL-RUNTIME_ir-keytable-keymaps}"
+RDEPENDS:qv4l2 += "\
+    ${@bb.utils.contains('PACKAGECONFIG', 'qv4l2', 'qtbase', '', d)}"
+RDEPENDS:qvidcap += "\
+    ${@bb.utils.contains('PACKAGECONFIG', 'qvidcap', 'qtbase', '', d)}"
+
+FILES:rc-keymaps = "${sysconfdir}/rc* ${base_libdir}/udev/rc*"
+
+FILES:${PN} = "${bindir} ${sbindir}"
+
+FILES:libv4l += "${libdir}/libv4l*${SOLIBS} ${libdir}/libv4l/*.so ${libdir}/libv4l/plugins/*.so \
+                 ${libdir}/libdvbv5*${SOLIBS} \
+                 ${libdir}/libv4l/*-decomp"
+
+FILES:libv4l-dev += "${includedir} ${libdir}/pkgconfig \
+                     ${libdir}/libv4l*${SOLIBSDEV} ${libdir}/*.la \
+                     ${libdir}/v4l*${SOLIBSDEV} ${libdir}/libv4l/*.la ${libdir}/libv4l/plugins/*.la"
+
+PARALLEL_MAKE:class-native = ""
+BBCLASSEXTEND = "native"