0
0
mirror of https://github.com/libretro/Lakka-LibreELEC.git synced 2025-03-31 12:08:15 +00:00

L4T/Ayn: upstream changes from 5.x

Lakka 5.x Switch changes (#1853)
Lakka v5.x switchroot 5.1.2 (#1871)
Fix Switch Issue's in upstream 5.x (#1888)
Minor Switch Changes (#1893)
Lakka v5.x switch 3 (#1895)
Lakka v5.x switch 4 (#1898)
L4T: Xorg-server: Fix build issue (#1924)
Switch: remove ra patch
Lakka v5.x switch 6 (#1926)
Cleanups, More LibreELEC Stuff, more permission fixes, Misc switch stuff. (#1930)
Switch: U-Boot: bump version to 2024-NX02 (#1946)

L4T/Ayn post-upstreaming fixes
- retroarch_joypad_autoconfig: remove spaces from file names
- retroarch: remove Switch specific patch merged upstream
- libXv: move to L4T packages folder (package removed in upstream)
- bring some packages from v5.x to L4T packages
- ffmpeg: remove vulkan
- remove stella core from Switch build (missing C++ headers)
- Ayn/Odin: use proper kernel arg to not hide kernel messages in console
- connman: add wpa_supplicant support back
This commit is contained in:
GavinDarkglider
2023-06-09 17:16:27 -07:00
committed by Tomáš Kelemen (vudiq)
parent f38c6747c9
commit 765323df23
224 changed files with 64735 additions and 1423 deletions
packages
audio/pulseaudio-configs
devel/libcec
graphics/libdrm
lakka
lakka_tools
joycond
wii-u-gc-adapter
libretro_cores
package.mk
retroarch_base
linux
mediacenter
kodi-binary-addons/peripheral.joystick
kodi
multimedia
ffmpeg
package.mk
patches/L4T
0001-codecs-add-nvv4l2-codec-for-Nvidia-Tegra-SOCs.patch0002-fftools-libavformat-Enforce-nvv4l2.patch0003-codecs-nvv4l2-avoid-probing.patch0004-libavformat-remove-nvv4l2-probing-mitigation.patch0005-codecs-nvv4l2-do-not-use-external-headers.patch0006-codecs-nvv4l2-use-atomics-for-pool.patch0007-codecs-nvv4l2-add-new-functions-and-update-context-a.patch0008-codecs-nvv4l2-support-multiple-L4T-versions-with-sin.patch0009-codecs-nvv4l2-align-line-width-to-64B.patch0010-codecs-nvv4l2-add-two-pass-cbr-mode-support.patch0011-codecs-nvv4l2-various-bugfixes.patch0012-codecs-nvv4l2-fix-hanging-on-event-wait-if-no-full-f.patch0013-codecs-nvv4l2-use-sessions-for-transformations.patch0014-codecs-nvv4l2-support-all-different-timestamps.patch0015-codecs-nvv4l2-BSP-34.1.x-remarks.patch0016-codecs-nvv4l2-support-BT709-BT2020-colorspaces.patch0017-codecs-nvv4l2-reorder-capture-buffer-queueing.patch0018-codecs-nvv4l2-align-encoder-plane-width-to-64B.patch0019-codecs-nvv4l2-align-enc-plane-width-per-format-plane.patch0020-codecs-nvv4l2-fix-memleak.patch0021-codecs-nvv4l2-fix-use-after-free.patch0021-fix-libreelec-build-issue.patch0022-codecs-nvv4l2-rename-AVCodec-to-fit-API-renames.patch0023-codecs-nvv4l2-comment-structs-redefined-in-nvv4l2.h.patch0024-codecs-nvv4l2-More-API-related-changes.patch0025-codecs-nvv4l2-add-encode.h-header-needed-for-ff_allo.patch0026-codecs-nvv4l2-fix-missing-comma-in-FFCodec-struct.patch0027-codecs-nvv4l2-remove-second-size-argument-as-it-is-u.patch0028-codecs-nvv4l2-undo-struct-commenting-due-to-OpenBuil.patch0029-fftools-improve-nvv4l2-enforcing-Now-non-supported-p.patch0030-nvv4l2-add-yuv420p10-support.patch0031-nvv4l2-handle-unsupported-pixel-formats-NVDEC-only-s.patch0032-nvv4l2-allow-10-bit-HEVC-The-only-hw-support-for-10-.patch0033-codecs-nvv4l2-more-rename-AVCodec-to-fit-API-renames.patch0034-codecs-nvv4l2-more-API-renames.patch0035-codecs-nvv4l2-find_codec_or_die-to-find_codec-API-re.patch0036-codecs-nvv4l2-update-for-ABI-rework.patch0037-Revert-codecs-nvv4l2-update-for-ABI-rework.patch0038-Revert-codecs-nvv4l2-find_codec_or_die-to-find_codec.patch0039-fftools-ffmpeg-set-find_codec_or_die-logctx-to-NULL.patch0040-nvv4l2-do-not-override-key_frame.patch0041-fix-libreelec-configure.patch
libva
media-driver/patches
network
sysutils
x11/util/xdotool
projects
Ayn/devices/Odin/packages/odin-bootloader/files/boot/EFI/debian
L4T
devices/Switch
options
packages
busybox
curl
flycast
glibc/patches
gptfdisk
libXv
systemd
tegra-bsp/assets
v4l-utils
wpa_supplicant
xf86-input-libinput
xorg-server
patches/linux
scripts

@ -1,4 +1,5 @@
PKG_NAME="pulseaudio-configs"
PKG_VERSION="1.1"
PKG_LICENSE="GPL"
PKG_DEPENDS_TARGET="alsa-plugins pulseaudio"
PKG_LONGDESC="Standard configs for pulseaudio"

@ -19,10 +19,10 @@
; default-sink =
; default-source =
; default-server =
default-server = unix:/tmp/pulse-server
; default-dbus-server =
; autospawn = yes
autospawn = no
; daemon-binary = /usr/bin/pulseaudio
; extra-arguments = --log-target=syslog
@ -33,3 +33,5 @@
; auto-connect-localhost = no
; auto-connect-display = no
enable-memfd = yes

@ -72,10 +72,11 @@ load-module module-bluetooth-discover
.endif
### Load several protocols
load-module module-dbus-protocol
.ifexists module-esound-protocol-unix.so
load-module module-esound-protocol-unix
.endif
load-module module-native-protocol-unix
load-module module-native-protocol-unix auth-group=audio socket=/tmp/pulse-server
### Network access (may be configured with paprefs, so leave this commented
### here if you plan to use paprefs)

@ -3,8 +3,8 @@
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="libcec"
PKG_VERSION="4.0.7"
PKG_SHA256="bcd92c376993a5721d346edcc09eb17289451f9156b1d1d113c9663c2046315a"
PKG_VERSION="6.0.2"
PKG_SHA256="090696d7a4fb772d7acebbb06f91ab92e025531c7c91824046b9e4e71ecb3377"
PKG_LICENSE="GPL"
PKG_SITE="http://libcec.pulse-eight.com/"
PKG_URL="https://github.com/Pulse-Eight/libcec/archive/libcec-${PKG_VERSION}.tar.gz"

@ -45,10 +45,8 @@ listcontains "${GRAPHIC_DRIVERS}" "freedreno" &&
listcontains "${GRAPHIC_DRIVERS}" "etnaviv" &&
PKG_MESON_OPTS_TARGET+=" -Detnaviv=enabled" || PKG_MESON_OPTS_TARGET+=" -Detnaviv=disabled"
if [ "${DISTRO}" = "Lakka" ]; then
listcontains "${GRAPHIC_DRIVERS}" "nouveau" &&
PKG_MESON_OPTS_TARGET="${PKG_MESON_OPTS_TARGET//-Dnouveau=disabled/-Dnouveau=enabled}"
fi
listcontains "${GRAPHIC_DRIVERS}" "nouveau" &&
PKG_MESON_OPTS_TARGET="${PKG_MESON_OPTS_TARGET//-Dnouveau=disabled/-Dnouveau=enabled}"
post_makeinstall_target() {
# Remove all test programs installed by install-test-programs=true except modetest

@ -2,9 +2,9 @@ PKG_NAME="joycond"
PKG_DEPENDS_TARGET="toolchain cmake:host libevdev systemd"
PKG_SITE="https://github.com/DanielOgorchock/joycond"
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
PKG_VERSION="031f04311a912514cea9deb020512ee6d7063398"
PKG_SHA256="c2681b1f7723acf0e51e318be3194202e3a77627c78aa39e0a70797d0155dcba"
PKG_URL="https://gitlab.com/switchroot/userspace/joycond/-/archive/c48187fcdacda1b139297e4944a149125e0800b2/joycond-c48187fcdacda1b139297e4944a149125e0800b2.tar.gz"
PKG_VERSION="c83539a8995040e8daf6912dab32a11082e75acf"
PKG_SHA256="10b043f226e49b17f1025ded37257ca096ed9fac5f22bbe91cd12cd6e7882835"
PKG_URL="https://gitlab.com/switchroot/userspace/joycond/-/archive/linux/joycond-linux.tar.gz"
else
PKG_VERSION="2d3f553060291f1bfee2e49fc2ca4a768b289df8"
PKG_SHA256="34ba2a4ffd35f2b2bbebd8ce47d17f2238d991bc6262653d0617b28f864e4b63"

@ -10,3 +10,7 @@ makeinstall_target() {
mkdir -p ${INSTALL}/usr/bin
cp wii-u-gc-adapter ${INSTALL}/usr/bin/
}
post_install() {
enable_service wii-u-gc-adapter.service
}

@ -222,6 +222,8 @@ elif [ "${PROJECT}" = "Generic" -a "${ARCH}" = "i386" ]; then
EXCLUDE_LIBRETRO_CORES+=" fake_08 openlara"
elif [ "${PROJECT}" = "Ayn" -a "${DEVICE}" = "Odin" ]; then
EXCLUDE_LIBRETRO_CORES+=" lr_moonlight"
elif [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
EXCLUDE_LIBRETRO_CORES+=" stella"
fi
# disable cores that are only for specific targets

@ -18,6 +18,11 @@ PKG_CMAKE_OPTS_TARGET="-DLIBRETRO=ON \
-DUSE_DISCORD=OFF \
-DUSE_MINIUPNPC=OFF"
# for future compatibility - in case other platforms will use system ffmpeg
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
PKG_CMAKE_OPTS_TARGET=${PKG_CMAKE_OPTS_TARGET//-DUSE_SYSTEM_FFMPEG=ON/-DUSE_SYSTEM_FFMPEG=OFF}
fi
if [ "${OPENGL_SUPPORT}" = "yes" ]; then
PKG_DEPENDS_TARGET+=" ${OPENGL}"
fi

@ -36,6 +36,6 @@ if [ "${DEVICE}" != "Switch" -a "${DEVICE}" != "RPiZero-GPiCase" -a "${DEVICE}"
PKG_DEPENDS_TARGET+=" xbox360_controllers_shutdown"
fi
if [ "${CEC_FRAMEWORK_SUPPORT}" = yes ]; then
if [ "${CEC_FRAMEWORK_SUPPORT}" = yes -a ! "${PROJECT}" = "L4T" ]; then
PKG_DEPENDS_TARGET+=" cec_mini_kb"
fi

@ -133,12 +133,12 @@ if [ "${PROJECT}" = "L4T" ]; then
fi
fi
if [ "${LAKKA_NIGHTLY}" = yes ]; then
if [ "${LAKKA_NIGHTLY}" = "yes" ]; then
PKG_MAKE_OPTS_TARGET+=" HAVE_LAKKA_NIGHTLY=1"
fi
if [ "${LAKKA_DEVBUILD}" = yes ]; then
elif [ "${LAKKA_DEVBUILD}" = "yes" ]; then
PKG_MAKE_OPTS_TARGET+=" HAVE_LAKKA_DEVBUILD=1"
elif [ -n "${LAKKA_CANARY_PATH}" ]; then
PKG_MAKE_OPTS_TARGET+=" HAVE_LAKKA_CANARY=\"${LAKKA_CANARY_PATH}\""
fi
pre_configure_target() {
@ -233,7 +233,8 @@ makeinstall_target() {
echo 'audio_driver = "alsathread"' >> ${INSTALL}/etc/retroarch.cfg
echo 'audio_filter_dir = "/usr/share/audio_filters"' >> ${INSTALL}/etc/retroarch.cfg
if [ "${DEVICE}" = "Exynos" ]; then # workaround the 55fps bug
if [ "${PROJECT}" = "Samsung" -a "${DEVICE}" = "Exynos" ]; then
# workaround the 55fps bug
echo 'audio_out_rate = "44100"' >> ${INSTALL}/etc/retroarch.cfg
fi
@ -337,9 +338,6 @@ makeinstall_target() {
sed -i -e 's|^menu_driver =.*|menu_driver = "ozone"|' ${INSTALL}/etc/retroarch.cfg
if [ ! "${PROJECT}" = "Ayn" -a ! "${DEVICE}" = "Odin" ]; then
#Set Default Joycon index to Combined Joycons.
echo 'input_player1_joypad_index = "2"' >> ${INSTALL}/etc/retroarch.cfg
#Set Joypad as joypad with analog
echo 'input_libretro_device_p1 = "5"' >> ${INSTALL}/etc/retroarch.cfg
else

@ -4,15 +4,3 @@ for i in 5 4 3 2 1 0; do [ -e /dev/snd/pcmC${i}D0p ] && export ALSA_CARD=$i; don
echo "ALSA_CARD=\"$ALSA_CARD\"" > /run/libreelec/retroarch.conf
echo "LD_LIBRARY_PATH=\"/usr/lib:/tmp/cores\"" >> /run/libreelec/retroarch.conf
# WAR: Do to everything running as root, udev doesnt properly hide L/R joycon on 3 out of 4 revisions nintendo switch
# which makes the combined controller index 2, but on Nintendo Switch Lite, on first boot we need to change this to 1
# or built in gamepad needs user intervention to be used.
SERIAL_PREFIX=$(cat /sys/firmware/devicetree/base/serial-number)
SERIAL_PREFIX=${SERIAL_PREFIX:0:3}
if [ ${SERIAL_PREFIX} = "NXV" -a ! -f /storage/.config/retroarch/retroarch.cfg ]; then
cp /etc/retroarch.cfg /storage/.config/retroarch/retroarch.cfg
sed -i -e 's|input_player1_joypad_index = \"2\"|input_player1_joypad_index = \"0\"|' /storage/.config/retroarch/retroarch.cfg
fi

@ -0,0 +1,18 @@
input_driver = "udev"
input_device = "Nintendo Switch Left Joy-Con Test"
input_vendor_id = "1406"
input_product_id = "8198"
input_b_btn = "9"
input_y_btn = "7"
input_select_btn = "5"
input_start_btn = "0"
input_up_axis = "+0"
input_down_axis = "-0"
input_left_axis = "-1"
input_right_axis = "+1"
input_a_btn = "8"
input_x_btn = "10"
input_l_btn = "2"
input_r_btn = "4"

@ -0,0 +1,29 @@
input_driver = "udev"
input_device = "Nintendo Switch Lite Gamepad"
input_vendor_id = "1406"
input_product_id = "61731"
input_b_btn = "0"
input_y_btn = "3"
input_select_btn = "9"
input_start_btn = "10"
input_up_btn = "14"
input_down_btn = "15"
input_left_btn = "16"
input_right_btn = "17"
input_a_btn = "1"
input_x_btn = "2"
input_l_btn = "5"
input_r_btn = "6"
input_l2_btn = "7"
input_r2_btn = "8"
input_l3_btn = "12"
input_r3_btn = "13"
input_l_x_plus_axis = "+0"
input_l_x_minus_axis = "-0"
input_l_y_plus_axis = "+1"
input_l_y_minus_axis = "-1"
input_r_x_plus_axis = "+2"
input_r_x_minus_axis = "-2"
input_r_y_plus_axis = "+3"
input_r_y_minus_axis = "-3"
input_gun_trigger_mbtn = "1"

@ -0,0 +1,18 @@
input_driver = "udev"
input_device = "Nintendo Switch Right Joy-Con"
input_vendor_id = "1406"
input_product_id = "8199"
input_b_btn = "1"
input_y_btn = "0"
input_select_btn = "9"
input_start_btn = "8"
input_up_axis = "-0"
input_down_axis = "+0"
input_left_axis = "+1"
input_right_axis = "-1"
input_a_btn = "2"
input_x_btn = "3"
input_l_btn = "4"
input_r_btn = "6"

@ -30,16 +30,21 @@ case "${LINUX}" in
;;
L4T)
if [ -z "${L4T_KERNEL_VERSION}" ]; then
echo "${PROJECT}: ${KERNEL} - you must set L4T_KERNEL_VERSION in projects/${PROJECT}/device/${DEVICE}/options"
echo -n "${DEVICE:-${PROJECT}}: ${KERNEL} - you must set L4T_KERNEL_VERSION in projects/${PROJECT}/"
if [ -z "${DEVICE}" ]; then
echo "options"
else
echo "device/${DEVICE}/options"
fi
exit 1
fi
PKG_VERSION=${DEVICE}-${L4T_KERNEL_VERSION}
PKG_VERSION=${DEVICE:-${PROJECT}}-${L4T_KERNEL_VERSION}
PKG_URL="l4t-kernel-sources"
GET_HANDLER_SUPPORT="l4t-kernel-sources"
PKG_PATCH_DIRS="${PROJECT} ${PROJECT}/${DEVICE}"
PKG_SOURCE_NAME="${PKG_NAME}-${PKG_VERSION}.tar.gz"
#Need to find a better way to do this for l4t platforms!
PKG_SHA256=$L4T_COMBINED_KERNEL_SHA256
PKG_SHA256=${L4T_COMBINED_KERNEL_SHA256}
;;
ayn-odin)
PKG_SHA256="9aa25bf492928bc7a4542e87d28919c9ac36d27c"

@ -18,3 +18,10 @@ PKG_BUILD_FLAGS="+lto"
PKG_IS_ADDON="embedded"
PKG_ADDON_TYPE="kodi.peripheral"
post_install() {
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
# Set UDEV controller driver as active
sed -i -e 's|<default>0</default>|<default>1</default>|' ${INSTALL}/usr/share/kodi/addons/peripheral.joystick/resources/settings.xml
fi
}

@ -10,6 +10,12 @@ PKG_SITE="http://www.kodi.tv"
PKG_URL="https://github.com/xbmc/xbmc/archive/${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain JsonSchemaBuilder:host TexturePacker:host Python3 zlib systemd lzo pcre swig:host libass curl fontconfig fribidi tinyxml tinyxml2 libjpeg-turbo freetype libcdio taglib libxml2 libxslt rapidjson sqlite ffmpeg crossguid libdvdnav libfmt lirc libfstrcmp flatbuffers:host flatbuffers libudfread spdlog"
PKG_DEPENDS_UNPACK="commons-lang3 commons-text groovy"
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
# Not really sure why u-power was removed, this is required to get battery statistics in kodi.
PKG_DEPENDS_TARGET+=" upower"
fi
PKG_DEPENDS_HOST="toolchain"
PKG_LONGDESC="A free and open source cross-platform media player."
PKG_BUILD_FLAGS="+speed"

@ -26,6 +26,12 @@ case "${PROJECT}" in
PKG_FFMPEG_RPI="--disable-mmal --enable-sand"
PKG_PATCH_DIRS+=" rpi"
;;
L4T)
PKG_DEPENDS_TARGET+=" tegra-bsp:host"
PKG_PATCH_DIRS+=" L4T"
PKG_FFMPEG_NVV4L2="--enable-nvv4l2"
EXTRA_CFLAGS="-I${SYSROOT_PREFIX}/usr/src/jetson_multimedia_api/include"
;;
*)
PKG_PATCH_DIRS+=" v4l2-request v4l2-drmprime"
case "${PROJECT}" in
@ -49,7 +55,7 @@ get_graphicdrivers
PKG_FFMPEG_HWACCEL="--enable-hwaccels"
if [ "${V4L2_SUPPORT}" = "yes" ]; then
if [ "${V4L2_SUPPORT}" = "yes" -a ! "${DEVICE}" = "Switch" ]; then
PKG_DEPENDS_TARGET+=" libdrm"
PKG_NEED_UNPACK+=" $(get_pkg_directory libdrm)"
PKG_FFMPEG_V4L2="--enable-v4l2_m2m --enable-libdrm"
@ -68,7 +74,7 @@ if [ "${V4L2_SUPPORT}" = "yes" ]; then
PKG_FFMPEG_V4L2+=" --disable-libudev --disable-v4l2-request"
fi
else
PKG_FFMPEG_V4L2="--disable-v4l2_m2m --disable-libudev --disable-v4l2-request"
: #PKG_FFMPEG_V4L2="--disable-v4l2_m2m --disable-libudev --disable-v4l2-request"
fi
if [ "${VAAPI_SUPPORT}" = "yes" ]; then
@ -99,17 +105,6 @@ else
PKG_FFMPEG_DEBUG="--disable-debug --enable-stripping"
fi
#Re-enable when patches are rebased on newer version of ffmpeg,for now we use old version.
if [ "${PROJECT}" = "L4T" ]; then
PKG_DEPENDS_TARGET+=" tegra-bsp:host"
PKG_PATCH_DIRS+=" L4T"
PKG_FFMPEG_NVV4L2="--enable-nvv4l2"
EXTRA_CFLAGS="-I${SYSROOT_PREFIX}/usr/src/jetson_multimedia_api/include"
else
PKG_FFMPEG_NVV4L2=""
fi
if target_has_feature neon; then
PKG_FFMPEG_FPU="--enable-neon"
else
@ -128,13 +123,6 @@ else
PKG_FFMPEG_AV1="--disable-libdav1d"
fi
if [ "${DISTRO}" = "Lakka" -a "${VULKAN_SUPPORT}" = yes ]; then
PKG_DEPENDS_TARGET+=" ${VULKAN}"
PKG_FFMPEG_VULKAN="--enable-vulkan"
else
PKG_FFMPEG_VULKAN="--disable-vulkan"
fi
pre_configure_target() {
cd ${PKG_BUILD}
rm -rf .${TARGET_NAME}

@ -1,7 +1,7 @@
From 3368013773dbc2def4b3a33748dc656dc13f3e25 Mon Sep 17 00:00:00 2001
From 7df787ecf3260cbb9f370290afc13b77de740c4c Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sat, 5 Mar 2022 03:27:27 +0000
Subject: [PATCH 01/20] codecs: add nvv4l2 codec for Nvidia Tegra SOCs
Subject: [PATCH 01/39] codecs: add nvv4l2 codec for Nvidia Tegra SOCs
Use `--enable-nvv4l2` to enable it.
@ -46,24 +46,24 @@ FPS are halved.
Some formats are supported from Tegra X1 and up.
For more, check the NVDEC/NVENC version support matrix.
---
configure | 22 +
libavcodec/Makefile | 9 +
configure | 23 +
libavcodec/Makefile | 14 +-
libavcodec/allcodecs.c | 8 +
libavcodec/nvv4l2.c | 820 +++++++++++++++++++++++
libavcodec/nvv4l2.h | 324 +++++++++
libavcodec/nvv4l2_dec.c | 1101 +++++++++++++++++++++++++++++++
libavcodec/nvv4l2_enc.c | 1389 +++++++++++++++++++++++++++++++++++++++
7 files changed, 3673 insertions(+)
7 files changed, 3678 insertions(+), 1 deletion(-)
create mode 100644 libavcodec/nvv4l2.c
create mode 100644 libavcodec/nvv4l2.h
create mode 100644 libavcodec/nvv4l2_dec.c
create mode 100644 libavcodec/nvv4l2_enc.c
diff --git a/configure b/configure
index 98113c95fd..29a6d96575 100755
index 3cd3bdfb44..889b547071 100755
--- a/configure
+++ b/configure
@@ -333,6 +333,7 @@ External library support:
@@ -336,6 +336,7 @@ External library support:
--enable-cuda-nvcc enable Nvidia CUDA compiler [no]
--disable-cuda-llvm disable CUDA compilation using clang [autodetect]
--disable-cuvid disable Nvidia CUVID support [autodetect]
@ -71,7 +71,7 @@ index 98113c95fd..29a6d96575 100755
--disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
--disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
--disable-ffnvcodec disable dynamically linked Nvidia code [autodetect]
@@ -1843,6 +1844,7 @@ HWACCEL_AUTODETECT_LIBRARY_LIST="
@@ -1887,6 +1888,7 @@ HWACCEL_AUTODETECT_LIBRARY_LIST="
ffnvcodec
nvdec
nvenc
@ -79,27 +79,28 @@ index 98113c95fd..29a6d96575 100755
vaapi
vdpau
videotoolbox
@@ -3051,6 +3053,8 @@ qsvenc_select="qsv"
@@ -3129,6 +3131,8 @@ qsvenc_select="qsv"
qsvvpp_select="qsv"
vaapi_encode_deps="vaapi"
v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
+nvv4l2_deps="libv4l2 pthreads linux_videodev2_h nvbuf_utils_h v4l2_nv_extensions_h"
+nvv4l2_extralibs="-lnvbuf_utils"
hwupload_cuda_filter_deps="ffnvcodec"
scale_npp_filter_deps="ffnvcodec libnpp"
@@ -3066,6 +3070,9 @@ amf_deps_any="libdl LoadLibrary"
bilateral_cuda_filter_deps="ffnvcodec"
bilateral_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
@@ -3153,6 +3157,10 @@ ddagrab_filter_deps="d3d11va IDXGIOutput1 DXGI_OUTDUPL_FRAME_INFO"
amf_deps_any="libdl LoadLibrary"
nvenc_deps="ffnvcodec"
nvenc_deps_any="libdl LoadLibrary"
nvenc_encoder_deps="nvenc"
+nvenc_encoder_deps="nvenc"
+h264_nvv4l2_encoder_deps="nvv4l2"
+h264_nvv4l2_decoder_deps="nvv4l2"
+h264_nvv4l2_decoder_select="h264_mp4toannexb_bsf"
aac_mf_encoder_deps="mediafoundation"
ac3_mf_encoder_deps="mediafoundation"
@@ -3098,6 +3105,9 @@ hevc_mediacodec_decoder_deps="mediacodec"
hevc_mediacodec_decoder_select="hevc_mp4toannexb_bsf hevc_parser"
@@ -3197,6 +3205,9 @@ hevc_mediacodec_encoder_extralibs="-landroid"
hevc_mediacodec_encoder_select="hevc_metadata"
hevc_mf_encoder_deps="mediafoundation"
hevc_nvenc_encoder_deps="nvenc"
+hevc_nvv4l2_encoder_deps="nvv4l2"
@ -108,7 +109,7 @@ index 98113c95fd..29a6d96575 100755
hevc_nvenc_encoder_select="atsc_a53"
hevc_qsv_decoder_select="hevc_mp4toannexb_bsf qsvdec"
hevc_qsv_encoder_select="hevcparse qsvenc"
@@ -3121,6 +3131,7 @@ mpeg2_crystalhd_decoder_select="crystalhd"
@@ -3220,6 +3231,7 @@ mpeg2_crystalhd_decoder_select="crystalhd"
mpeg2_cuvid_decoder_deps="cuvid"
mpeg2_mmal_decoder_deps="mmal"
mpeg2_mediacodec_decoder_deps="mediacodec"
@ -116,7 +117,7 @@ index 98113c95fd..29a6d96575 100755
mpeg2_qsv_decoder_select="qsvdec"
mpeg2_qsv_encoder_select="qsvenc"
mpeg2_vaapi_encoder_select="cbs_mpeg2 vaapi_encode"
@@ -3129,6 +3140,7 @@ mpeg4_crystalhd_decoder_select="crystalhd"
@@ -3228,6 +3240,7 @@ mpeg4_crystalhd_decoder_select="crystalhd"
mpeg4_cuvid_decoder_deps="cuvid"
mpeg4_mediacodec_decoder_deps="mediacodec"
mpeg4_mmal_decoder_deps="mmal"
@ -124,7 +125,7 @@ index 98113c95fd..29a6d96575 100755
mpeg4_omx_encoder_deps="omx"
mpeg4_v4l2m2m_decoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
mpeg4_v4l2m2m_encoder_deps="v4l2_m2m mpeg4_v4l2_m2m"
@@ -3142,6 +3154,7 @@ vc1_qsv_decoder_select="qsvdec"
@@ -3239,6 +3252,7 @@ vc1_qsv_decoder_select="qsvdec"
vc1_v4l2m2m_decoder_deps="v4l2_m2m vc1_v4l2_m2m"
vp8_cuvid_decoder_deps="cuvid"
vp8_mediacodec_decoder_deps="mediacodec"
@ -132,7 +133,7 @@ index 98113c95fd..29a6d96575 100755
vp8_qsv_decoder_select="qsvdec"
vp8_rkmpp_decoder_deps="rkmpp"
vp8_vaapi_encoder_deps="VAEncPictureParameterBufferVP8"
@@ -3150,6 +3163,7 @@ vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
@@ -3247,6 +3261,7 @@ vp8_v4l2m2m_decoder_deps="v4l2_m2m vp8_v4l2_m2m"
vp8_v4l2m2m_encoder_deps="v4l2_m2m vp8_v4l2_m2m"
vp9_cuvid_decoder_deps="cuvid"
vp9_mediacodec_decoder_deps="mediacodec"
@ -140,7 +141,7 @@ index 98113c95fd..29a6d96575 100755
vp9_qsv_decoder_select="qsvdec"
vp9_rkmpp_decoder_deps="rkmpp"
vp9_vaapi_encoder_deps="VAEncPictureParameterBufferVP9"
@@ -3426,6 +3440,7 @@ kmsgrab_indev_deps="libdrm"
@@ -3537,6 +3552,7 @@ kmsgrab_indev_deps="libdrm"
lavfi_indev_deps="avfilter"
libcdio_indev_deps="libcdio"
libdc1394_indev_deps="libdc1394"
@ -148,7 +149,7 @@ index 98113c95fd..29a6d96575 100755
openal_indev_deps="openal"
opengl_outdev_deps="opengl"
opengl_outdev_suggest="sdl2"
@@ -6783,6 +6798,13 @@ if enabled_any nvdec cuvid; then
@@ -7054,6 +7070,13 @@ if enabled_any nvdec cuvid; then
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi
@ -161,51 +162,54 @@ index 98113c95fd..29a6d96575 100755
+
enabled amf &&
check_cpp_condition amf "AMF/core/Version.h" \
"(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000"
"(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x00010004001c0000"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 33a280cf69..31400f3f2d 100644
index 389253f5d0..78f43ca9a1 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -133,6 +133,7 @@ OBJS-$(CONFIG_MPEGVIDEOENC) += mpegvideo_enc.o mpeg12data.o \
mpegvideoencdsp.o
OBJS-$(CONFIG_MSS34DSP) += mss34dsp.o
OBJS-$(CONFIG_NVENC) += nvenc.o
@@ -148,6 +148,8 @@ OBJS-$(CONFIG_MSMPEG4DEC) += msmpeg4dec.o msmpeg4.o msmpeg4data.o \
OBJS-$(CONFIG_MSMPEG4ENC) += msmpeg4enc.o msmpeg4.o msmpeg4data.o \
msmpeg4_vc1_data.o
OBJS-$(CONFIG_MSS34DSP) += mss34dsp.o jpegquanttables.o
+OBJS-$(CONFIG_NVENC) += nvenc.o
+OBJS-$(CONFIG_NVV4L2) += nvv4l2.o
OBJS-$(CONFIG_PIXBLOCKDSP) += pixblockdsp.o
OBJS-$(CONFIG_QPELDSP) += qpeldsp.o
OBJS-$(CONFIG_QSV) += qsv.o
@@ -372,12 +373,14 @@ OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \
h264_slice.o h264data.o
@@ -404,11 +406,15 @@ OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \
h264_slice.o h264data.o h274.o
OBJS-$(CONFIG_H264_AMF_ENCODER) += amfenc_h264.o
OBJS-$(CONFIG_H264_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_H264_NVV4L2_DECODER) += nvv4l2_dec.o
OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_H264_MEDIACODEC_ENCODER) += mediacodecenc.o
OBJS-$(CONFIG_H264_MF_ENCODER) += mfenc.o mf_utils.o
OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o
-OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o nvenc.o
+OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
+OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o
+OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o
+OBJS-$(CONFIG_H264_NVV4L2_ENCODER) += nvv4l2_enc.o
OBJS-$(CONFIG_H264_OMX_ENCODER) += omx.o
OBJS-$(CONFIG_H264_QSV_DECODER) += qsvdec.o
OBJS-$(CONFIG_H264_QSV_ENCODER) += qsvenc_h264.o
@@ -395,6 +398,7 @@ OBJS-$(CONFIG_HEVC_DECODER) += hevcdec.o hevc_mvs.o \
hevcdsp.o hevc_filter.o hevc_data.o
@@ -430,6 +436,7 @@ OBJS-$(CONFIG_HEVC_DECODER) += hevcdec.o hevc_mvs.o \
h274.o
OBJS-$(CONFIG_HEVC_AMF_ENCODER) += amfenc_hevc.o
OBJS-$(CONFIG_HEVC_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_HEVC_NVV4L2_DECODER) += nvv4l2_dec.o
OBJS-$(CONFIG_HEVC_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_HEVC_MEDIACODEC_ENCODER) += mediacodecenc.o
OBJS-$(CONFIG_HEVC_MF_ENCODER) += mfenc.o mf_utils.o
OBJS-$(CONFIG_HEVC_NVENC_ENCODER) += nvenc_hevc.o
@@ -405,6 +409,7 @@ OBJS-$(CONFIG_HEVC_QSV_ENCODER) += qsvenc_hevc.o hevc_ps_enc.o \
OBJS-$(CONFIG_HEVC_RKMPP_DECODER) += rkmppdec.o
OBJS-$(CONFIG_HEVC_VAAPI_ENCODER) += vaapi_encode_h265.o h265_profile_level.o
@@ -441,6 +448,7 @@ OBJS-$(CONFIG_HEVC_RKMPP_DECODER) += rkmppdec.o
OBJS-$(CONFIG_HEVC_VAAPI_ENCODER) += vaapi_encode_h265.o h265_profile_level.o \
h2645data.o
OBJS-$(CONFIG_HEVC_V4L2M2M_DECODER) += v4l2_m2m_dec.o
+OBJS-$(CONFIG_HEVC_NVV4L2_ENCODER) += nvv4l2_enc.o
OBJS-$(CONFIG_HEVC_V4L2M2M_ENCODER) += v4l2_m2m_enc.o
OBJS-$(CONFIG_HEVC_VIDEOTOOLBOX_ENCODER) += videotoolboxenc.o
OBJS-$(CONFIG_HNM4_VIDEO_DECODER) += hnm4video.o
OBJS-$(CONFIG_HQ_HQA_DECODER) += hq_hqa.o hq_hqadata.o hq_hqadsp.o \
@@ -495,12 +500,14 @@ OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o
@@ -535,12 +543,14 @@ OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o
OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o
OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o
OBJS-$(CONFIG_MPEG2_CUVID_DECODER) += cuviddec.o
@ -213,23 +217,23 @@ index 33a280cf69..31400f3f2d 100644
OBJS-$(CONFIG_MPEG2_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_MPEG2_VAAPI_ENCODER) += vaapi_encode_mpeg2.o
OBJS-$(CONFIG_MPEG2_V4L2M2M_DECODER) += v4l2_m2m_dec.o
OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o
OBJS-$(CONFIG_MPEG4_DECODER) += mpeg4videodsp.o xvididct.o
OBJS-$(CONFIG_MPEG4_ENCODER) += mpeg4videoenc.o
OBJS-$(CONFIG_MPEG4_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_MPEG4_NVV4L2_DECODER) += nvv4l2_dec.o
OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o
OBJS-$(CONFIG_MPEG4_V4L2M2M_DECODER) += v4l2_m2m_dec.o
@@ -715,6 +722,7 @@ OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o \
OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o
OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o
@@ -763,6 +773,7 @@ OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o \
OBJS-$(CONFIG_VP7_DECODER) += vp8.o vpx_rac.o
OBJS-$(CONFIG_VP8_DECODER) += vp8.o vpx_rac.o
OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_VP8_NVV4L2_DECODER) += nvv4l2_dec.o
OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o
OBJS-$(CONFIG_VP8_QSV_DECODER) += qsvdec.o
OBJS-$(CONFIG_VP8_RKMPP_DECODER) += rkmppdec.o
@@ -725,6 +733,7 @@ OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9data.o vp9dsp.o vp9lpf.o vp9r
vp9block.o vp9prob.o vp9mvs.o vp56rac.o \
@@ -773,6 +784,7 @@ OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9data.o vp9dsp.o vp9lpf.o vp9r
vp9block.o vp9prob.o vp9mvs.o vpx_rac.o \
vp9dsp_8bpp.o vp9dsp_10bpp.o vp9dsp_12bpp.o
OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuviddec.o
+OBJS-$(CONFIG_VP9_NVV4L2_DECODER) += nvv4l2_dec.o
@ -237,50 +241,50 @@ index 33a280cf69..31400f3f2d 100644
OBJS-$(CONFIG_VP9_RKMPP_DECODER) += rkmppdec.o
OBJS-$(CONFIG_VP9_VAAPI_ENCODER) += vaapi_encode_vp9.o
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 2e9a3581de..a828e43cfd 100644
index e593ad19af..8eb911eec2 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -141,6 +141,8 @@ extern AVCodec ff_h263i_decoder;
extern AVCodec ff_h263p_encoder;
extern AVCodec ff_h263p_decoder;
extern AVCodec ff_h263_v4l2m2m_decoder;
+extern AVCodec ff_h264_nvv4l2_encoder;
+extern AVCodec ff_h264_nvv4l2_decoder;
extern AVCodec ff_h264_decoder;
extern AVCodec ff_h264_crystalhd_decoder;
extern AVCodec ff_h264_v4l2m2m_decoder;
@@ -150,6 +152,8 @@ extern AVCodec ff_h264_qsv_decoder;
extern AVCodec ff_h264_rkmpp_decoder;
extern AVCodec ff_hap_encoder;
extern AVCodec ff_hap_decoder;
+extern AVCodec ff_hevc_nvv4l2_encoder;
+extern AVCodec ff_hevc_nvv4l2_decoder;
extern AVCodec ff_hevc_decoder;
extern AVCodec ff_hevc_qsv_decoder;
extern AVCodec ff_hevc_rkmpp_decoder;
@@ -194,8 +198,10 @@ extern AVCodec ff_mobiclip_decoder;
extern AVCodec ff_motionpixels_decoder;
extern AVCodec ff_mpeg1video_encoder;
extern AVCodec ff_mpeg1video_decoder;
+extern AVCodec ff_mpeg2_nvv4l2_decoder;
extern AVCodec ff_mpeg2video_encoder;
extern AVCodec ff_mpeg2video_decoder;
+extern AVCodec ff_mpeg4_nvv4l2_decoder;
extern AVCodec ff_mpeg4_encoder;
extern AVCodec ff_mpeg4_decoder;
extern AVCodec ff_mpeg4_crystalhd_decoder;
@@ -356,9 +362,11 @@ extern AVCodec ff_vp6_decoder;
extern AVCodec ff_vp6a_decoder;
extern AVCodec ff_vp6f_decoder;
extern AVCodec ff_vp7_decoder;
+extern AVCodec ff_vp8_nvv4l2_decoder;
extern AVCodec ff_vp8_decoder;
extern AVCodec ff_vp8_rkmpp_decoder;
extern AVCodec ff_vp8_v4l2m2m_decoder;
+extern AVCodec ff_vp9_nvv4l2_decoder;
extern AVCodec ff_vp9_decoder;
extern AVCodec ff_vp9_rkmpp_decoder;
extern AVCodec ff_vp9_v4l2m2m_decoder;
@@ -150,6 +150,8 @@ extern const FFCodec ff_h263i_decoder;
extern const FFCodec ff_h263p_encoder;
extern const FFCodec ff_h263p_decoder;
extern const FFCodec ff_h263_v4l2m2m_decoder;
+extern const FFCodec ff_h264_nvv4l2_encoder;
+extern const FFCodec ff_h264_nvv4l2_decoder;
extern const FFCodec ff_h264_decoder;
extern const FFCodec ff_h264_crystalhd_decoder;
extern const FFCodec ff_h264_v4l2m2m_decoder;
@@ -160,6 +162,8 @@ extern const FFCodec ff_h264_qsv_decoder;
extern const FFCodec ff_h264_rkmpp_decoder;
extern const FFCodec ff_hap_encoder;
extern const FFCodec ff_hap_decoder;
+extern const FFCodec ff_hevc_nvv4l2_encoder;
+extern const FFCodec ff_hevc_nvv4l2_decoder;
extern const FFCodec ff_hevc_decoder;
extern const FFCodec ff_hevc_qsv_decoder;
extern const FFCodec ff_hevc_rkmpp_decoder;
@@ -205,8 +209,10 @@ extern const FFCodec ff_mobiclip_decoder;
extern const FFCodec ff_motionpixels_decoder;
extern const FFCodec ff_mpeg1video_encoder;
extern const FFCodec ff_mpeg1video_decoder;
+extern const FFCodec ff_mpeg2_nvv4l2_decoder;
extern const FFCodec ff_mpeg2video_encoder;
extern const FFCodec ff_mpeg2video_decoder;
+extern const FFCodec ff_mpeg4_nvv4l2_decoder;
extern const FFCodec ff_mpeg4_encoder;
extern const FFCodec ff_mpeg4_decoder;
extern const FFCodec ff_mpeg4_crystalhd_decoder;
@@ -376,9 +382,11 @@ extern const FFCodec ff_vp6_decoder;
extern const FFCodec ff_vp6a_decoder;
extern const FFCodec ff_vp6f_decoder;
extern const FFCodec ff_vp7_decoder;
+extern const FFCodec ff_vp8_nvv4l2_decoder;
extern const FFCodec ff_vp8_decoder;
extern const FFCodec ff_vp8_rkmpp_decoder;
extern const FFCodec ff_vp8_v4l2m2m_decoder;
+extern const FFCodec ff_vp9_nvv4l2_decoder;
extern const FFCodec ff_vp9_decoder;
extern const FFCodec ff_vp9_rkmpp_decoder;
extern const FFCodec ff_vp9_v4l2m2m_decoder;
diff --git a/libavcodec/nvv4l2.c b/libavcodec/nvv4l2.c
new file mode 100644
index 0000000000..b3e4a27823

@ -1,51 +1,20 @@
From b58c700230430c744470e2fdedc73e2439a51346 Mon Sep 17 00:00:00 2001
From ffa9de21d7415d53f2f02b674438a41daaeee209 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sat, 5 Mar 2022 03:30:44 +0000
Subject: [PATCH 02/20] fftools/libavformat: Enforce nvv4l2
Subject: [PATCH 02/39] fftools/libavformat: Enforce nvv4l2
This enforces NVV4L2 even if user requests another codec.
Additionally, it forces nvv4l2 to go through software codecs first to get context if needed.
---
fftools/ffmpeg_opt.c | 19 +++++++++++++++++++
fftools/ffplay.c | 25 +++++++++++++++++++++++++
libavformat/utils.c | 13 +++++++++++++
3 files changed, 57 insertions(+)
fftools/ffplay.c | 25 +++++++++++++++++++++++++
libavformat/demux.c | 13 +++++++++++++
2 files changed, 38 insertions(+)
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 807e783422..d6f28bda23 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -771,6 +771,25 @@ static const AVCodec *choose_decoder(OptionsContext *o, AVFormatContext *s, AVSt
char *codec_name = NULL;
MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
+
+#if CONFIG_NVV4L2
+ /* Reset requested decoder in order to enforce NVV4L2 if possible. */
+ if (codec_name) {
+ if (strcmp(codec_name, "h264") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "hevc") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg2video") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg4") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp8") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp9") == 0 && st->codecpar->format != AV_PIX_FMT_YUV420P10)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ }
+#endif
+
if (codec_name) {
const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
st->codecpar->codec_id = codec->id;
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index e14c800b8f..e1c7b741b9 100644
index d6479aef5f..86f8425a15 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -2601,6 +2601,31 @@ static int stream_component_open(VideoState *is, int stream_index)
@@ -2590,6 +2590,31 @@ static int stream_component_open(VideoState *is, int stream_index)
case AVMEDIA_TYPE_SUBTITLE: is->last_subtitle_stream = stream_index; forced_codec_name = subtitle_codec_name; break;
case AVMEDIA_TYPE_VIDEO : is->last_video_stream = stream_index; forced_codec_name = video_codec_name; break;
}
@ -77,11 +46,11 @@ index e14c800b8f..e1c7b741b9 100644
if (forced_codec_name)
codec = avcodec_find_decoder_by_name(forced_codec_name);
if (!codec) {
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 1384b56771..a960f8265d 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -211,6 +211,19 @@ static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st,
diff --git a/libavformat/demux.c b/libavformat/demux.c
index b19ab86d08..ae60a819d5 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -77,6 +77,19 @@ static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st,
if (codec_id == AV_CODEC_ID_H264)
return avcodec_find_decoder_by_name("h264");
#endif
@ -94,12 +63,12 @@ index 1384b56771..a960f8265d 100644
+ else if (codec_id == AV_CODEC_ID_MPEG4)
+ return avcodec_find_decoder_by_name("mpeg4");
+ else if (codec_id == AV_CODEC_ID_VP8)
+ return avcodec_find_decoder_by_name("vp8");
+ return avcodec_find_decoder_by_name("vp8");
+ else if (codec_id == AV_CODEC_ID_VP9)
+ return avcodec_find_decoder_by_name("vp9");
+#endif
codec = find_decoder(s, st, codec_id);
codec = ff_find_decoder(s, st, codec_id);
if (!codec)
--
2.25.1

@ -1,7 +1,7 @@
From 87622041abb1387bc8580721d23ec79a03e5249c Mon Sep 17 00:00:00 2001
From c80256646ddae6d91a1ec9fe1a6cda53efaf923f Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sun, 6 Mar 2022 04:26:06 +0000
Subject: [PATCH 03/20] codecs: nvv4l2: avoid probing
Subject: [PATCH 03/39] codecs: nvv4l2: avoid probing
NVV4L2 does not support probing for getting stream metadata.
So disallow that.

@ -1,18 +1,18 @@
From ecdbd9b4904b71bea7d3c373690d0e6283896730 Mon Sep 17 00:00:00 2001
From 81aa7501ce56cf7df7ee7be3bf6e7e37d1952dc8 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sun, 6 Mar 2022 04:27:54 +0000
Subject: [PATCH 04/20] libavformat: remove nvv4l2 probing mitigation
Subject: [PATCH 04/39] libavformat: remove nvv4l2 probing mitigation
It was fixed properly with AV_CODEC_CAP_AVOID_PROBING flag.
---
libavformat/utils.c | 13 -------------
libavformat/demux.c | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index a960f8265d..1384b56771 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -211,19 +211,6 @@ static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st,
diff --git a/libavformat/demux.c b/libavformat/demux.c
index ae60a819d5..b19ab86d08 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -77,19 +77,6 @@ static const AVCodec *find_probe_decoder(AVFormatContext *s, const AVStream *st,
if (codec_id == AV_CODEC_ID_H264)
return avcodec_find_decoder_by_name("h264");
#endif
@ -25,12 +25,12 @@ index a960f8265d..1384b56771 100644
- else if (codec_id == AV_CODEC_ID_MPEG4)
- return avcodec_find_decoder_by_name("mpeg4");
- else if (codec_id == AV_CODEC_ID_VP8)
- return avcodec_find_decoder_by_name("vp8");
- return avcodec_find_decoder_by_name("vp8");
- else if (codec_id == AV_CODEC_ID_VP9)
- return avcodec_find_decoder_by_name("vp9");
-#endif
codec = find_decoder(s, st, codec_id);
codec = ff_find_decoder(s, st, codec_id);
if (!codec)
--
2.25.1

@ -1,7 +1,7 @@
From 8e286f3ffc845709f6747d77982c60ad0ed0b37f Mon Sep 17 00:00:00 2001
From 135ad87310784e7dfd49c95ba6f7ed45e9444cd8 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:16:35 +0000
Subject: [PATCH 05/20] codecs: nvv4l2: do not use external headers
Subject: [PATCH 05/39] codecs: nvv4l2: do not use external headers
Make needed headers builtin as this will help to bring compatibility from r32.3.1 till r32.7.1 and newer with a single build.
---
@ -11,10 +11,10 @@ Make needed headers builtin as this will help to bring compatibility from r32.3.
create mode 100644 libavcodec/nvv4l2_ext_utils.h
diff --git a/configure b/configure
index 29a6d96575..ea84db929c 100755
index 889b547071..ba28526b44 100755
--- a/configure
+++ b/configure
@@ -3053,7 +3053,7 @@ qsvenc_select="qsv"
@@ -3131,7 +3131,7 @@ qsvenc_select="qsv"
qsvvpp_select="qsv"
vaapi_encode_deps="vaapi"
v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
@ -22,8 +22,8 @@ index 29a6d96575..ea84db929c 100755
+nvv4l2_deps="libv4l2 pthreads linux_videodev2_h"
nvv4l2_extralibs="-lnvbuf_utils"
hwupload_cuda_filter_deps="ffnvcodec"
@@ -6798,11 +6798,8 @@ if enabled_any nvdec cuvid; then
bilateral_cuda_filter_deps="ffnvcodec"
@@ -7070,11 +7070,8 @@ if enabled_any nvdec cuvid; then
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi

@ -1,7 +1,7 @@
From fd622ef8d15cf208810f82a6a843b4db94fb28be Mon Sep 17 00:00:00 2001
From 4896ff0afcdccbb5521dee948c233dccb6616d7a Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:20:48 +0000
Subject: [PATCH 06/20] codecs: nvv4l2: use atomics for pool
Subject: [PATCH 06/39] codecs: nvv4l2: use atomics for pool
Do not lock with mutexes until we need to do more in pools. Use atomics for now to lower latency.
---

@ -1,7 +1,7 @@
From 0fd5fb903861c42d40f84b0468496006966e1c5d Mon Sep 17 00:00:00 2001
From 607f6a8e40b495ecb887fc046bf8cf6030036c3a Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:23:33 +0000
Subject: [PATCH 07/20] codecs: nvv4l2: add new functions and update context as
Subject: [PATCH 07/39] codecs: nvv4l2: add new functions and update context as
prep
---

@ -1,7 +1,7 @@
From 02d9583d32a9a8bd02dda9dd510519c04691d8d2 Mon Sep 17 00:00:00 2001
From 72f992d69e5462c2da170f4259032b5f9ff6b250 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:31:31 +0000
Subject: [PATCH 08/20] codecs: nvv4l2: support multiple L4T versions with
Subject: [PATCH 08/39] codecs: nvv4l2: support multiple L4T versions with
single build
Nvidia has the tendency to break compatibility on documented apis for no reason.

@ -1,7 +1,7 @@
From 280522f4f351a045ae7288ce7f5110ae099ea8b7 Mon Sep 17 00:00:00 2001
From ade9d9b54d172437be84797300b25a85c4164cd4 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:39:48 +0000
Subject: [PATCH 09/20] codecs: nvv4l2: align line width to 64B
Subject: [PATCH 09/39] codecs: nvv4l2: align line width to 64B
Transformations of formats to formats of simply Block linear to Pitch are done in HW.

@ -1,7 +1,7 @@
From 9d3282af10055fbbb81bd53654dd342682e2d09d Mon Sep 17 00:00:00 2001
From b7a72216ca1ed53f6428a3fca5949618d2059538 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:42:29 +0000
Subject: [PATCH 10/20] codecs: nvv4l2: add two-pass cbr mode support
Subject: [PATCH 10/39] codecs: nvv4l2: add two-pass cbr mode support
To enable, use `twopass=on` as encoder option.

@ -1,7 +1,7 @@
From 73aba81a154a3f25efb2326a6e59949660d6a5f5 Mon Sep 17 00:00:00 2001
From 124b4a1c85f24a11de5710b8515648dae91000cf Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:46:36 +0000
Subject: [PATCH 11/20] codecs: nvv4l2: various bugfixes
Subject: [PATCH 11/39] codecs: nvv4l2: various bugfixes
---
libavcodec/nvv4l2_dec.c | 105 ++++++++++++++++++++++------------------

@ -1,7 +1,7 @@
From c0832ff40e14ff28c926e500525cdf839d58ff98 Mon Sep 17 00:00:00 2001
From d78e4bc70ec1d97e22c5f0365c027574e740923f Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:50:20 +0000
Subject: [PATCH 12/20] codecs: nvv4l2: fix hanging on event wait if no full
Subject: [PATCH 12/39] codecs: nvv4l2: fix hanging on event wait if no full
frame info
Sometimes the decoder can be opened with no packet sent or not many for a frame to be decoded.

@ -1,7 +1,7 @@
From eceaecff30fc8a1ca622de7506470d486e34695a Mon Sep 17 00:00:00 2001
From ac123e70b68b22a99b483ba5b9406e60b35f1519 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:53:34 +0000
Subject: [PATCH 13/20] codecs: nvv4l2: use sessions for transformations
Subject: [PATCH 13/39] codecs: nvv4l2: use sessions for transformations
Some apps use different processes for init and decoding.

@ -1,7 +1,7 @@
From 1d0dbfb7243a12b2941a23584a2dbed7cfb7077f Mon Sep 17 00:00:00 2001
From 95ed6f305a76c588f8264406e69123e3775e6c36 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Fri, 18 Mar 2022 21:57:58 +0000
Subject: [PATCH 14/20] codecs: nvv4l2: support all different timestamps
Subject: [PATCH 14/39] codecs: nvv4l2: support all different timestamps
Various packets and players have different timestamps defined.

@ -1,7 +1,7 @@
From 04008befad133d97b7f956a21632592aaaede7ca Mon Sep 17 00:00:00 2001
From 0cd74d94cdac5e3cd7ce3e014b3af2b276389074 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sat, 11 Jun 2022 17:14:49 +0000
Subject: [PATCH 15/20] codecs: nvv4l2: BSP 34.1.x remarks
Subject: [PATCH 15/39] codecs: nvv4l2: BSP 34.1.x remarks
NVIDIA changed the enum again in r34 and broke compatibility for no reason.

@ -1,7 +1,7 @@
From 3674076e6287c62dd39c73585521504908f25fb9 Mon Sep 17 00:00:00 2001
From 628d01310250a97fc874f3acb9405460b57e679d Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Tue, 14 Jun 2022 19:21:20 +0000
Subject: [PATCH 16/20] codecs: nvv4l2: support BT709/BT2020 colorspaces
Subject: [PATCH 16/39] codecs: nvv4l2: support BT709/BT2020 colorspaces
---
libavcodec/nvv4l2_dec.c | 62 ++++++++++++++++++++++++-----------

@ -1,7 +1,7 @@
From 636c040931dff3d5febae00697a8502af396e01f Mon Sep 17 00:00:00 2001
From 9ad8d41a2aa4dcb6b552d77e04f9ce4dc26e999a Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Wed, 15 Jun 2022 13:33:10 +0000
Subject: [PATCH 17/20] codecs: nvv4l2: reorder capture buffer queueing
Subject: [PATCH 17/39] codecs: nvv4l2: reorder capture buffer queueing
Move capture buffer queueing after capture plane stream on.

@ -1,7 +1,7 @@
From 7b67a0996bb80c38a923b215566c67ffc130d161 Mon Sep 17 00:00:00 2001
From ef1bcd73fa1e37982dfc24f2319e83d5932848a8 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Tue, 28 Jun 2022 01:37:59 +0000
Subject: [PATCH 18/20] codecs: nvv4l2: align encoder plane width to 64B
Subject: [PATCH 18/39] codecs: nvv4l2: align encoder plane width to 64B
Transformations of Block linear formats to linear Pitch formats are done in HW.

@ -1,7 +1,7 @@
From b0aabaeebd73e4968654f384f44ce8a4d608ae8d Mon Sep 17 00:00:00 2001
From c5751e2bb1faeb0fd8e4442461bbbcd9448c3960 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Wed, 29 Jun 2022 06:38:26 +0000
Subject: [PATCH 19/20] codecs: nvv4l2: align enc plane width per format/plane
Subject: [PATCH 19/39] codecs: nvv4l2: align enc plane width per format/plane
Take two on creating a heuristic of the needed alignment.

@ -1,7 +1,7 @@
From deac819ac20d2ccd1664c95e4d91c20a35d67cc5 Mon Sep 17 00:00:00 2001
From 1fe17b61d4221fed766069a7742a7d09eaabedbf Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Wed, 3 Aug 2022 22:04:22 +0000
Subject: [PATCH 20/20] codecs: nvv4l2: fix memleak
Subject: [PATCH 20/39] codecs: nvv4l2: fix memleak
Fixes #2

@ -0,0 +1,39 @@
From 24b397a75e4a737c845b91771274ad1104edd54f Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Wed, 28 Dec 2022 14:22:13 +0000
Subject: [PATCH 21/39] codecs: nvv4l2: fix use after free
---
libavcodec/nvv4l2_enc.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index 3af728aade..dc09236e0a 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -795,6 +795,13 @@ int nvv4l2_encoder_close(AVCodecContext *avctx, nvv4l2_ctx_t *ctx)
nvv4l2_destroyBuffer(ctx, ctx->cp_buffers[i]);
}
+ for (uint32_t i = 0; i < ctx->op_num_buffers; i++) {
+ if (ctx->plane_dma_fd[i] != -1) {
+ nvv4l2_unmap_out(ctx, i, ctx->op_buf_type,
+ ctx->op_mem_type, ctx->plane_dma_fd[i]);
+ }
+ }
+
/* Request 0 buffers on both planes. */
op_num_old_buffers = ctx->op_num_buffers;
ret = nvv4l2_req_buffers_on_output_plane(ctx,
@@ -808,8 +815,6 @@ int nvv4l2_encoder_close(AVCodecContext *avctx, nvv4l2_ctx_t *ctx)
/* Unmap and destroy all allocated DMA buffers. */
for (uint32_t i = 0; i < op_num_old_buffers; i++) {
if (ctx->plane_dma_fd[i] != -1) {
- nvv4l2_unmap_out(ctx, i, ctx->op_buf_type,
- ctx->op_mem_type, ctx->plane_dma_fd[i]);
ret = NvBufferDestroy(ctx->plane_dma_fd[i]);
ctx->plane_dma_fd[i] = -1;
if (ret) {
--
2.25.1

@ -1,26 +0,0 @@
diff -Naur ffmpeg-4.4.1-Nexus-Alpha1-2/configure ffmpeg-4.4.1-Nexus-Alpha1/configure
--- ffmpeg-4.4.1-Nexus-Alpha1-2/configure 2022-10-10 21:51:13.330387005 +0200
+++ ffmpeg-4.4.1-Nexus-Alpha1/configure 2022-10-10 22:01:51.723150253 +0200
@@ -3068,8 +3068,8 @@
qsvvpp_select="qsv"
vaapi_encode_deps="vaapi"
v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
-nvv4l2_deps="libv4l2 pthreads linux_videodev2_h"
-nvv4l2_extralibs="-lnvbuf_utils"
+nvv4l2_deps="pthreads"
+nvv4l2_extralibs="-lnvbuf_utils -lv4l2"
hwupload_cuda_filter_deps="ffnvcodec"
scale_npp_filter_deps="ffnvcodec libnpp"
@@ -6829,10 +6829,7 @@
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi
-enabled nvv4l2 && add_ldflags '-L/usr/lib/aarch64-linux-gnu/tegra' \
- && check_headers linux/videodev2.h \
- && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
-
+enabled nvv4l2 && add_ldflags '-L/usr/lib/aarch64-linux-gnu/tegra'
enabled amf &&
check_cpp_condition amf "AMF/core/Version.h" \
"(AMF_VERSION_MAJOR << 48 | AMF_VERSION_MINOR << 32 | AMF_VERSION_RELEASE << 16 | AMF_VERSION_BUILD_NUM) >= 0x0001000400090000"

@ -0,0 +1,101 @@
From b2a7cfdcf77cfd5c3ca864670aa949ddef17cd9a Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 02:02:57 +0100
Subject: [PATCH 22/39] codecs: nvv4l2: rename AVCodec to fit API renames
---
libavcodec/nvv4l2_dec.c | 20 ++++++++++----------
libavcodec/nvv4l2_enc.c | 20 ++++++++++----------
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 35784e0704..b56d35cf82 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -29,7 +29,7 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
-#include "internal.h"
+#include "codec_internal.h"
#include "libavutil/log.h"
#include "nvv4l2.h"
@@ -1203,22 +1203,22 @@ nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
#define NVV4L2_DEC(NAME, ID, BSFS) \
NVV4L2_DEC_CLASS(NAME) \
- AVCodec ff_##NAME##_nvv4l2_decoder = { \
- .name = #NAME "_nvv4l2", \
- .long_name = NULL_IF_CONFIG_SMALL(#NAME " NVV4L2 HW decoder for Tegra"), \
- .type = AVMEDIA_TYPE_VIDEO, \
- .id = ID, \
+ const FFCodec ff_##NAME##_nvv4l2_decoder = { \
+ .p.name = #NAME "_nvv4l2", \
+ .p.long_name = NULL_IF_CONFIG_SMALL(#NAME " NVV4L2 HW decoder for Tegra"), \
+ .p.type = AVMEDIA_TYPE_VIDEO, \
+ .p.id = ID, \
.priv_data_size = sizeof(nvv4l2DecodeContext), \
.init = nvv4l2dec_init, \
.close = nvv4l2dec_close, \
.decode = nvv4l2dec_decode, \
.flush = nvv4l2dec_flush, \
- .priv_class = &nvv4l2_##NAME##_dec_class, \
- .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | \
+ .p.priv_class = &nvv4l2_##NAME##_dec_class, \
+ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | \
AV_CODEC_CAP_AVOID_PROBING, \
.bsfs = BSFS, \
- .wrapper_name = "nvv4l2", \
- .pix_fmts =(const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, \
+ .p.wrapper_name = "nvv4l2", \
+ .p.pix_fmts =(const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, \
AV_PIX_FMT_NV12, \
AV_PIX_FMT_NONE }, \
};
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index dc09236e0a..fad54868e3 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -28,7 +28,7 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
-#include "internal.h"
+#include "codec_internal.h"
#include "libavutil/imgutils.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
@@ -1455,20 +1455,20 @@ static const AVOption options_hevc[] = {
#define NVV4L2_ENC(NAME, ID) \
NVV4L2_ENC_CLASS(NAME) \
- AVCodec ff_##NAME##_nvv4l2_encoder = { \
- .name = #NAME "_nvv4l2" , \
- .long_name = NULL_IF_CONFIG_SMALL(#NAME " NVV4L2 HW encoder for Tegra"), \
- .type = AVMEDIA_TYPE_VIDEO, \
- .id = ID, \
+ const FFCodec ff_##NAME##_nvv4l2_encoder = { \
+ .p.name = #NAME "_nvv4l2" , \
+ .p.long_name = NULL_IF_CONFIG_SMALL(#NAME " NVV4L2 HW encoder for Tegra"), \
+ .p.type = AVMEDIA_TYPE_VIDEO, \
+ .p.id = ID, \
.priv_data_size = sizeof(nvv4l2EncodeContext), \
.init = nvv4l2enc_init, \
.close = nvv4l2enc_close, \
.encode2 = nvv4l2enc_encode, \
- .priv_class = &nvv4l2_##NAME##_enc_class, \
- .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \
+ .p.priv_class = &nvv4l2_##NAME##_enc_class, \
+ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \
.defaults = defaults, \
- .wrapper_name = "nvv4l2", \
- .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, \
+ .p.wrapper_name = "nvv4l2", \
+ .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, \
AV_PIX_FMT_YUV444P, \
AV_PIX_FMT_NV12, \
AV_PIX_FMT_P010, \
--
2.25.1

@ -0,0 +1,92 @@
From 23ccbf1d6a5494c7d79e8df2c74f02358e8df7d4 Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 03:08:02 +0100
Subject: [PATCH 23/39] codecs: nvv4l2: comment structs redefined in nvv4l2.h
---
libavcodec/nvv4l2_ext_utils.h | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/libavcodec/nvv4l2_ext_utils.h b/libavcodec/nvv4l2_ext_utils.h
index 007306ccc5..04a2ee1c79 100644
--- a/libavcodec/nvv4l2_ext_utils.h
+++ b/libavcodec/nvv4l2_ext_utils.h
@@ -178,7 +178,7 @@ enum v4l2_mpeg_video_h265_profile {
#define V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY 0x10
#define V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD 0x20
#define V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE 0x40
-struct v4l2_ctrl_h264_sps {
+/* struct v4l2_ctrl_h264_sps {
__u8 profile_idc;
__u8 constraint_set_flags;
__u8 level_idc;
@@ -197,7 +197,7 @@ struct v4l2_ctrl_h264_sps {
__u16 pic_width_in_mbs_minus1;
__u16 pic_height_in_map_units_minus1;
__u8 flags;
-};
+}; */
#define V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE 0x0001
#define V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT 0x0002
@@ -207,7 +207,7 @@ struct v4l2_ctrl_h264_sps {
#define V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT 0x0020
#define V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE 0x0040
#define V4L2_H264_PPS_FLAG_PIC_SCALING_MATRIX_PRESENT 0x0080
-struct v4l2_ctrl_h264_pps {
+/* struct v4l2_ctrl_h264_pps {
__u8 pic_parameter_set_id;
__u8 seq_parameter_set_id;
__u8 num_slice_groups_minus1;
@@ -219,19 +219,19 @@ struct v4l2_ctrl_h264_pps {
__s8 chroma_qp_index_offset;
__s8 second_chroma_qp_index_offset;
__u8 flags;
-};
+}; */
-struct v4l2_ctrl_h264_scaling_matrix {
+/* struct v4l2_ctrl_h264_scaling_matrix {
__u8 scaling_list_4x4[6][16];
__u8 scaling_list_8x8[6][64];
-};
+}; */
-struct v4l2_h264_weight_factors {
+/* struct v4l2_h264_weight_factors {
__s8 luma_weight[32];
__s8 luma_offset[32];
__s8 chroma_weight[32][2];
__s8 chroma_offset[32][2];
-};
+}; */
struct v4l2_h264_pred_weight_table {
__u8 luma_log2_weight_denom;
@@ -289,15 +289,15 @@ struct v4l2_ctrl_h264_slice_param {
If not set, this entry is unused for reference. */
#define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE 0x01
#define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM 0x02
-struct v4l2_h264_dpb_entry {
- __u32 buf_index; /**< v4l2_buffer index. */
- __u16 frame_num;
- __u16 pic_num;
+/* struct v4l2_h264_dpb_entry { */
+/* __u32 buf_index; /**< v4l2_buffer index. */
+/* __u16 frame_num;
+ __u16 pic_num; */
/** @note `v4l2_buffer.field` specifies this field. */
- __s32 top_field_order_cnt;
- __s32 bottom_field_order_cnt;
- __u8 flags; /* V4L2_H264_DPB_ENTRY_FLAG_* */
-};
+/* __s32 top_field_order_cnt;
+ __s32 bottom_field_order_cnt; */
+/* __u8 flags; /* V4L2_H264_DPB_ENTRY_FLAG_* */
+/* }; */
struct v4l2_ctrl_h264_decode_param {
__u32 num_slices;
--
2.25.1

@ -0,0 +1,68 @@
From b2f78477cf1cca514a91a4a5ecd6f93fee289f2a Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 03:32:12 +0100
Subject: [PATCH 24/39] codecs: nvv4l2: More API related changes
decoder: add internal.h header needed for ff_get_buffer
encoder: Rename AVCodecDefault to FFCodecDefault
*: use callback defines for encode/decode struct members
---
libavcodec/nvv4l2_dec.c | 3 ++-
libavcodec/nvv4l2_enc.c | 6 +++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index b56d35cf82..26e7363823 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -30,6 +30,7 @@
#include <fcntl.h>
#include <errno.h>
#include "codec_internal.h"
+#include "internal.h"
#include "libavutil/log.h"
#include "nvv4l2.h"
@@ -1211,7 +1212,7 @@ nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
.priv_data_size = sizeof(nvv4l2DecodeContext), \
.init = nvv4l2dec_init, \
.close = nvv4l2dec_close, \
- .decode = nvv4l2dec_decode, \
+ FF_CODEC_DECODE_CB(nvv4l2dec_decode) \
.flush = nvv4l2dec_flush, \
.p.priv_class = &nvv4l2_##NAME##_dec_class, \
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | \
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index fad54868e3..7f1aad1b32 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -1265,7 +1265,7 @@ nvv4l2enc_encode(AVCodecContext *avctx, AVPacket *pkt,
if (nvv4l2_encoder_get_packet(avctx, ctx, &packet))
return 0;
- ff_alloc_packet2(avctx, pkt, packet.payload_size, packet.payload_size);
+ ff_alloc_packet(avctx, pkt, packet.payload_size, packet.payload_size);
memcpy(pkt->data, packet.payload, packet.payload_size);
pkt->dts = pkt->pts = packet.pts;
@@ -1286,7 +1286,7 @@ static av_cold int nvv4l2enc_close(AVCodecContext *avctx)
return 0;
}
-static const AVCodecDefault defaults[] = {
+static const FFCodecDefault defaults[] = {
{ "b", "5M" },
{ "qmin", "-1" },
{ "qmax", "-1" },
@@ -1463,7 +1463,7 @@ static const AVOption options_hevc[] = {
.priv_data_size = sizeof(nvv4l2EncodeContext), \
.init = nvv4l2enc_init, \
.close = nvv4l2enc_close, \
- .encode2 = nvv4l2enc_encode, \
+ FF_CODEC_ENCODE_CB(nvv4l2enc_encode), \
.p.priv_class = &nvv4l2_##NAME##_enc_class, \
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, \
.defaults = defaults, \
--
2.25.1

@ -0,0 +1,25 @@
From 157e6cffa1464b66809d32b5d511f62882068dcd Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 03:42:59 +0100
Subject: [PATCH 25/39] codecs: nvv4l2: add encode.h header needed for
ff_alloc_packet
---
libavcodec/nvv4l2_enc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index 7f1aad1b32..6c3d276f31 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -29,6 +29,7 @@
#include <fcntl.h>
#include <errno.h>
#include "codec_internal.h"
+#include "encode.h"
#include "libavutil/imgutils.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
--
2.25.1

@ -0,0 +1,25 @@
From c1447a426afa49ed23384f2b135ea9748c98d568 Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 03:45:50 +0100
Subject: [PATCH 26/39] codecs: nvv4l2: fix missing comma in FFCodec struct
---
libavcodec/nvv4l2_dec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 26e7363823..fe54883522 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1212,7 +1212,7 @@ nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
.priv_data_size = sizeof(nvv4l2DecodeContext), \
.init = nvv4l2dec_init, \
.close = nvv4l2dec_close, \
- FF_CODEC_DECODE_CB(nvv4l2dec_decode) \
+ FF_CODEC_DECODE_CB(nvv4l2dec_decode), \
.flush = nvv4l2dec_flush, \
.p.priv_class = &nvv4l2_##NAME##_dec_class, \
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | \
--
2.25.1

@ -0,0 +1,26 @@
From cd758dad831c7f7f115b0fcc8646e241d338c800 Mon Sep 17 00:00:00 2001
From: Azkali Manad <a.ffcc7@gmail.com>
Date: Wed, 25 Jan 2023 03:52:47 +0100
Subject: [PATCH 27/39] codecs: nvv4l2: remove second size argument as it is
unneeded
---
libavcodec/nvv4l2_enc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index 6c3d276f31..39a179b255 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -1266,7 +1266,7 @@ nvv4l2enc_encode(AVCodecContext *avctx, AVPacket *pkt,
if (nvv4l2_encoder_get_packet(avctx, ctx, &packet))
return 0;
- ff_alloc_packet(avctx, pkt, packet.payload_size, packet.payload_size);
+ ff_alloc_packet(avctx, pkt, packet.payload_size);
memcpy(pkt->data, packet.payload, packet.payload_size);
pkt->dts = pkt->pts = packet.pts;
--
2.25.1

@ -0,0 +1,56 @@
From 1340217cbcc40418337225ca12d1d0f5dd82e682 Mon Sep 17 00:00:00 2001
From: Azkali <a.ffcc7@gmail.com>
Date: Thu, 26 Jan 2023 03:44:07 +0100
Subject: [PATCH 28/39] codecs: nvv4l2: undo struct commenting due to
OpenBuildServic weirdness
---
libavcodec/nvv4l2_ext_utils.h | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/libavcodec/nvv4l2_ext_utils.h b/libavcodec/nvv4l2_ext_utils.h
index 04a2ee1c79..4fb66583de 100644
--- a/libavcodec/nvv4l2_ext_utils.h
+++ b/libavcodec/nvv4l2_ext_utils.h
@@ -226,12 +226,12 @@ enum v4l2_mpeg_video_h265_profile {
__u8 scaling_list_8x8[6][64];
}; */
-/* struct v4l2_h264_weight_factors {
+struct v4l2_h264_weight_factors {
__s8 luma_weight[32];
__s8 luma_offset[32];
__s8 chroma_weight[32][2];
__s8 chroma_offset[32][2];
-}; */
+};
struct v4l2_h264_pred_weight_table {
__u8 luma_log2_weight_denom;
@@ -289,15 +289,15 @@ struct v4l2_ctrl_h264_slice_param {
If not set, this entry is unused for reference. */
#define V4L2_H264_DPB_ENTRY_FLAG_ACTIVE 0x01
#define V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM 0x02
-/* struct v4l2_h264_dpb_entry { */
-/* __u32 buf_index; /**< v4l2_buffer index. */
-/* __u16 frame_num;
- __u16 pic_num; */
+struct v4l2_h264_dpb_entry {
+ __u32 buf_index; /**< v4l2_buffer index. */
+ __u16 frame_num;
+ __u16 pic_num;
/** @note `v4l2_buffer.field` specifies this field. */
-/* __s32 top_field_order_cnt;
- __s32 bottom_field_order_cnt; */
-/* __u8 flags; /* V4L2_H264_DPB_ENTRY_FLAG_* */
-/* }; */
+ __s32 top_field_order_cnt;
+ __s32 bottom_field_order_cnt;
+ __u8 flags; /* V4L2_H264_DPB_ENTRY_FLAG_* */
+};
struct v4l2_ctrl_h264_decode_param {
__u32 num_slices;
--
2.25.1

@ -0,0 +1,222 @@
From a3ee3863be6268abaf331af6a12892feeb8797c6 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sun, 2 Jul 2023 03:18:28 +0000
Subject: [PATCH 29/39] fftools: improve nvv4l2 enforcing Now non-supported
pixel formats are properly handled. Additionally, all edge cases are handled
even if the codec is forced by user.
---
fftools/ffmpeg_demux.c | 92 ++++++++++++++++++++++++++++++------------
fftools/ffplay.c | 74 +++++++++++++++++++++++++--------
2 files changed, 124 insertions(+), 42 deletions(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 938ec09e3d..3b58c18f3d 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -500,40 +500,80 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
{
char *codec_name = NULL;
+#if CONFIG_NVV4L2
+ int nvv4l2_pix_fmt_ok;
+#endif
MATCH_PER_STREAM_OPT(codec_names, str, codec_name, s, st);
- if (codec_name) {
- const AVCodec *codec = find_codec_or_die(NULL, codec_name, st->codecpar->codec_type, 0);
- st->codecpar->codec_id = codec->id;
- if (recast_media && st->codecpar->codec_type != codec->type)
- st->codecpar->codec_type = codec->type;
- return codec;
- } else {
- if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
- hwaccel_id == HWACCEL_GENERIC &&
- hwaccel_device_type != AV_HWDEVICE_TYPE_NONE) {
- const AVCodec *c;
- void *i = NULL;
-
- while ((c = av_codec_iterate(&i))) {
- const AVCodecHWConfig *config;
- if (c->id != st->codecpar->codec_id ||
- !av_codec_is_decoder(c))
- continue;
+#if CONFIG_NVV4L2
+ nvv4l2_pix_fmt_ok = st->codecpar->format == AV_PIX_FMT_NONE ||
+ st->codecpar->format == AV_PIX_FMT_NV12 ||
+ st->codecpar->format == AV_PIX_FMT_YUV420P;
- for (int j = 0; config = avcodec_get_hw_config(c, j); j++) {
- if (config->device_type == hwaccel_device_type) {
- av_log(NULL, AV_LOG_VERBOSE, "Selecting decoder '%s' because of requested hwaccel method %s\n",
- c->name, av_hwdevice_get_type_name(hwaccel_device_type));
- return c;
- }
- }
- }
+ /* Force software decoding if codec name not defined and pixel format not supported. */
+ if (!codec_name && !nvv4l2_pix_fmt_ok) {
+ switch (st->codecpar->codec_id) {
+ case AV_CODEC_ID_H264:
+ codec_name = (char *)"h264";
+ break;
+ case AV_CODEC_ID_HEVC:
+ codec_name = (char *)"hevc";
+ break;
+ case AV_CODEC_ID_MPEG2VIDEO:
+ codec_name = (char *)"mpeg2video";
+ break;
+ case AV_CODEC_ID_MPEG4:
+ codec_name = (char *)"mpeg4";
+ break;
+ case AV_CODEC_ID_VP8:
+ codec_name = (char *)"vp8";
+ break;
+ case AV_CODEC_ID_VP9:
+ codec_name = (char *)"vp9";
+ break;
}
+ }
+#endif
+ if (!codec_name)
return avcodec_find_decoder(st->codecpar->codec_id);
+
+#if CONFIG_NVV4L2
+ if (nvv4l2_pix_fmt_ok) {
+ /* Force hardware decoding if pixel format supported. */
+ if (strcmp(codec_name, "h264") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "hevc") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg2video") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg4") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp8") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp9") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ } else {
+ /* Force software decoding if pixel format not supported. */
+ if (strcmp(codec_name, "h264_nvv4l2") == 0)
+ codec_name = (char *)"h264";
+ else if (strcmp(codec_name, "hevc_nvv4l2") == 0)
+ codec_name = (char *)"hevc";
+ else if (strcmp(codec_name, "mpeg2video_nvv4l2") == 0)
+ codec_name = (char *)"mpeg2video";
+ else if (strcmp(codec_name, "mpeg4_nvv4l2") == 0)
+ codec_name = (char *)"mpeg4";
+ else if (strcmp(codec_name, "vp8_nvv4l2") == 0)
+ codec_name = (char *)"vp8";
+ else if (strcmp(codec_name, "vp9_nvv4l2") == 0)
+ codec_name = (char *)"vp9";
}
+#endif
+
+ const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
+ st->codecpar->codec_id = codec->id;
+ return codec;
}
static int guess_input_channel_layout(InputStream *ist)
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 86f8425a15..a02f2a06a7 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -2570,6 +2570,9 @@ static int stream_component_open(VideoState *is, int stream_index)
AVChannelLayout ch_layout = { 0 };
int ret = 0;
int stream_lowres = lowres;
+#if CONFIG_NVV4L2
+ int nvv4l2_pix_fmt_ok;
+#endif
if (stream_index < 0 || stream_index >= ic->nb_streams)
return -1;
@@ -2593,26 +2596,65 @@ static int stream_component_open(VideoState *is, int stream_index)
#if CONFIG_NVV4L2
/* Reset requested decoder in order to enforce NVV4L2 if possible. */
+ nvv4l2_pix_fmt_ok = avctx->pix_fmt == AV_PIX_FMT_NONE ||
+ avctx->pix_fmt == AV_PIX_FMT_NV12 ||
+ avctx->pix_fmt == AV_PIX_FMT_YUV420P;
+
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && forced_codec_name) {
- if (strcmp(forced_codec_name, "h264") == 0)
- forced_codec_name = NULL;
- else if (strcmp(forced_codec_name, "hevc") == 0)
- forced_codec_name = NULL;
- else if (strcmp(forced_codec_name, "mpeg2video") == 0)
- forced_codec_name = NULL;
- else if (strcmp(forced_codec_name, "mpeg4") == 0)
- forced_codec_name = NULL;
- else if (strcmp(forced_codec_name, "vp8") == 0)
- forced_codec_name = NULL;
- else if (strcmp(forced_codec_name, "vp9") == 0 &&
- avctx->pix_fmt != AV_PIX_FMT_YUV420P10) {
- forced_codec_name = NULL;
+ if (nvv4l2_pix_fmt_ok) {
+ /* Force hardware decoding if pixel format supported. */
+ if (strcmp(forced_codec_name, "h264") == 0)
+ forced_codec_name = NULL;
+ else if (strcmp(forced_codec_name, "hevc") == 0)
+ forced_codec_name = NULL;
+ else if (strcmp(forced_codec_name, "mpeg2video") == 0)
+ forced_codec_name = NULL;
+ else if (strcmp(forced_codec_name, "mpeg4") == 0)
+ forced_codec_name = NULL;
+ else if (strcmp(forced_codec_name, "vp8") == 0)
+ forced_codec_name = NULL;
+ else if (strcmp(forced_codec_name, "vp9") == 0)
+ forced_codec_name = NULL;
+ } else {
+ /* Force software decoding if pixel format not supported. */
+ if (strcmp(forced_codec_name, "h264_nvv4l2") == 0)
+ forced_codec_name = (char *)"h264";
+ else if (strcmp(forced_codec_name, "hevc_nvv4l2") == 0)
+ forced_codec_name = (char *)"hevc";
+ else if (strcmp(forced_codec_name, "mpeg2video_nvv4l2") == 0)
+ forced_codec_name = (char *)"mpeg2video";
+ else if (strcmp(forced_codec_name, "mpeg4_nvv4l2") == 0)
+ forced_codec_name = (char *)"mpeg4";
+ else if (strcmp(forced_codec_name, "vp8_nvv4l2") == 0)
+ forced_codec_name = (char *)"vp8";
+ else if (strcmp(forced_codec_name, "vp9_nvv4l2") == 0)
+ forced_codec_name = (char *)"vp9";
}
}
- /* NVV4L2 does not support VP9 with YUV420P10. */
- if (!forced_codec_name && avctx->pix_fmt == AV_PIX_FMT_YUV420P10)
- forced_codec_name = "vp9";
+ /* Force software decoding if codec name not defined and pixel format not supported. */
+ if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !forced_codec_name && !nvv4l2_pix_fmt_ok) {
+ switch (avctx->codec_id) {
+ case AV_CODEC_ID_H264:
+ forced_codec_name = (char *)"h264";
+ break;
+ case AV_CODEC_ID_HEVC:
+ forced_codec_name = (char *)"hevc";
+ break;
+ case AV_CODEC_ID_MPEG2VIDEO:
+ forced_codec_name = (char *)"mpeg2video";
+ break;
+ case AV_CODEC_ID_MPEG4:
+ forced_codec_name = (char *)"mpeg4";
+ break;
+ case AV_CODEC_ID_VP8:
+ forced_codec_name = (char *)"vp8";
+ break;
+ case AV_CODEC_ID_VP9:
+ forced_codec_name = (char *)"vp9";
+ break;
+ }
+ }
#endif
if (forced_codec_name)
--
2.25.1

@ -0,0 +1,41 @@
From 8014b28095f1b3d2559387b7b8aca93b034561cf Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sun, 2 Jul 2023 03:23:34 +0000
Subject: [PATCH 30/39] nvv4l2: add yuv420p10 support NVENC supports yuv420p10
as p010.
---
libavcodec/nvv4l2_enc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libavcodec/nvv4l2_enc.c b/libavcodec/nvv4l2_enc.c
index 39a179b255..b979c93051 100644
--- a/libavcodec/nvv4l2_enc.c
+++ b/libavcodec/nvv4l2_enc.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021-2022, CTCaer <ctcaer@gmail.com>
+ * Copyright (c) 2021-2023, CTCaer <ctcaer@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -1130,6 +1130,8 @@ static int nvv4l2enc_init(AVCodecContext *avctx)
case AV_PIX_FMT_NV12:
pix_fmt = V4L2_PIX_FMT_NV12M;
break;
+ case AV_PIX_FMT_YUV420P10:
+ avctx->pix_fmt = AV_PIX_FMT_P010;
case AV_PIX_FMT_P010:
pix_fmt = V4L2_PIX_FMT_P010M;
break;
@@ -1473,6 +1475,7 @@ static const AVOption options_hevc[] = {
AV_PIX_FMT_YUV444P, \
AV_PIX_FMT_NV12, \
AV_PIX_FMT_P010, \
+ AV_PIX_FMT_YUV420P10, \
AV_PIX_FMT_NONE }, \
};
--
2.25.1

@ -0,0 +1,127 @@
From ded4a192fa894768db5d1ab0e90256f28a87b834 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sun, 2 Jul 2023 03:49:48 +0000
Subject: [PATCH 31/39] nvv4l2: handle unsupported pixel formats NVDEC only
supports YUV420 and NV12 formats.
If a consumer starting nvv4l2 decoder with unsupported pixel format force
software decoding.
If consumer does not probe info of the media, the pixel format will be empty.
If the actual pixel format is not supported it will result in no image.
Since the normal procedure of using libavcodec is to just open a codec via id,
without passing extra info or data, except if on purpose, there's no way to
mitigate that issue in a non-invasive way.
---
libavcodec/avcodec.c | 2 --
libavcodec/nvv4l2_dec.c | 58 ++++++++++++++++++++++++++++++++++++++---
2 files changed, 54 insertions(+), 6 deletions(-)
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index fb1362290f..773d0457b3 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -355,8 +355,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
goto free_and_end;
}
}
- if (codec->priv_class)
- av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class);
end:
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index fe54883522..0b91cf0eba 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021-2022, CTCaer <ctcaer@gmail.com>
+ * Copyright (c) 2021-2023, CTCaer <ctcaer@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -31,10 +31,18 @@
#include <errno.h>
#include "codec_internal.h"
#include "internal.h"
+#include "decode.h"
+#include "thread.h"
#include "libavutil/log.h"
+#include "libavutil/pixdesc.h"
+#include "libavutil/opt.h"
#include "nvv4l2.h"
+extern AVCodec ff_h264_decoder;
+extern AVCodec ff_hevc_decoder;
+extern AVCodec ff_vp9_decoder;
+
/*
** Output plane format support:
** S264 (H264 Encoded Slice bitstream)
@@ -978,6 +986,48 @@ static NvCodingType map_avcodec_id(enum AVCodecID id)
return NvVideoCodec_UNDEFINED;
}
+static int nvv4l2dec_codec_fallback(AVCodecContext *avctx)
+{
+ av_log(avctx, AV_LOG_WARNING, "Falling back to software decoding.\n");
+
+ switch (avctx->codec_id) {
+ case AV_CODEC_ID_H264:
+ avctx->codec = &ff_h264_decoder;
+ break;
+ case AV_CODEC_ID_HEVC:
+ avctx->codec = &ff_hevc_decoder;
+ break;
+ case AV_CODEC_ID_VP9:
+ avctx->codec = &ff_vp9_decoder;
+ break;
+ default:
+ av_log(avctx, AV_LOG_ERROR, "Unsupported codec fallback!\n");
+ return AVERROR_BUG;
+ }
+
+ av_opt_free(avctx->priv_data);
+
+ if (avctx->codec->priv_data_size > 0) {
+ avctx->priv_data = av_mallocz(avctx->codec->priv_data_size);
+ if (!avctx->priv_data)
+ return AVERROR(ENOMEM);
+ }
+
+ if (HAVE_THREADS
+ && !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
+ ff_thread_init(avctx);
+ }
+ if (!HAVE_THREADS && !(avctx->codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS))
+ avctx->thread_count = 1;
+
+ if (avctx->codec->priv_class) {
+ *(const AVClass **)avctx->priv_data = avctx->codec->priv_class;
+ av_opt_set_defaults(avctx->priv_data);
+ }
+
+ return avctx->codec->init(avctx);
+}
+
static int nvv4l2dec_init(AVCodecContext *avctx)
{
nvv4l2DecodeContext *nvv4l2_ctx = avctx->priv_data;
@@ -1000,9 +1050,9 @@ static int nvv4l2dec_init(AVCodecContext *avctx)
pix_fmt = V4L2_PIX_FMT_NV12M;
break;
default:
- av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format %d!\n",
- avctx->pix_fmt);
- return AVERROR_BUG;
+ av_log(avctx, AV_LOG_WARNING, "Unsupported pixel format %s!\n",
+ av_get_pix_fmt_name(avctx->pix_fmt));
+ return nvv4l2dec_codec_fallback(avctx);
}
nvv4l2_ctx->ctx = nvv4l2_create_decoder(avctx, nv_codec_type, pix_fmt);
--
2.25.1

@ -0,0 +1,92 @@
From 9e860a0aeab0b955e627de763e9494457942222d Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Mon, 3 Jul 2023 14:19:46 +0000
Subject: [PATCH 32/39] nvv4l2: allow 10-bit HEVC The only hw support for
10-bit on NVDEC 2nd/3rd gen is on HEVC. H264 does not support it on main
spec, so as per previous changes it fallbacks to software decoding. VP8 codec
does not support it at all. The only out of spec non-support on hw decoding
is on VP9.
---
fftools/ffmpeg_demux.c | 4 ++++
fftools/ffplay.c | 4 ++++
libavcodec/nvv4l2_dec.c | 9 ++++++++-
libavcodec/nvv4l2_ext_utils.h | 6 ++++++
4 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 3b58c18f3d..f791c3a898 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -510,6 +510,10 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
nvv4l2_pix_fmt_ok = st->codecpar->format == AV_PIX_FMT_NONE ||
st->codecpar->format == AV_PIX_FMT_NV12 ||
st->codecpar->format == AV_PIX_FMT_YUV420P;
+ if (st->codecpar->codec_id == AV_CODEC_ID_HEVC)
+ nvv4l2_pix_fmt_ok = st->codecpar->format == AV_PIX_FMT_YUV420P10LE ||
+ st->codecpar->format == AV_PIX_FMT_P010 ||
+ nvv4l2_pix_fmt_ok;
/* Force software decoding if codec name not defined and pixel format not supported. */
if (!codec_name && !nvv4l2_pix_fmt_ok) {
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index a02f2a06a7..bbd5761115 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -2599,6 +2599,10 @@ static int stream_component_open(VideoState *is, int stream_index)
nvv4l2_pix_fmt_ok = avctx->pix_fmt == AV_PIX_FMT_NONE ||
avctx->pix_fmt == AV_PIX_FMT_NV12 ||
avctx->pix_fmt == AV_PIX_FMT_YUV420P;
+ if (avctx->codec_id == AV_CODEC_ID_HEVC)
+ nvv4l2_pix_fmt_ok = avctx->pix_fmt == AV_PIX_FMT_YUV420P10LE ||
+ avctx->pix_fmt == AV_PIX_FMT_P010 ||
+ nvv4l2_pix_fmt_ok;
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && forced_codec_name) {
if (nvv4l2_pix_fmt_ok) {
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 0b91cf0eba..79116ec858 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1042,13 +1042,20 @@ static int nvv4l2dec_init(AVCodecContext *avctx)
switch (avctx->pix_fmt) {
case AV_PIX_FMT_NONE:
- avctx->pix_fmt = AV_PIX_FMT_YUV420P;
case AV_PIX_FMT_YUV420P:
+ avctx->pix_fmt = AV_PIX_FMT_YUV420P;
pix_fmt = V4L2_PIX_FMT_YUV420M;
break;
case AV_PIX_FMT_NV12:
pix_fmt = V4L2_PIX_FMT_NV12M;
break;
+ case AV_PIX_FMT_YUV420P10LE:
+ case AV_PIX_FMT_P010:
+ if (avctx->codec_id == AV_CODEC_ID_HEVC) {
+ avctx->pix_fmt = AV_PIX_FMT_YUV420P;
+ pix_fmt = V4L2_PIX_FMT_YUV420M;
+ break;
+ }
default:
av_log(avctx, AV_LOG_WARNING, "Unsupported pixel format %s!\n",
av_get_pix_fmt_name(avctx->pix_fmt));
diff --git a/libavcodec/nvv4l2_ext_utils.h b/libavcodec/nvv4l2_ext_utils.h
index 4fb66583de..142b429336 100644
--- a/libavcodec/nvv4l2_ext_utils.h
+++ b/libavcodec/nvv4l2_ext_utils.h
@@ -2144,6 +2144,12 @@ typedef enum
NvBufferColorFormat_ARGB32 = 18, /* BSP 32.5.0 and up: 19 */
/** BT.601 colorspace - Y/CbCr 4:2:0 10-bit multi-planar. */
NvBufferColorFormat_NV12_10LE = 19, /* BSP 32.5.0 and up: 20 */
+ /** BT.709 colorspace - Y/CbCr 4:2:0 10-bit multi-planar. */
+ NvBufferColorFormat_NV12_10LE_709 = 20, /* BSP 32.5.0 and up: 21 */
+ /** BT.709_ER colorspace - Y/CbCr 4:2:0 10-bit multi-planar. */
+ NvBufferColorFormat_NV12_10LE_709_ER = 21, /* BSP 32.5.0 and up: 22 */
+ /** BT.2020 colorspace - Y/CbCr 4:2:0 10-bit multi-planar. */
+ NvBufferColorFormat_NV12_10LE_2020 = 22, /* BSP 32.5.0 and up: 23 */
/** BT.709 colorspace - Y/CbCr 4:2:0 multi-planar. */
NvBufferColorFormat_NV12_709 = 29, /* BSP 32.5.0 and up: 30 */
/** BT.709 colorspace - Y/CbCr ER 4:2:0 multi-planar. */
--
2.25.1

@ -0,0 +1,29 @@
From b4c1473d7a0db6efb31e5d5f5c7b483736ac593a Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Thu, 18 Jan 2024 17:48:52 -0500
Subject: [PATCH 33/39] codecs: nvv4l2: more rename AVCodec to fit API renames
---
libavcodec/nvv4l2_dec.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 79116ec858..a92b191b24 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -39,9 +39,9 @@
#include "nvv4l2.h"
-extern AVCodec ff_h264_decoder;
-extern AVCodec ff_hevc_decoder;
-extern AVCodec ff_vp9_decoder;
+extern const FFCodec ff_h264_decoder;
+extern const FFCodec ff_hevc_decoder;
+extern const FFCodec ff_vp9_decoder;
/*
** Output plane format support:
--
2.25.1

@ -0,0 +1,58 @@
From 08ff68f2fb3175157a46a8dfb880f58870ac6b9e Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Wed, 17 Jan 2024 22:17:55 -0500
Subject: [PATCH 34/39] codecs: nvv4l2: more API renames
---
libavcodec/nvv4l2_dec.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index a92b191b24..5ccea0830b 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -988,6 +988,8 @@ static NvCodingType map_avcodec_id(enum AVCodecID id)
static int nvv4l2dec_codec_fallback(AVCodecContext *avctx)
{
+ const FFCodec *codec2;
+
av_log(avctx, AV_LOG_WARNING, "Falling back to software decoding.\n");
switch (avctx->codec_id) {
@@ -1005,10 +1007,12 @@ static int nvv4l2dec_codec_fallback(AVCodecContext *avctx)
return AVERROR_BUG;
}
+ codec2 = ffcodec(avctx->codec);
+
av_opt_free(avctx->priv_data);
- if (avctx->codec->priv_data_size > 0) {
- avctx->priv_data = av_mallocz(avctx->codec->priv_data_size);
+ if (codec2->priv_data_size > 0) {
+ avctx->priv_data = av_mallocz(codec2->priv_data_size);
if (!avctx->priv_data)
return AVERROR(ENOMEM);
}
@@ -1017,7 +1021,7 @@ static int nvv4l2dec_codec_fallback(AVCodecContext *avctx)
&& !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
ff_thread_init(avctx);
}
- if (!HAVE_THREADS && !(avctx->codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS))
+ if (!HAVE_THREADS && !(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS))
avctx->thread_count = 1;
if (avctx->codec->priv_class) {
@@ -1025,7 +1029,7 @@ static int nvv4l2dec_codec_fallback(AVCodecContext *avctx)
av_opt_set_defaults(avctx->priv_data);
}
- return avctx->codec->init(avctx);
+ return codec2->init(avctx);
}
static int nvv4l2dec_init(AVCodecContext *avctx)
--
2.25.1

@ -0,0 +1,82 @@
From e508318655d72876d29df374c19c7edcf3134997 Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Wed, 17 Jan 2024 23:45:11 -0500
Subject: [PATCH 35/39] codecs: nvv4l2: find_codec_or_die to find_codec API
rename and rework
---
fftools/ffmpeg_demux.c | 47 +++++++++++++++++++++++++++---------------
1 file changed, 30 insertions(+), 17 deletions(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index f791c3a898..17b5d63bf8 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -540,24 +540,33 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
}
#endif
- if (!codec_name)
- return avcodec_find_decoder(st->codecpar->codec_id);
+ if (!codec_name) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ }
#if CONFIG_NVV4L2
if (nvv4l2_pix_fmt_ok) {
/* Force hardware decoding if pixel format supported. */
- if (strcmp(codec_name, "h264") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
- else if (strcmp(codec_name, "hevc") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
- else if (strcmp(codec_name, "mpeg2video") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
- else if (strcmp(codec_name, "mpeg4") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
- else if (strcmp(codec_name, "vp8") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
- else if (strcmp(codec_name, "vp9") == 0)
- return avcodec_find_decoder(st->codecpar->codec_id);
+ if (strcmp(codec_name, "h264") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ } else if (strcmp(codec_name, "hevc") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ } else if (strcmp(codec_name, "mpeg2video") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ } else if (strcmp(codec_name, "mpeg4") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ } else if (strcmp(codec_name, "vp8") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ } else if (strcmp(codec_name, "vp9") == 0) {
+ *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
+ return 0;
+ }
} else {
/* Force software decoding if pixel format not supported. */
if (strcmp(codec_name, "h264_nvv4l2") == 0)
@@ -575,9 +584,13 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
}
#endif
- const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
- st->codecpar->codec_id = codec->id;
- return codec;
+ int ret = find_codec(NULL, codec_name, st->codecpar->codec_type, 0, pcodec);
+ if (ret < 0)
+ return ret;
+ st->codecpar->codec_id = (*pcodec)->id;
+ if (recast_media && st->codecpar->codec_type != (*pcodec)->type)
+ st->codecpar->codec_type = (*pcodec)->type;
+ return 0;
}
static int guess_input_channel_layout(InputStream *ist)
--
2.25.1

@ -0,0 +1,30 @@
From 8d78a510e496ea473ea7392b828e17165bb6b6ac Mon Sep 17 00:00:00 2001
From: theofficialgman <28281419+theofficialgman@users.noreply.github.com>
Date: Sun, 21 Jan 2024 02:01:10 -0500
Subject: [PATCH 36/39] codecs: nvv4l2: update for ABI rework
---
libavcodec/nvv4l2_dec.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 5ccea0830b..27e06da1b5 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1175,12 +1175,11 @@ static int nvv4l2dec_close(AVCodecContext *avctx)
}
static int
-nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
+nvv4l2dec_decode(AVCodecContext *avctx, AVFrame *avframe, int *got_frame,
AVPacket *avpkt)
{
nvv4l2DecodeContext *nvv4l2_ctx = avctx->priv_data;
nvv4l2_ctx_t *ctx = nvv4l2_ctx->ctx;
- AVFrame *avframe = (AVFrame *)data;
NvFrame _nvframe = { 0 };
int processed_size = 0;
int buf_index = -1;
--
2.25.1

@ -0,0 +1,31 @@
From a18c43b29c220fa020f9cac2522608b2b4cba954 Mon Sep 17 00:00:00 2001
From: azkali <a.ffcc7@gmail.com>
Date: Tue, 23 Jan 2024 18:28:29 +0100
Subject: [PATCH 37/39] Revert "codecs: nvv4l2: update for ABI rework"
This reverts commit 8d78a510e496ea473ea7392b828e17165bb6b6ac.
---
libavcodec/nvv4l2_dec.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index 27e06da1b5..5ccea0830b 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1175,11 +1175,12 @@ static int nvv4l2dec_close(AVCodecContext *avctx)
}
static int
-nvv4l2dec_decode(AVCodecContext *avctx, AVFrame *avframe, int *got_frame,
+nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
AVPacket *avpkt)
{
nvv4l2DecodeContext *nvv4l2_ctx = avctx->priv_data;
nvv4l2_ctx_t *ctx = nvv4l2_ctx->ctx;
+ AVFrame *avframe = (AVFrame *)data;
NvFrame _nvframe = { 0 };
int processed_size = 0;
int buf_index = -1;
--
2.25.1

@ -0,0 +1,83 @@
From 4279fc32ea8b6da4a36aaf0b616408ad1fe4dcea Mon Sep 17 00:00:00 2001
From: azkali <a.ffcc7@gmail.com>
Date: Tue, 23 Jan 2024 18:35:39 +0100
Subject: [PATCH 38/39] Revert "codecs: nvv4l2: find_codec_or_die to find_codec
API rename and rework"
This reverts commit e508318655d72876d29df374c19c7edcf3134997.
---
fftools/ffmpeg_demux.c | 47 +++++++++++++++---------------------------
1 file changed, 17 insertions(+), 30 deletions(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index 17b5d63bf8..f791c3a898 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -540,33 +540,24 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
}
#endif
- if (!codec_name) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- }
+ if (!codec_name)
+ return avcodec_find_decoder(st->codecpar->codec_id);
#if CONFIG_NVV4L2
if (nvv4l2_pix_fmt_ok) {
/* Force hardware decoding if pixel format supported. */
- if (strcmp(codec_name, "h264") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- } else if (strcmp(codec_name, "hevc") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- } else if (strcmp(codec_name, "mpeg2video") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- } else if (strcmp(codec_name, "mpeg4") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- } else if (strcmp(codec_name, "vp8") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- } else if (strcmp(codec_name, "vp9") == 0) {
- *pcodec = avcodec_find_decoder(st->codecpar->codec_id);
- return 0;
- }
+ if (strcmp(codec_name, "h264") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "hevc") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg2video") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "mpeg4") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp8") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
+ else if (strcmp(codec_name, "vp9") == 0)
+ return avcodec_find_decoder(st->codecpar->codec_id);
} else {
/* Force software decoding if pixel format not supported. */
if (strcmp(codec_name, "h264_nvv4l2") == 0)
@@ -584,13 +575,9 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
}
#endif
- int ret = find_codec(NULL, codec_name, st->codecpar->codec_type, 0, pcodec);
- if (ret < 0)
- return ret;
- st->codecpar->codec_id = (*pcodec)->id;
- if (recast_media && st->codecpar->codec_type != (*pcodec)->type)
- st->codecpar->codec_type = (*pcodec)->type;
- return 0;
+ const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
+ st->codecpar->codec_id = codec->id;
+ return codec;
}
static int guess_input_channel_layout(InputStream *ist)
--
2.25.1

@ -0,0 +1,25 @@
From a8e8a2151948790f9702802aa87b65bbf5049ac1 Mon Sep 17 00:00:00 2001
From: azkali <a.ffcc7@gmail.com>
Date: Tue, 23 Jan 2024 18:50:41 +0100
Subject: [PATCH 39/39] fftools/ffmpeg: set find_codec_or_die logctx to NULL
---
fftools/ffmpeg_demux.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c
index f791c3a898..975a9f5f17 100644
--- a/fftools/ffmpeg_demux.c
+++ b/fftools/ffmpeg_demux.c
@@ -575,7 +575,7 @@ static const AVCodec *choose_decoder(const OptionsContext *o, AVFormatContext *s
}
#endif
- const AVCodec *codec = find_codec_or_die(codec_name, st->codecpar->codec_type, 0);
+ const AVCodec *codec = find_codec_or_die(NULL, codec_name, st->codecpar->codec_type, 0);
st->codecpar->codec_id = codec->id;
return codec;
}
--
2.25.1

@ -0,0 +1,43 @@
From 91e53cd8349f6a6a74ef7bc9498052467345cff4 Mon Sep 17 00:00:00 2001
From: CTCaer <ctcaer@gmail.com>
Date: Sat, 27 Jan 2024 00:34:28 +0000
Subject: [PATCH] nvv4l2: do not override key_frame Some apps are managing this
by replacing the ffmpeg get buffer function. Additionally, some badly coded
apps use that for actually starting outputting to screen or framebuffer, even
though the expected frames from the decoder are always full frames.
---
libavcodec/nvv4l2_dec.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/libavcodec/nvv4l2_dec.c b/libavcodec/nvv4l2_dec.c
index b2ac349201a..751f4379e89 100644
--- a/libavcodec/nvv4l2_dec.c
+++ b/libavcodec/nvv4l2_dec.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021-2023, CTCaer <ctcaer@gmail.com>
+ * Copyright (c) 2021-2024, CTCaer <ctcaer@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -1236,12 +1236,13 @@ nvv4l2dec_decode(AVCodecContext *avctx, void *data, int *got_frame,
if (_nvframe.pts != AV_NOPTS_VALUE) {
avframe->pts = _nvframe.pts;
} else {
- avframe->pts = _nvframe.pts;
+ /*! NOTE: Investigate if setting reordered_opaque to pts instead
+ * is better for no-pts streams compatibility.
+ */
+ avframe->pts = AV_NOPTS_VALUE;
avframe->reordered_opaque = _nvframe.user_pts;
}
- avframe->key_frame = 0;
-
avctx->coded_width = _nvframe.width;
avctx->coded_height = _nvframe.height;
avctx->width = _nvframe.width;
--
GitLab

@ -0,0 +1,25 @@
diff -Naur ffmpeg-6.0/configure ffmpeg-6.0-2/configure
--- ffmpeg-6.0/configure 2023-06-04 21:55:16.653155167 +0200
+++ ffmpeg-6.0-2/configure 2023-06-04 22:01:08.003471635 +0200
@@ -3131,8 +3131,8 @@
qsvvpp_select="qsv"
vaapi_encode_deps="vaapi"
v4l2_m2m_deps="linux_videodev2_h sem_timedwait"
-nvv4l2_deps="libv4l2 pthreads linux_videodev2_h"
-nvv4l2_extralibs="-lnvbuf_utils"
+nvv4l2_deps="pthreads linux_videodev2_h"
+nvv4l2_extralibs="-lnvbuf_utils -lv4l2"
bilateral_cuda_filter_deps="ffnvcodec"
bilateral_cuda_filter_deps_any="cuda_nvcc cuda_llvm"
@@ -7069,9 +7069,7 @@
check_type "ffnvcodec/dynlink_cuda.h ffnvcodec/dynlink_cuviddec.h" "CUVIDAV1PICPARAMS"
fi
-enabled nvv4l2 && add_ldflags '-L/usr/lib/aarch64-linux-gnu/tegra' \
- && check_headers linux/videodev2.h \
- && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl
+enabled nvv4l2 && add_ldflags "-L/usr/lib/aarch64-linux-gnu/tegra"
enabled amf &&
check_cpp_condition amf "AMF/core/Version.h" \

@ -6,12 +6,15 @@ PKG_NAME="libva"
PKG_VERSION="2.20.0"
PKG_SHA256="117f8d658a5fc9ea406ca80a3eb4ae1d70b15a54807c9ed77199c812bed73b60"
PKG_ARCH="x86_64"
[ "${DISTRO}" = "Lakka" ] && PKG_ARCH+=" i386" || true
PKG_LICENSE="GPL"
PKG_SITE="https://01.org/linuxmedia"
PKG_URL="https://github.com/intel/libva/archive/${PKG_VERSION}.tar.gz"
PKG_LONGDESC="Libva is an implementation for VA-API (VIdeo Acceleration API)."
if [ "${DISTRO}" = "Lakka" ]; then
PKG_ARCH+=" i386"
fi
if [ "${DISPLAYSERVER}" = "x11" ]; then
PKG_DEPENDS_TARGET="toolchain libX11 libXext libXfixes libdrm"
DISPLAYSERVER_LIBVA="-Dwith_x11=yes -Dwith_glx=no -Dwith_wayland=no"

@ -0,0 +1,288 @@
From fd67cc3fbd3a362297afc7cc8d75560df62708de Mon Sep 17 00:00:00 2001
From: Jay Yang <jay.yang@intel.com>
Date: Fri, 21 Apr 2023 13:10:52 +0800
Subject: [PATCH] Fix GCC13 build errors
Fix #1639
Fix #1640
Fix #1641
Signed-off-by: Jay Yang <jay.yang@intel.com>
---
.../Xe_M/Xe_XPM/hw/mhw_vebox_xe_xpm.h | 21 +++++++++++--------
.../hal/codechal_encode_csc_ds_mdf_g12.h | 1 +
.../agnostic/gen12/hw/mhw_vebox_g12_X.h | 1 +
.../gen12/hw/vdbox/mhw_vdbox_avp_generic.h | 19 -----------------
.../gen9/codec/hal/codechal_encode_avc_g9.h | 1 +
.../codec/hal/codechal_fei_hevc_g9_skl.cpp | 3 ---
.../shared/mediacopy/media_copy_xe_hpm.h | 1 +
.../shared/mediacopy/media_copy_xe_xpm_base.h | 1 +
.../shared/mediacopy/media_copy_xe_xpm_plus.h | 1 +
.../hucitf/decode_huc_packet_creator_g12.h | 4 ++++
.../m12_0/shared/mediacopy/media_copy_m12_0.h | 1 +
.../mediacopy/media_copy_xe_lpm_plus_base.h | 1 +
.../bufferMgr/encode_tracked_buffer_queue.cpp | 5 +++++
.../bufferMgr/encode_tracked_buffer_queue.h | 2 +-
.../common/shared/media_debug_serializer.h | 1 +
.../media_scalability_multipipe.cpp | 2 +-
.../scalability/media_scalability_multipipe.h | 2 +-
17 files changed, 33 insertions(+), 34 deletions(-)
diff --git a/media_driver/agnostic/Xe_M/Xe_XPM/hw/mhw_vebox_xe_xpm.h b/media_driver/agnostic/Xe_M/Xe_XPM/hw/mhw_vebox_xe_xpm.h
index b6b86a54ed..ae9a4be096 100644
--- a/media_driver/agnostic/Xe_M/Xe_XPM/hw/mhw_vebox_xe_xpm.h
+++ b/media_driver/agnostic/Xe_M/Xe_XPM/hw/mhw_vebox_xe_xpm.h
@@ -110,15 +110,6 @@ class MhwVeboxInterfaceXe_Xpm: public MhwVeboxInterfaceG12
PMOS_COMMAND_BUFFER pCmdBuffer,
PMHW_VEBOX_SURFACE_STATE_CMD_PARAMS pVeboxSurfaceStateCmdParams) override;
- void SetVeboxSurfaces(
- PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
- PMHW_VEBOX_SURFACE_PARAMS pDerivedSurfaceParam,
- PMHW_VEBOX_SURFACE_PARAMS pSkinScoreSurfaceParam,
- mhw_vebox_xe_xpm::VEBOX_SURFACE_STATE_CMD *pVeboxSurfaceState,
- bool bIsOutputSurface,
- bool bDIEnable,
- bool b3DlutEnable);
-
MOS_STATUS FindVeboxGpuNodeToUse(
PMHW_VEBOX_GPUNODE_LIMIT pGpuNodeLimit) override;
@@ -144,6 +135,18 @@ class MhwVeboxInterfaceXe_Xpm: public MhwVeboxInterfaceG12
uint32_t m_indexofVebox = 0;
uint32_t m_numofVebox = 1;
uint32_t m_usingSfc = 0;
+
+ using MhwVeboxInterfaceG12::SetVeboxSurfaces;
+
+ void SetVeboxSurfaces(
+ PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
+ PMHW_VEBOX_SURFACE_PARAMS pDerivedSurfaceParam,
+ PMHW_VEBOX_SURFACE_PARAMS pSkinScoreSurfaceParam,
+ mhw_vebox_xe_xpm::VEBOX_SURFACE_STATE_CMD *pVeboxSurfaceState,
+ bool bIsOutputSurface,
+ bool bDIEnable,
+ bool b3DlutEnable);
+
};
#endif // __MHW_VEBOX_XE_XPM_H__
diff --git a/media_driver/agnostic/gen12/codec/hal/codechal_encode_csc_ds_mdf_g12.h b/media_driver/agnostic/gen12/codec/hal/codechal_encode_csc_ds_mdf_g12.h
index 3dd276a748..ce21993da7 100644
--- a/media_driver/agnostic/gen12/codec/hal/codechal_encode_csc_ds_mdf_g12.h
+++ b/media_driver/agnostic/gen12/codec/hal/codechal_encode_csc_ds_mdf_g12.h
@@ -202,6 +202,7 @@ class CodechalEncodeCscDsMdfG12 : public CodechalEncodeCscDsG12
MOS_STATUS CscKernel(
KernelParams* pParams) override;
+ using CodechalEncodeCscDsG12::InitKernelStateCsc;
MOS_STATUS InitKernelStateCsc(KernelParams* pParams);
MOS_STATUS SetupKernelArgsCSC(CmKernel *cmKrnCSCDS, SurfaceParamsCscMdf* surfaceparams);
MOS_STATUS SetCurbeCscforMDF(CMRT_UMD::vector<uint32_t, 10> & curbeData);
diff --git a/media_driver/agnostic/gen12/hw/mhw_vebox_g12_X.h b/media_driver/agnostic/gen12/hw/mhw_vebox_g12_X.h
index 64e2ffe462..d0c2d6ca5e 100644
--- a/media_driver/agnostic/gen12/hw/mhw_vebox_g12_X.h
+++ b/media_driver/agnostic/gen12/hw/mhw_vebox_g12_X.h
@@ -336,6 +336,7 @@ class MhwVeboxInterfaceG12 : public MhwVeboxInterfaceGeneric<mhw_vebox_g12_X>
MOS_STATUS ValidateVeboxScalabilityConfig();
#endif
+protected:
void SetVeboxSurfaces(
PMHW_VEBOX_SURFACE_PARAMS pSurfaceParam,
PMHW_VEBOX_SURFACE_PARAMS pDerivedSurfaceParam,
diff --git a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_avp_generic.h b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_avp_generic.h
index ae1bd88cb2..fb2fc0fe86 100644
--- a/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_avp_generic.h
+++ b/media_driver/agnostic/gen12/hw/vdbox/mhw_vdbox_avp_generic.h
@@ -95,24 +95,5 @@ class MhwVdboxAvpInterfaceGeneric : public MhwVdboxAvpInterface
return eStatus;
}
-
- MOS_STATUS AddAvpBsdObjectCmd(
- PMOS_COMMAND_BUFFER cmdBuffer,
- MhwVdboxAvpBsdParams *params)
- {
- MOS_STATUS eStatus = MOS_STATUS_SUCCESS;
-
- MHW_FUNCTION_ENTER;
- MHW_MI_CHK_NULL(m_osInterface);
-
- typename TAvpCmds::AVP_BSD_OBJECT_CMD cmd;
-
- cmd.DW1.IndirectBsdDataLength = params->m_bsdDataLength;
- cmd.DW2.IndirectDataStartAddress = params->m_bsdDataStartOffset;
-
- MHW_MI_CHK_STATUS(m_osInterface->pfnAddCommand(cmdBuffer, &cmd, sizeof(cmd)));
-
- return eStatus;
- }
};
#endif
diff --git a/media_driver/agnostic/gen9/codec/hal/codechal_encode_avc_g9.h b/media_driver/agnostic/gen9/codec/hal/codechal_encode_avc_g9.h
index f981860946..a735bb46cf 100644
--- a/media_driver/agnostic/gen9/codec/hal/codechal_encode_avc_g9.h
+++ b/media_driver/agnostic/gen9/codec/hal/codechal_encode_avc_g9.h
@@ -5668,6 +5668,7 @@ class CodechalEncodeAvcEncG9 : public CodechalEncodeAvcEnc
MOS_STATUS GetStatusReport(
void *status,
uint16_t numStatus) override;
+ using CodechalEncodeAvcEnc::GetStatusReport;
#if USE_CODECHAL_DEBUG_TOOL
protected:
diff --git a/media_driver/agnostic/gen9_skl/codec/hal/codechal_fei_hevc_g9_skl.cpp b/media_driver/agnostic/gen9_skl/codec/hal/codechal_fei_hevc_g9_skl.cpp
index 8da01da3f0..59c0480653 100644
--- a/media_driver/agnostic/gen9_skl/codec/hal/codechal_fei_hevc_g9_skl.cpp
+++ b/media_driver/agnostic/gen9_skl/codec/hal/codechal_fei_hevc_g9_skl.cpp
@@ -6410,9 +6410,6 @@ MOS_STATUS CodechalFeiHevcStateG9Skl::FreeEncResources()
m_cmKernelMap.clear();
- CmKernelMapType deallocator;
- m_cmKernelMap.swap(deallocator);
-
#endif
return eStatus;
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_copy_xe_hpm.h b/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_copy_xe_hpm.h
index b43087e93c..23bf56075c 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_copy_xe_hpm.h
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_HPM/shared/mediacopy/media_copy_xe_hpm.h
@@ -50,6 +50,7 @@ class MediaCopyState_Xe_Hpm: public MediaCopyBaseState
//!
//! \brief init function.
virtual MOS_STATUS Initialize( PMOS_INTERFACE osInterface, MhwInterfaces *mhwInterfaces);
+ using MediaCopyBaseState::Initialize;
//!
//! \brief render format support.
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_copy_xe_xpm_base.h b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_copy_xe_xpm_base.h
index 8075553c0d..14c291a4a1 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_copy_xe_xpm_base.h
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_base/shared/mediacopy/media_copy_xe_xpm_base.h
@@ -49,6 +49,7 @@ class MediaCopyStateXe_Xpm_Base: public MediaCopyBaseState
//!
//! \brief init function.
virtual MOS_STATUS Initialize( PMOS_INTERFACE osInterface, MhwInterfaces *mhwInterfaces);
+ using MediaCopyBaseState::Initialize;
//!
//! \brief surface copy pre process.
diff --git a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_copy_xe_xpm_plus.h b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_copy_xe_xpm_plus.h
index 99f7bfe525..e24f42963f 100644
--- a/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_copy_xe_xpm_plus.h
+++ b/media_driver/media_softlet/agnostic/Xe_M/Xe_XPM_plus/shared/mediacopy/media_copy_xe_xpm_plus.h
@@ -50,6 +50,7 @@ class MediaCopyStateXe_Xpm_Plus: public MediaCopyBaseState
//!
//! \brief init function.
virtual MOS_STATUS Initialize(PMOS_INTERFACE osInterface, MhwInterfaces *mhwInterfaces);
+ using MediaCopyBaseState::Initialize;
//!
//! \brief render format support.
diff --git a/media_driver/media_softlet/agnostic/gen12_base/codec/hal/dec/shared/hucitf/decode_huc_packet_creator_g12.h b/media_driver/media_softlet/agnostic/gen12_base/codec/hal/dec/shared/hucitf/decode_huc_packet_creator_g12.h
index 682c9352bd..1774ff6dcf 100644
--- a/media_driver/media_softlet/agnostic/gen12_base/codec/hal/dec/shared/hucitf/decode_huc_packet_creator_g12.h
+++ b/media_driver/media_softlet/agnostic/gen12_base/codec/hal/dec/shared/hucitf/decode_huc_packet_creator_g12.h
@@ -48,6 +48,10 @@ class HucPacketCreatorG12 : public HucPacketCreatorBase
MediaPipeline *pipeline,
MediaTask *task,
CodechalHwInterface *hwInterface);
+
+ using HucPacketCreatorBase::CreateHucCopyPkt;
+ using HucPacketCreatorBase::CreateProbUpdatePkt;
+ using HucPacketCreatorBase::CreateStreamOutInterface;
MEDIA_CLASS_DEFINE_END(decode__HucPacketCreatorG12)
};
diff --git a/media_driver/media_softlet/agnostic/m12/m12_0/shared/mediacopy/media_copy_m12_0.h b/media_driver/media_softlet/agnostic/m12/m12_0/shared/mediacopy/media_copy_m12_0.h
index 25e5972b7d..7e267011ad 100644
--- a/media_driver/media_softlet/agnostic/m12/m12_0/shared/mediacopy/media_copy_m12_0.h
+++ b/media_driver/media_softlet/agnostic/m12/m12_0/shared/mediacopy/media_copy_m12_0.h
@@ -51,6 +51,7 @@ class MediaCopyStateM12_0: public MediaCopyBaseState
//!
//! \brief init function.
virtual MOS_STATUS Initialize( PMOS_INTERFACE osInterface, MhwInterfaces *mhwInterfaces);
+ using MediaCopyBaseState::Initialize;
//!
//! \brief render format support.
diff --git a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_copy_xe_lpm_plus_base.h b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_copy_xe_lpm_plus_base.h
index 1f3c14ff44..5775a81732 100644
--- a/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_copy_xe_lpm_plus_base.h
+++ b/media_softlet/agnostic/Xe_M_plus/Xe_LPM_plus_base/shared/mediacopy/media_copy_xe_lpm_plus_base.h
@@ -48,6 +48,7 @@ class MediaCopyStateXe_Lpm_Plus_Base: public MediaCopyBaseState
//!
//! \brief init function.
virtual MOS_STATUS Initialize(PMOS_INTERFACE osInterface, MhwInterfacesNext *mhwInterfaces);
+ using MediaCopyBaseState::Initialize;
//!
//! \brief render format support.
diff --git a/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.cpp b/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.cpp
index ccd75e3d97..5c53583b02 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.cpp
+++ b/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.cpp
@@ -154,4 +154,9 @@ MOS_STATUS BufferQueue::DestoryResource(void* resource)
return MOS_STATUS_SUCCESS;
}
+void BufferQueue::SetResourceType(ResourceType resType)
+{
+ m_resourceType = resType;
+}
+
}
\ No newline at end of file
diff --git a/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.h b/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.h
index 6ef9424e8c..4aa0898c4d 100644
--- a/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.h
+++ b/media_softlet/agnostic/common/codec/hal/enc/shared/bufferMgr/encode_tracked_buffer_queue.h
@@ -87,7 +87,7 @@ class BufferQueue
//!
bool SafeToDestory();
- void SetResourceType(ResourceType resType) { m_resourceType = resType; }
+ void SetResourceType(ResourceType resType);
protected:
//!
diff --git a/media_softlet/agnostic/common/shared/media_debug_serializer.h b/media_softlet/agnostic/common/shared/media_debug_serializer.h
index 77e5fced2d..90d64ad24f 100644
--- a/media_softlet/agnostic/common/shared/media_debug_serializer.h
+++ b/media_softlet/agnostic/common/shared/media_debug_serializer.h
@@ -34,6 +34,7 @@
#include <string>
#include <typeinfo>
#include <type_traits>
+#include <stdint.h>
#include "media_class_trace.h"
template <typename T, typename = void>
diff --git a/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.cpp b/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.cpp
index 06b107b6bb..fe08b67aeb 100644
--- a/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.cpp
+++ b/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.cpp
@@ -29,7 +29,7 @@
#include "media_scalability_multipipe.h"
-MOS_STATUS MediaScalabilityMultiPipe::UpdateState()
+MOS_STATUS MediaScalabilityMultiPipe::UpdateState(void *statePars)
{
return MOS_STATUS_SUCCESS;
}
diff --git a/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.h b/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.h
index 9f848dcde5..81d3f334b3 100644
--- a/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.h
+++ b/media_softlet/agnostic/common/shared/scalability/media_scalability_multipipe.h
@@ -50,7 +50,7 @@ class MediaScalabilityMultiPipe: public MediaScalability
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
- virtual MOS_STATUS UpdateState();
+ virtual MOS_STATUS UpdateState(void *statePars);
protected:
inline bool IsFirstPipe() { return (m_currentPipe == 0) ? true : false; }

@ -49,7 +49,7 @@ pre_configure_target() {
# bluez fails to build in subdirs
cd ${PKG_BUILD}
rm -rf .${TARGET_NAME}
sed -i -e "s|<policy user=\"%DISTRO%\">|<policy user=\"${DISTRO}\">|" src/bluetooth.conf
export LIBS="-lncurses"
}
@ -71,7 +71,7 @@ post_makeinstall_target() {
echo "[General]" > ${INSTALL}/etc/bluetooth/input.conf
echo "ClassicBondedOnly=false" >> ${INSTALL}/etc/bluetooth/input.conf
if [ "${DISTRO}" = "Lakka" ]; then
if [ "${DISTRO}" = "Lakka" ] || [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
sed -i $INSTALL/etc/bluetooth/main.conf \
-e "s|^#FastConnectable.*|FastConnectable=true|g" \
-e "s|^# Privacy =.*|Privacy = device|g"

@ -0,0 +1,38 @@
diff -Naur bluez-5.66/src/bluetooth.conf bluez-5.66-2/src/bluetooth.conf
--- bluez-5.66/src/bluetooth.conf 2024-02-02 04:33:35.200222390 +0100
+++ bluez-5.66-2/src/bluetooth.conf 2024-02-02 04:35:47.442699056 +0100
@@ -6,6 +6,34 @@
<busconfig>
<!-- ../system.conf have denied everything, so we just punch some holes -->
+ <policy user="%DISTRO%">
+ <allow own="org.bluez"/>
+ <allow send_destination="org.bluez"/>
+ <allow send_interface="org.bluez.AdvertisementMonitor1"/>
+ <allow send_interface="org.bluez.Agent1"/>
+ <allow send_interface="org.bluez.MediaEndpoint1"/>
+ <allow send_interface="org.bluez.MediaPlayer1"/>
+ <allow send_interface="org.bluez.Profile1"/>
+ <allow send_interface="org.bluez.GattCharacteristic1"/>
+ <allow send_interface="org.bluez.GattDescriptor1"/>
+ <allow send_interface="org.bluez.LEAdvertisement1"/>
+ <allow send_interface="org.freedesktop.DBus.ObjectManager"/>
+ <allow send_interface="org.freedesktop.DBus.Properties"/>
+ <allow send_interface="org.mpris.MediaPlayer2.Player"/>
+
+ <allow own="org.bluez.obex"/>
+ <allow send_destination="org.bluez.obex"/>
+ <allow send_interface="org.bluez.obex.Agent1"/>
+ <allow send_interface="org.bluez.obex.Client1"/>
+ <allow send_interface="org.bluez.obex.Session1"/>
+ <allow send_interface="org.bluez.obex.Transfer1"/>
+ <allow send_interface="org.bluez.obex.ObjectPush1"/>
+ <allow send_interface="org.bluez.obex.FileTransfer1"/>
+ <allow send_interface="org.bluez.obex.PhonebookAccess1"/>
+ <allow send_interface="org.bluez.obex.Synchronization1"/>
+ <allow send_interface="org.bluez.obex.MessageAccess1"/>
+ <allow send_interface="org.bluez.obex.Message1"/>
+ </policy>
<policy user="root">
<allow own="org.bluez"/>

@ -52,10 +52,23 @@ else
PKG_CONFIGURE_OPTS_TARGET+=" --disable-wireguard"
fi
if [ "${WIRELESS_DAEMON}" = "wpa_supplicant" ]; then
PKG_CONFIGURE_OPTS_TARGET="${PKG_CONFIGURE_OPTS_TARGET//--disable-wifi/}"
PKG_CONFIGURE_OPTS_TARGET="${PKG_CONFIGURE_OPTS_TARGET//--enable-iwd/}"
PKG_CONFIGURE_OPTS_TARGET+=" --enable-wifi --disable-iwd WPASUPPLICANT=/usr/bin/wpa_supplicant"
PKG_DEPENDS_TARGET="${PKG_DEPENDS_TARGET//iwd/}"
PKG_DEPENDS_TARGET+=" wpa_supplicant"
fi
PKG_MAKE_OPTS_TARGET="storagedir=/storage/.cache/connman \
vpn_storagedir=/storage/.config/wireguard \
statedir=/run/connman"
pre_configure_target() {
sed -i -e "s|<policy user=\"%DISTRO%\">|<policy user=\"${DISTRO}\">|" ${PKG_BUILD}/src/connman-dbus.conf
}
post_configure_target() {
libtool_remove_rpath libtool
}
@ -89,10 +102,14 @@ post_makeinstall_target() {
post_install() {
add_user system x 430 430 "service" "/var/run/connman" "/bin/sh"
add_group system 430
add_group system 430 ${DISTRO}
enable_service connman.service
if [ "${WIREGUARD_SUPPORT}" = "yes" ]; then
enable_service connman-vpn.service
fi
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
echo chmod u+s ${BUILD}/image/system/usr/bin/connmanctl >> ${FAKEROOT_SCRIPT}
fi
}

@ -0,0 +1,18 @@
diff -Naur connman-24180d1243bf005c721be6f9d8d6da67bb669c55/src/connman-dbus.conf connman-24180d1243bf005c721be6f9d8d6da67bb669c55-2/src/connman-dbus.conf
--- connman-24180d1243bf005c721be6f9d8d6da67bb669c55/src/connman-dbus.conf 2024-02-02 04:49:53.238565581 +0100
+++ connman-24180d1243bf005c721be6f9d8d6da67bb669c55-2/src/connman-dbus.conf 2024-02-02 04:52:06.209049700 +0100
@@ -1,6 +1,14 @@
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
+ <policy user="%DISTRO%">
+ <allow own="net.connman"/>
+ <allow send_destination="net.connman"/>
+ <allow send_interface="net.connman.Agent"/>
+ <allow send_interface="net.connman.Counter"/>
+ <allow send_interface="net.connman.Notification"/>
+ </policy>
+
<policy user="root">
<allow own="net.connman"/>
<allow send_destination="net.connman"/>

@ -170,6 +170,10 @@ post_install() {
add_user root "${ROOT_PASSWORD}" 0 0 "Root User" "/storage" "/bin/sh"
add_group root 0
add_group users 100
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
add_user "${DISTRO}" "${DISTRO}" 1000 1000 "${DISTRO} User" "/storage" "/sbin/nologin"
add_group "${DISTRO}" 1000 ${DISTRO}
fi
add_user nobody x 65534 65534 "Nobody" "/" "/bin/sh"
add_group nogroup 65534

@ -557,9 +557,9 @@ mount_flash() {
if [ ! "$FAT32_BOOT" = "yes" ]; then
mount_part "$boot" "/flash" "ro,noatime"
else
mount_part "$boot" "/flash" "rw,noatime"
mount_part "$boot" "/flash" "rw,noatime,umask=0000"
fi
if [ -f /flash/post-flash.sh ]; then
. /flash/post-flash.sh
fi
@ -987,7 +987,7 @@ prepare_sysroot() {
# Do init tasks to bring up system
if [ ! "$(cat /proc/cmdline | grep -s odin-workaround)" ]; then
if [ ! "$(cat /proc/cmdline | grep -s show_kernel_messages)" ]; then
# hide kernel log messages on console
echo '1 4 1 7' > /proc/sys/kernel/printk
fi

@ -40,8 +40,8 @@ post_makeinstall_target() {
post_install() {
add_user dbus x 81 81 "System message bus" "/" "/bin/sh"
add_group dbus 81
add_group netdev 497
add_group dbus 81 ${DISTRO}
add_group netdev 497 ${DISTRO}
echo "chmod 4750 ${INSTALL}/usr/lib/dbus/dbus-daemon-launch-helper" >> ${FAKEROOT_SCRIPT}
echo "chown 0:81 ${INSTALL}/usr/lib/dbus/dbus-daemon-launch-helper" >> ${FAKEROOT_SCRIPT}

@ -0,0 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="libgudev"
PKG_VERSION="235"
PKG_SHA256="36360e7629b762b0cc85ef302b88a7cea96b0156fd426274815b155c83732c59"
PKG_LICENSE="GPL"
PKG_SITE="http://www.linux-usb.org/"
PKG_URL="https://github.com/GNOME/libgudev/archive/refs/tags/${PKG_VERSION}.zip"
PKG_DEPENDS_TARGET="toolchain systemd"
post_makeinstall_target() {
rm -rf ${INSTALL}/usr/lib/pkgconfig
rm -rf ${INSTALL}/usr/include
}

@ -0,0 +1,12 @@
diff -Naur mergerfs-2.24.0/Makefile mergerfs-2.24.0-2/Makefile
--- mergerfs-2.24.0/Makefile 2023-11-02 23:58:29.373436471 +0100
+++ mergerfs-2.24.0-2/Makefile 2023-11-02 23:59:14.686439139 +0100
@@ -12,7 +12,7 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-PKGCONFIG = $(shell which pkg-config)
+PKGCONFIG := $(shell which pkg-config)
GIT = $(shell which git)
TAR = $(shell which tar)
MKDIR = $(shell which mkdir)

@ -243,6 +243,8 @@ post_makeinstall_target() {
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/shutdown
ln -sf /usr/bin/systemctl ${INSTALL}/usr/sbin/telinit
chmod u+s ${INSTALL}/usr/bin/systemctl
# strip
debug_strip ${INSTALL}/usr
@ -277,26 +279,20 @@ post_install() {
add_group systemd-network 193
add_user systemd-network x 193 193 "systemd-network" "/" "/bin/sh"
add_group systemd-oom 194
add_user systemd-oom x 194 194 "systemd Userspace OOM Killer" "/" "/bin/false"
add_group adm 4
add_group tty 5
add_group disk 6
add_group lp 7
add_group audio 63 pipewire,${DISTRO}
add_group cdrom 11 ${DISTRO}
add_group dialout 18 ${DISTRO}
add_group disk 6 ${DISTRO}
add_group floppy 19 ${DISTRO}
add_group kmem 9
add_group wheel 10
add_group cdrom 11
add_group dialout 18
add_group floppy 19
add_group utmp 22
add_group kvm 10
add_group lp 7
add_group render 12
add_group tape 33
add_group kvm 36
add_group video 39 pipewire
add_group audio 63 pipewire
add_group input 104
add_group render 105
add_group sgx 106
add_group tty 5
add_group video 39 pipewire,${DISTRO}
add_group utmp 22
add_group input 199 ${DISTRO}
enable_service machine-id.service
enable_service debugconfig.service
@ -307,4 +303,11 @@ post_install() {
enable_service network-base.service
enable_service systemd-timesyncd.service
enable_service systemd-timesyncd-setup.service
#Add service to properly remount flash partition when using fat32-boot kernel command line option.
enable_service remount_flash_ro.service
if [ "${PROJECT}" = "L4T" -a "${DEVICE}" = "Switch" ]; then
echo chmod u+s ${BUILD}/image/system/usr/bin/systemctl >> ${FAKEROOT_SCRIPT}
fi
}

@ -0,0 +1,12 @@
[Unit]
Description=Remount /flash as RO
ConditionKernelCommandLine=fat32-boot
DefaultDependencies=no
After=final.target
[Service]
Type=oneshot
ExecStart=mount -o remount,ro /flash
[Install]
WantedBy=final.target

@ -0,0 +1,23 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2020-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="upower"
PKG_VERSION="v1.90.0"
PKG_SHA256="cb6028f095824422c59d98b3c9903e2eda2a96fc613f11824f0b6379de7efa2e"
PKG_LICENSE="GPL"
PKG_SITE="http://www.linux-usb.org/"
PKG_URL="https://gitlab.freedesktop.org/upower/upower/-/archive/${PKG_VERSION}/upower-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain systemd glib dbus libusb libgudev"
PKG_LONGDESC="Upower is a modular hardware abstraction layer designed for use in Linux systems that is designed to simplify device management and replace the current monolithic Linux HAL. Upower includes the ability to enumerate system devices and send notifications when hardware is added or removed from the computer system."
PKG_MESON_OPTS_TARGET="-Dgtk-doc=false -Dman=false"
post_makeinstall_target() {
rm -rf ${INSTALL}/usr/lib/pkgconfig
rm -rf ${INSTALL}/usr/include
}
post_install() {
enable_service upower.service
}

@ -22,5 +22,5 @@ makeinstall_target() {
mkdir -p ${INSTALL}/usr/{lib,bin}
cp -v xdotool ${INSTALL}/usr/bin
cp -v libxdo* ${INSTALL}/usr/lib
cp -v libxdo* ${TOOLCHAIN}/aarch64-libreelec-linux-gnueabi/sysroot/usr/lib/
cp -v libxdo* ${TOOLCHAIN}/aarch64-libreelec-linux-gnu/sysroot/usr/lib/
}

@ -3,7 +3,7 @@ set timeout="5"
menuentry "Lakka" {
set gfxpayload=keep
linux /lakka/KERNEL boot=/dev/mmcblk0p1 BOOT_IMAGE=/lakka/KERNEL SYSTEM_IMAGE=/lakka/SYSTEM console=ttyMSM0,115200n8 clk_ignore_unused pd_ignore_unused nofsck fat32-boot firmware.class_path="/usr/lib/firmware" net.ifnames=1 odin-workaround
linux /lakka/KERNEL boot=/dev/mmcblk0p1 BOOT_IMAGE=/lakka/KERNEL SYSTEM_IMAGE=/lakka/SYSTEM console=ttyMSM0,115200n8 clk_ignore_unused pd_ignore_unused nofsck fat32-boot firmware.class_path="/usr/lib/firmware" net.ifnames=1 show_kernel_messages
devicetree /lakka/sdm845-ayn-odin.dtb
}

@ -42,9 +42,7 @@ if [ $CPU_SCHEDUTIL_GOV -eq 1 ]; then
fi
fi
if [ ! "$(cat /proc/cmdline | grep performance_mode=1)" = "" ]; then
for scaling_governor in \
/sys/devices/system/cpu/cpu[0-7]/cpufreq/scaling_governor; do
echo performance > $scaling_governor
done
# Fix permissions for OLED panel
if [ -e "/sys/devices/50000000.host1x/tegradc.0/panel_color_mode" ]; then
chmod 0666 /sys/devices/50000000.host1x/tegradc.0/panel_color_mode
fi

@ -215,7 +215,7 @@ CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_DEBUG is not set
CONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
@ -306,13 +306,11 @@ CONFIG_BLOCK=y
CONFIG_BLK_DEV_BSG=y
# CONFIG_BLK_DEV_BSGLIB is not set
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_THROTTLING=y
# CONFIG_BLK_CMDLINE_PARSER is not set
#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_AIX_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
@ -392,7 +390,7 @@ CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCI_DOMAINS_GENERIC=y
CONFIG_PCI_SYSCALL=y
CONFIG_PCIEPORTBUS=y
# CONFIG_PCIEPORTBUS is not set
CONFIG_PCIEAER=y
CONFIG_PCIE_ECRC=y
CONFIG_PCIEASPM=y
@ -545,12 +543,11 @@ CONFIG_ZPOOL=y
CONFIG_ZBUD=y
# CONFIG_Z3FOLD is not set
CONFIG_ZSMALLOC=y
# CONFIG_PGTABLE_MAPPING is not set
CONFIG_PGTABLE_MAPPING=y
# CONFIG_ZSMALLOC_STAT is not set
CONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_IDLE_PAGE_TRACKING is not set
CONFIG_ZONE_DEVICE=y
CONFIG_DEVICE_PRIVATE=y
# CONFIG_DEVICE_PUBLIC is not set
CONFIG_FRAME_VECTOR=y
CONFIG_ARCH_MEMORY_PROBE=y
@ -560,9 +557,9 @@ CONFIG_SECCOMP=y
CONFIG_KEXEC=y
# CONFIG_XEN is not set
CONFIG_FORCE_MAX_ZONEORDER=11
CONFIG_HARDEN_BRANCH_PREDICTOR=y
# CONFIG_HARDEN_BRANCH_PREDICTOR is not set
# CONFIG_UNMAP_KERNEL_AT_EL0 is not set
CONFIG_ARM64_SSBD=y
# CONFIG_ARM64_SSBD is not set
CONFIG_ARMV8_DEPRECATED=y
CONFIG_SWP_EMULATION=y
CONFIG_CP15_BARRIER_EMULATION=y
@ -574,7 +571,6 @@ CONFIG_SETEND_EMULATION=y
#
# CONFIG_ARM64_HW_AFDBM is not set
# CONFIG_ARM64_PAN is not set
CONFIG_ARM64_LSE_ATOMICS=y
# CONFIG_ARM64_VHE is not set
#
@ -646,6 +642,8 @@ CONFIG_SERROR_HANDLER=y
# CPU Idle
#
CONFIG_CPU_IDLE=y
# CONFIG_CPU_IDLE_TEGRA18X is not set
# CONFIG_CPU_IDLE_TEGRA19X is not set
CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE_GOV_MENU=y
@ -655,8 +653,6 @@ CONFIG_DT_IDLE_STATES=y
# ARM CPU Idle Drivers
#
CONFIG_ARM_CPUIDLE=y
CONFIG_CPU_IDLE_TEGRA18X=y
CONFIG_CPU_IDLE_TEGRA19X=y
# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
#
@ -710,6 +706,7 @@ CONFIG_XFRM_USER=y
CONFIG_NET_KEY=y
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
CONFIG_WIREGUARD=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
# CONFIG_IP_FIB_TRIE_STATS is not set
@ -778,15 +775,40 @@ CONFIG_NETFILTER_ADVANCED=y
#
# Core Netfilter Configuration
#
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=m
# CONFIG_NETFILTER_NETLINK_ACCT is not set
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
# CONFIG_NF_CONNTRACK is not set
CONFIG_NF_LOG_COMMON=m
# CONFIG_NF_TABLES is not set
CONFIG_NETFILTER_XTABLES=m
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_SNMP=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
CONFIG_NF_TABLES=y
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NFT_EXTHDR=y
CONFIG_NFT_META=y
CONFIG_NFT_NUMGEN=y
CONFIG_NFT_CT=y
CONFIG_NFT_SET_RBTREE=y
CONFIG_NFT_SET_HASH=y
CONFIG_NFT_COUNTER=y
CONFIG_NFT_LOG=y
CONFIG_NFT_LIMIT=y
CONFIG_NFT_MASQ=y
CONFIG_NFT_REDIR=y
CONFIG_NFT_NAT=y
CONFIG_NFT_OBJREF=y
CONFIG_NFT_QUOTA=y
CONFIG_NFT_REJECT=y
CONFIG_NFT_COMPAT=y
CONFIG_NFT_HASH=y
CONFIG_NFT_DUP_NETDEV=y
CONFIG_NFT_FWD_NETDEV=y
#
# Xtables combined modules
@ -1086,7 +1108,6 @@ CONFIG_TEGRA_AHB=y
# Generic Driver Options
#
CONFIG_UEVENT_HELPER=y
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
@ -1245,7 +1266,7 @@ CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SKD is not set
# CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_COUNT=4
CONFIG_BLK_DEV_RAM_SIZE=8192
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@ -1357,7 +1378,6 @@ CONFIG_SENSORS_NCT1008=y
CONFIG_TSKIN_FAN_THERM_EST=y
# CONFIG_EQOS_APE_HWDEP is not set
# CONFIG_TEGRA_SKIN is not set
CONFIG_TEGRA_PCIE_EP_MEM=y
# CONFIG_NVS is not set
# CONFIG_NVS_LIGHT is not set
# CONFIG_NVS_PROXIMITY is not set
@ -1576,22 +1596,10 @@ CONFIG_WLAN=y
# CONFIG_WLAN_VENDOR_ATH is not set
# CONFIG_WLAN_VENDOR_ATMEL is not set
CONFIG_WLAN_VENDOR_BROADCOM=y
CONFIG_B43=y
CONFIG_B43_BCMA=y
CONFIG_B43_SSB=y
CONFIG_B43_BUSES_BCMA_AND_SSB=y
# CONFIG_B43_BUSES_BCMA is not set
# CONFIG_B43_BUSES_SSB is not set
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
# CONFIG_B43_PCI_AUTOSELECT is not set
# CONFIG_B43_SDIO is not set
CONFIG_B43_BCMA_PIO=y
CONFIG_B43_PIO=y
CONFIG_B43_PHY_G=y
CONFIG_B43_PHY_N=y
CONFIG_B43_PHY_LP=y
CONFIG_B43_PHY_HT=y
CONFIG_B43_LEDS=y
# CONFIG_B43_DEBUG is not set
# CONFIG_B43LEGACY is not set
CONFIG_BRCMUTIL=y
@ -1599,7 +1607,7 @@ CONFIG_BRCMUTIL=y
CONFIG_BRCMFMAC=m
CONFIG_BRCMFMAC_PROTO_BCDC=y
CONFIG_BRCMFMAC_PROTO_MSGBUF=y
CONFIG_BRCMFMAC_SDIO=y
# CONFIG_BRCMFMAC_SDIO is not set
# CONFIG_BRCMFMAC_USB is not set
CONFIG_BRCMFMAC_PCIE=y
# CONFIG_BRCM_TRACING is not set
@ -1721,8 +1729,6 @@ CONFIG_JOYCON_SERDEV_FF=y
# CONFIG_JOYSTICK_AS5011 is not set
# CONFIG_JOYSTICK_JOYDUMP is not set
CONFIG_JOYSTICK_XPAD=m
CONFIG_JOYSTICK_XPAD_FF=y
CONFIG_JOYSTICK_XPAD_LEDS=y
CONFIG_INPUT_TABLET=y
# CONFIG_TABLET_USB_ACECAD is not set
# CONFIG_TABLET_USB_AIPTEK is not set
@ -1917,7 +1923,9 @@ CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
# CONFIG_TTY_PRINTK is not set
# CONFIG_HVC_DCC is not set
# CONFIG_IPMI_HANDLER is not set
# CONFIG_HW_RANDOM is not set
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_TEGRA=n
CONFIG_HW_RANDOM_TEGRA_TRNG=y
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
@ -1990,7 +1998,7 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_RK3X is not set
# CONFIG_I2C_SIMTEC is not set
CONFIG_I2C_TEGRA=y
CONFIG_I2C_TEGRA_SLAVE=y
CONFIG_I2C_TEGRA_SLAVE=m
# CONFIG_I2C_THUNDERX is not set
# CONFIG_I2C_XILINX is not set
@ -2098,10 +2106,10 @@ CONFIG_PINCTRL_MAX77620=y
CONFIG_PINCTRL_TEGRA=y
CONFIG_PINCTRL_TEGRA210=y
CONFIG_PINCTRL_TEGRA_XUSB=y
CONFIG_PINCTRL_TEGRA186=y
# CONFIG_PINCTRL_TEGRA186 is not set
# CONFIG_PINCTRL_TEGRA186_PADCTL is not set
# CONFIG_PINCTRL_TEGRA186_DPAUX is not set
CONFIG_PINCTRL_TEGRA194=y
# CONFIG_PINCTRL_TEGRA194 is not set
# CONFIG_PINCTRL_TEGRA194_PEXCLK_PADCTL is not set
CONFIG_GPIOLIB=y
CONFIG_OF_GPIO=y
@ -2170,7 +2178,7 @@ CONFIG_GPIO_MAX77620=y
#
# USB GPIO expanders
#
CONFIG_GPIO_TEGRA186=y
# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TMPM32X_I2C is not set
CONFIG_PADCTRL=y
CONFIG_PADCTRL_GENERIC_TEGRA_IO_PAD=y
@ -2576,7 +2584,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
# CONFIG_REGULATOR_ANATOP is not set
# CONFIG_REGULATOR_DA9210 is not set
# CONFIG_REGULATOR_DA9211 is not set
# CONFIG_REGULATOR_FAN53555 is not set
CONFIG_REGULATOR_FAN53555=y
CONFIG_REGULATOR_GPIO=y
# CONFIG_REGULATOR_ISL9305 is not set
# CONFIG_REGULATOR_ISL6271A is not set
@ -2611,7 +2619,7 @@ CONFIG_REGULATOR_PWM=y
# CONFIG_REGULATOR_PMIC_OTP is not set
CONFIG_MEDIA_SUPPORT=y
CONFIG_STAGING_MEDIA=y
CONFIG_MEDIA_CEC=y
CONFIG_MEDIA_CEC_SUPPORT=y
#
# Multimedia core support
@ -2945,11 +2953,11 @@ CONFIG_TEGRA_GRHOST_NVDEC=y
CONFIG_TEGRA_GRHOST_NVENC=y
CONFIG_TEGRA_GRHOST_NVJPG=y
CONFIG_TEGRA_GRHOST_TSEC=y
CONFIG_TEGRA_GRHOST_NVCSI=y
# CONFIG_TEGRA_GRHOST_NVCSI is not set
CONFIG_TEGRA_GRHOST_SCALE=y
CONFIG_TEGRA_GRHOST_DEFAULT_TIMEOUT=10000
CONFIG_TEGRA_GRHOST_SYNC=y
CONFIG_TEGRA_GRHOST_VHOST=y
# CONFIG_TEGRA_GRHOST_VHOST is not set
# CONFIG_NVDEC_BOOTLOADER is not set
CONFIG_TSEC_USE_WPR=y
CONFIG_TEGRA_CAMERA_PLATFORM=y
@ -3324,6 +3332,7 @@ CONFIG_THRUSTMASTER_FF=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
CONFIG_HID_XINMO=y
CONFIG_HID_XPADNEO=m
CONFIG_HID_ZEROPLUS=y
# CONFIG_ZEROPLUS_FF is not set
CONFIG_HID_ZYDACRON=y
@ -3480,6 +3489,8 @@ CONFIG_USB_ULPI=y
CONFIG_USB_ULPI_VIEWPORT=y
CONFIG_DUAL_ROLE_USB_INTF=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_VBUS_DRAW=500
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set
@ -3506,13 +3517,12 @@ CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_TEGRA_XUDC=y
# CONFIG_USB_DUMMY_HCD is not set
CONFIG_USB_TEGRA_CD=y
CONFIG_USB_TEGRA_CD_NO_USERSPACE=y
CONFIG_USB_LIBCOMPOSITE=y
CONFIG_USB_F_ACM=y
CONFIG_USB_U_SERIAL=y
CONFIG_USB_F_FS=y
CONFIG_USB_CONFIGFS=y
# CONFIG_USB_CONFIGFS_SERIAL is not set
CONFIG_USB_CONFIGFS_SERIAL=y
CONFIG_USB_CONFIGFS_ACM=y
# CONFIG_USB_CONFIGFS_OBEX is not set
# CONFIG_USB_CONFIGFS_NCM is not set
@ -3572,7 +3582,7 @@ CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=32
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
CONFIG_MMC_TEST=y
CONFIG_MMC_TEST=m
# CONFIG_MMC_SIMULATE_MAX_SPEED is not set
# CONFIG_MMC_FFU is not set
# CONFIG_MMCQD_CPU_AFFINITY is not set
@ -3599,7 +3609,6 @@ CONFIG_MMC_SDHCI_TEGRA=y
# CONFIG_MMC_USDHI6ROL0 is not set
# CONFIG_MMC_TOSHIBA_PCI is not set
# CONFIG_MMC_MTK is not set
CONFIG_MMC_CQ_HCI=y
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
@ -3926,8 +3935,6 @@ CONFIG_STAGING=y
# CONFIG_SPEAKUP is not set
# CONFIG_MFD_NVEC is not set
#
# Android
#
# CONFIG_FIQ_DEBUGGER is not set
# CONFIG_FIQ_WATCHDOG is not set
@ -3945,12 +3952,7 @@ CONFIG_SYNC=y
# CONFIG_MOST is not set
# CONFIG_KS7010 is not set
# CONFIG_GREYBUS is not set
CONFIG_STEPPER=y
CONFIG_STEPPER_PCA=y
#
# STEPPER drivers
#
# CONFIG_USB_WPAN_HCD is not set
# CONFIG_GOLDFISH is not set
# CONFIG_CHROME_PLATFORMS is not set
@ -4442,7 +4444,6 @@ CONFIG_PWM_TEGRA=y
CONFIG_PWM_TEGRA_TACHOMETER=y
CONFIG_PWM_TEGRA_PMC_BLINK=y
CONFIG_PWM_TEGRA_PMC_SOFT_LED_BLINK=y
CONFIG_PWM_TEGRA_DFLL=y
CONFIG_IRQCHIP=y
CONFIG_ARM_GIC=y
CONFIG_FIQ=y
@ -4549,7 +4550,7 @@ CONFIG_HAVE_ARM_SMCCC=y
# Tegra BPMP Driver
#
CONFIG_NV_TEGRA_BPMP=y
CONFIG_BPMP_DEBUGFS_MOUNT_ON_BOOT=y
# CONFIG_BPMP_DEBUGFS_MOUNT_ON_BOOT is not set
# CONFIG_ACPI is not set
#
@ -4821,7 +4822,7 @@ CONFIG_NLS_ISO8859_1=y
CONFIG_PRINTK_TIME=y
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_BOOT_PRINTK_DELAY is not set
CONFIG_DYNAMIC_DEBUG=y
# CONFIG_DYNAMIC_DEBUG is not set
#
# Compile-time checks and compiler options
@ -4863,7 +4864,7 @@ CONFIG_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_SCAN_ON=y
# CONFIG_DEBUG_KMEMLEAK_SCAN_ON is not set
# CONFIG_DEBUG_STACK_USAGE is not set
CONFIG_DEBUG_VM=y
# CONFIG_DEBUG_VM_VMACACHE is not set
@ -5179,7 +5180,7 @@ CONFIG_TEGRA_CRYPTO_DEV=y
CONFIG_CRYPTO_DEV_TEGRA_SE=y
CONFIG_CRYPTO_DEV_TEGRA_ELLIPTIC_SE=y
CONFIG_CRYPTO_DEV_TEGRA_SE_USE_HOST1X_INTERFACE=y
# CONFIG_CRYPTO_DEV_TEGRA_VIRTUAL_SE_INTERFACE is not set
CONFIG_CRYPTO_DEV_TEGRA_VIRTUAL_SE_INTERFACE=y
# CONFIG_ASYMMETRIC_KEY_TYPE is not set
#

@ -11,15 +11,31 @@ case ${TARGET_ARCH} in
;;
esac
# remove xpadneo
ADDITIONAL_PACKAGES="${ADDITIONAL_PACKAGES//xpadneo/}"
ADDITIONAL_PACKAGES+=" switch-joycon-bluetooth-dock-configs switch-alsa-ucm-configs libcec v4l-utils usb-gadget-scripts switch-cpu-profile switch-gpu-profile"
# CEC Support
CEC_FRAMEWORK_SUPPORT="yes"
if [ "${DISTRO}" = "Lakka" ]; then
ADDITIONAL_PACKAGES+=" mergerfs"
DISTRO_PATH="lakka"
DISTRO_ICON="icon_lakka_hue.bmp"
HEKATE_SPLASH="splash_lakka.bmp"
ID="SWR-LAK"
ADDITIONAL_PACKAGES+=" wii-u-gc-adapter"
# LAKKA_CANARY_PATH="http://nightly.builds.lakka.tv/members/gavin/lakka-v5.x-new"
elif [ "${DISTRO}" = "LibreELEC" ]; then
DISTRO_PATH="libreelec"
DISTRO_ICON="icon_libreelec_hue.bmp"
HEKATE_SPLASH="splash_libreelec.bmp"
ID="SWR-LIB"
else
echo "Unknown distro, expect issues"
fi
ADDITIONAL_PACKAGES+=" switch-bsp"
#Remove since we include driver in kernel now. Module Config/udev rules
#Included in switch-bsp package, to match version in kernel(0.9.5).
ADDITIONAL_PACKAGES="${ADDITIONAL_PACKAGES//xpadneo/}"
if [ ${PULSEAUDIO_SUPPORT} = "yes" ]; then
ADDITIONAL_PACKAGES+=" pulseaudio-configs"
fi
@ -27,25 +43,26 @@ fi
BOOTLOADER="switch-bootloader" # this is a fake bootloader since coreboot and u-boot are sideloaded
ADDITIONAL_DRIVERS+=" xf86-input-libinput"
#Add proper version for kernel based upon switchroot version Only used for switch
SWITCHROOT_VERSION=5.1.2
GENERIC_L4T_VERSION=32.3.1
L4T_DEVICE_TYPE="t210"
#L4T_COMBINED_KERNEL_SHA256="346baf95b5e13f416eb07f7e354b6b2aec1138b72c745ef222b55247c5150211"
#L4T_COMBINED_KERNEL_SHA256="c3a8df6836cb4581162da6f4d380c2a730f69b3bac8bbaf4c2ec6c73ab5461cd"
L4T_DEVICE_CUSTOM_BOARD_NAME="nx"
# serial number of the kernel
# bump this in case any of the below change to build new kernel archive
# set it to year-month-date of the update
L4T_KERNEL_VERSION="2022-12-24"
L4T_KERNEL_VERSION="2023-06-10"
L4T_KERNEL_4_9_REPO="https://gitlab.com/switchroot/kernel/l4t-kernel-4.9.git"
L4T_KERNEL_4_9_REPO_BRANCH="linux-5.0.0-dev"
L4T_KERNEL_4_9_REPO_SHA256="68e1648524c7deacc9e7346113aa2f60edadc7f2"
L4T_KERNEL_4_9_REPO="https://github.com/CTCaer/switch-l4t-kernel-4.9.git"
L4T_KERNEL_4_9_REPO_BRANCH="linux-5.1.2"
L4T_KERNEL_4_9_REPO_SHA256="2d0059fd3167a8df756de2aa0489d4aa70a9fc15"
L4T_KERNEL_NVIDIA_REPO="https://gitlab.com/switchroot/kernel/l4t-kernel-nvidia.git"
L4T_KERNEL_NVIDIA_REPO_BRANCH="linux-5.0.0-dev"
L4T_KERNEL_NVIDIA_REPO_SHA256="2a7d8df2de59dc388f2ced76ac2f1180d324d985"
L4T_KERNEL_NVIDIA_REPO="https://github.com/CTCaer/switch-l4t-kernel-nvidia.git"
L4T_KERNEL_NVIDIA_REPO_BRANCH="linux-5.1.2"
L4T_KERNEL_NVIDIA_REPO_SHA256="a4cc21186653434c0362323b12354e6e713ad5af"
L4T_KERNEL_NVGPU_REPO="https://gitlab.com/switchroot/kernel/l4t-kernel-nvgpu.git"
L4T_KERNEL_NVGPU_REPO_BRANCH="linux-3.4.0-r32.5"
@ -53,7 +70,7 @@ L4T_KERNEL_NVGPU_REPO_SHA256="1ae0167d360287ca78f5a2572f0de42594140312"
L4T_DEVICE_TEGRA_REPO="https://gitlab.com/switchroot/kernel/l4t-soc-tegra.git"
L4T_DEVICE_TEGRA_REPO_BRANCH="l4t/l4t-r32.3.1"
L4T_DEVICE_TEGRA_REPO_SHA256="b26b71bbc77d8815f6b88a282b383f523fb053dd"
#L4T_DEVICE_TEGRA_REPO_SHA256="d2692b96d3a89e26d3bad94eb7e6bc4caccbdbdb"
L4T_DEVICE_COMMON_TEGRA_REPO="https://gitlab.com/switchroot/kernel/l4t-platform-tegra-common.git"
L4T_DEVICE_COMMON_TEGRA_REPO_BRANCH="l4t/l4t-r32.3.1"
@ -68,6 +85,6 @@ L4T_DEVICE_T210_REPO_BRANCH="l4t/l4t-r32.3.1"
#L4T_DEVICE_T210_REPO_SHA256="0d7816046cb06b637a3b70381a5e4994fd897c35"
#Apply Custom Device DTS tree.
L4T_DEVICE_CUSTOM_REPO="https://gitlab.com/switchroot/kernel/l4t-platform-t210-switch.git"
L4T_DEVICE_CUSTOM_REPO_BRANCH="linux-5.0.0-dev"
L4T_DEVICE_CUSTOM_REPO_SHA256="8abfc0ac0241a501284ecc2cd11737f5967f7f58"
L4T_DEVICE_CUSTOM_REPO="https://github.com/CTCaer/switch-l4t-platform-t210-nx.git"
L4T_DEVICE_CUSTOM_REPO_BRANCH="linux-dev"
L4T_DEVICE_CUSTOM_REPO_SHA256="cf785c4c176499b301170d79fe57b77f365b73cd"

@ -0,0 +1,25 @@
[Unit]
Description=Kodi Media Center
After=network-online.target graphical.target
Requires=graphical.target
Wants=network-online.target
[Service]
User=LibreELEC
Group=LibreELEC
Environment=HOME=/storage DISPLAY=:0 PULSE_SERVER=127.0.0.1
EnvironmentFile=/usr/lib/kodi/kodi.conf
EnvironmentFile=-/run/libreelec/kodi.conf
EnvironmentFile=-/run/libreelec/debug/kodi.conf
ExecStartPre=-/usr/lib/kodi/kodi-config
ExecStart=/usr/lib/kodi/kodi.sh --standalone -fs $KODI_ARGS $KODI_DEBUG
ExecStop=/bin/kill -TERM $MAINPID
ExecStopPost=-/usr/lib/kodi/kodi-safe-mode
TimeoutStopSec=30
Restart=always
RestartSec=2
StartLimitInterval=0
LimitNOFILE=16384
[Install]
WantedBy=kodi.target

@ -5,7 +5,9 @@ ConditionKernelCommandLine=!retroarch=0
Requires=graphical.target
[Service]
Environment=HOME=/storage DISPLAY=:0
Environment=HOME=/storage DISPLAY=:0 PULSE_SERVER=127.0.0.1
User=Lakka
Group=Lakka
EnvironmentFile=-/run/libreelec/retroarch.conf
EnvironmentFile=-/storage/.cache/services/retroarch.conf
ExecStartPre=-/usr/lib/retroarch/retroarch-config

@ -1,11 +0,0 @@
PKG_NAME="switch-alsa-ucm-configs"
PKG_DEPENDS_TARGET="alsa-lib alsa-ucm-conf"
PKG_SECTION="virtual"
PKG_LONGDESC="Nintendo Switch Alsa UCM Configs"
post_install() {
mkdir -p ${INSTALL}/usr/share/alsa/ucm2
cp -Prv ${PKG_DIR}/ucm_data/* ${INSTALL}/usr/share/alsa/ucm2/
#Audio Fix Service
enable_service alsa-init.service
}

@ -1,131 +0,0 @@
#
# ALSA library configuration file
#
# Copyright (c) 2018-2019 NVIDIA Corporation. All Rights Reserved.
#
# NVIDIA Corporation and its licensors retain all intellectual property and
# proprietary rights in and to this software and related documentation. Any
# use, reproduction, disclosure or distribution of this software and related
# documentation without an express license agreement from NVIDIA Corporation
# is strictly prohibited.
#
# Configuration for Tegra soundcards
CARDINFO{driver}=="tegra-snd-t210r", GOTO="Tegra210 Init"
CARDINFO{driver}=="tegra-snd-t186r", GOTO="Tegra186 Init"
CARDINFO{driver}=="tegra-snd-t19x-", GOTO="Tegra186 Init"
RESULT="false", EXIT="return"
LABEL="Tegra210 Init"
CTL{reset}="mixer"
#CTL{name}="OPE2 Mux", CTL{value}="None"
GOTO="Tegra Common Init"
LABEL="Tegra186 Init"
CTL{reset}="mixer"
CTL{name}="ADMAIF11 Mux", CTL{value}="None"
CTL{name}="ADMAIF12 Mux", CTL{value}="None"
CTL{name}="ADMAIF13 Mux", CTL{value}="None"
CTL{name}="ADMAIF14 Mux", CTL{value}="None"
CTL{name}="ADMAIF15 Mux", CTL{value}="None"
CTL{name}="ADMAIF16 Mux", CTL{value}="None"
CTL{name}="ADMAIF17 Mux", CTL{value}="None"
CTL{name}="ADMAIF18 Mux", CTL{value}="None"
CTL{name}="ADMAIF19 Mux", CTL{value}="None"
CTL{name}="ADMAIF20 Mux", CTL{value}="None"
CTL{name}="ADX3 Mux", CTL{value}="None"
CTL{name}="ADX4 Mux", CTL{value}="None"
CTL{name}="AMX3-1 Mux", CTL{value}="None"
CTL{name}="AMX3-2 Mux", CTL{value}="None"
CTL{name}="AMX3-3 Mux", CTL{value}="None"
CTL{name}="AMX3-4 Mux", CTL{value}="None"
CTL{name}="AMX4-1 Mux", CTL{value}="None"
CTL{name}="AMX4-2 Mux", CTL{value}="None"
CTL{name}="AMX4-3 Mux", CTL{value}="None"
CTL{name}="AMX4-4 Mux", CTL{value}="None"
CTL{name}="ASRC1-1 Mux", CTL{value}="None"
CTL{name}="ASRC1-2 Mux", CTL{value}="None"
CTL{name}="ASRC1-3 Mux", CTL{value}="None"
CTL{name}="ASRC1-4 Mux", CTL{value}="None"
CTL{name}="ASRC1-5 Mux", CTL{value}="None"
CTL{name}="ASRC1-6 Mux", CTL{value}="None"
CTL{name}="Denominator1 Mux", CTL{value}="None"
CTL{name}="Denominator2 Mux", CTL{value}="None"
CTL{name}="Denominator3 Mux", CTL{value}="None"
CTL{name}="Denominator4 Mux", CTL{value}="None"
CTL{name}="Denominator5 Mux", CTL{value}="None"
CTL{name}="Denominator6 Mux", CTL{value}="None"
CTL{name}="DSPK1 Mux", CTL{value}="None"
CTL{name}="DSPK2 Mux", CTL{value}="None"
CTL{name}="I2S6 Mux", CTL{value}="None"
CTL{name}="Numerator1 Mux", CTL{value}="None"
CTL{name}="Numerator2 Mux", CTL{value}="None"
CTL{name}="Numerator3 Mux", CTL{value}="None"
CTL{name}="Numerator4 Mux", CTL{value}="None"
CTL{name}="Numerator5 Mux", CTL{value}="None"
CTL{name}="Numerator6 Mux", CTL{value}="None"
LABEL="Tegra Common Init"
CTL{reset}="mixer"
CTL{name}="ADMAIF1 Mux", CTL{value}="None"
CTL{name}="ADMAIF2 Mux", CTL{value}="None"
CTL{name}="ADMAIF3 Mux", CTL{value}="None"
CTL{name}="ADMAIF4 Mux", CTL{value}="None"
CTL{name}="ADMAIF5 Mux", CTL{value}="None"
CTL{name}="ADMAIF6 Mux", CTL{value}="None"
CTL{name}="ADMAIF7 Mux", CTL{value}="None"
CTL{name}="ADMAIF8 Mux", CTL{value}="None"
CTL{name}="ADMAIF9 Mux", CTL{value}="None"
CTL{name}="ADMAIF10 Mux", CTL{value}="None"
CTL{name}="ADX1 Mux", CTL{value}="None"
CTL{name}="ADX2 Mux", CTL{value}="None"
CTL{name}="AFC1 Mux", CTL{value}="None"
CTL{name}="AFC2 Mux", CTL{value}="None"
CTL{name}="AFC3 Mux", CTL{value}="None"
CTL{name}="AFC4 Mux", CTL{value}="None"
CTL{name}="AFC5 Mux", CTL{value}="None"
CTL{name}="AFC6 Mux", CTL{value}="None"
CTL{name}="AMX1-1 Mux", CTL{value}="None"
CTL{name}="AMX1-2 Mux", CTL{value}="None"
CTL{name}="AMX1-3 Mux", CTL{value}="None"
CTL{name}="AMX1-4 Mux", CTL{value}="None"
CTL{name}="AMX2-1 Mux", CTL{value}="None"
CTL{name}="AMX2-2 Mux", CTL{value}="None"
CTL{name}="AMX2-3 Mux", CTL{value}="None"
CTL{name}="AMX2-4 Mux", CTL{value}="None"
CTL{name}="I2S1 Mux", CTL{value}="None"
CTL{name}="I2S2 Mux", CTL{value}="None"
CTL{name}="I2S3 Mux", CTL{value}="None"
CTL{name}="I2S4 Mux", CTL{value}="None"
CTL{name}="I2S5 Mux", CTL{value}="None"
CTL{name}="MIXER1-1 Mux", CTL{value}="None"
CTL{name}="MIXER1-2 Mux", CTL{value}="None"
CTL{name}="MIXER1-3 Mux", CTL{value}="None"
CTL{name}="MIXER1-4 Mux", CTL{value}="None"
CTL{name}="MIXER1-5 Mux", CTL{value}="None"
CTL{name}="MIXER1-6 Mux", CTL{value}="None"
CTL{name}="MIXER1-7 Mux", CTL{value}="None"
CTL{name}="MIXER1-8 Mux", CTL{value}="None"
CTL{name}="MIXER1-9 Mux", CTL{value}="None"
CTL{name}="MIXER1-10 Mux", CTL{value}="None"
CTL{name}="MVC1 Mux", CTL{value}="None"
CTL{name}="MVC2 Mux", CTL{value}="None"
CTL{name}="OPE1 Mux", CTL{value}="None"
CTL{name}="SFC1 Mux", CTL{value}="None"
CTL{name}="SFC2 Mux", CTL{value}="None"
CTL{name}="SFC3 Mux", CTL{value}="None"
CTL{name}="SFC4 Mux", CTL{value}="None"
CTL{name}="SPKPROT1 Mux", CTL{value}="None"
CARDINFO{driver}=="tegra-snd-t210r", \
CTL{name}="I2S1 Loopback", CTL{do_search}=="0", \
CTL{name}="ADMAIF1 Mux", CTL{value}="I2S1" \
CTL{name}="I2S1 Mux", CTL{value}="ADMAIF1"
CARDINFO{driver}=="tegra-snd-t186r", \
CTL{name}="ADMAIF1 Mux", CTL{value}="I2S1" \
CTL{name}="I2S1 Mux", CTL{value}="ADMAIF1"
CARDINFO{driver}=="tegra-snd-t19x-", \
CTL{name}="ADMAIF1 Mux", CTL{value}="I2S1" \
CTL{name}="I2S1 Mux", CTL{value}="ADMAIF1" \
CTL{name}="ADMAIF2 Mux", CTL{value}="I2S2" \
CTL{name}="I2S2 Mux", CTL{value}="ADMAIF2"
PRINT="Reset Tegra APE sound-card controls\n"
RESULT="true", EXIT="return"

@ -1,70 +0,0 @@
#
# ALSA library configuration file
#
# Copyright (c) 2018-2019 NVIDIA Corporation. All Rights Reserved.
#
# NVIDIA Corporation and its licensors retain all intellectual property and
# proprietary rights in and to this software and related documentation. Any
# use, reproduction, disclosure or distribution of this software and related
# documentation without an express license agreement from NVIDIA Corporation
# is strictly prohibited.
#
# Configuration for Tegra soundcards using the RT565x codec
CARDINFO{driver}=="tegra-snd-t210r", GOTO="Tegra RT565x Init"
CARDINFO{driver}=="tegra-snd-t186r", GOTO="Tegra RT565x Init"
CARDINFO{driver}=="tegra-snd-t19x-", GOTO="Tegra RT565x Init"
RESULT="false", EXIT="return"
LABEL="Tegra RT565x Init"
CTL{reset}="mixer"
CTL{name}="x TDM Data Mux",PROGRAM!="__ctl_search",GOTO="Tegra RT565x Next"
# RT565x playback setup
CTL{name}="x Headphone Playback Volume", CTL{value}="31,31"
CTL{name}="x Stereo DAC MIXR DAC R1 Switch", CTL{value}="on"
CTL{name}="x Stereo DAC MIXL DAC L1 Switch", CTL{value}="on"
CTL{name}="x HPO R Playback Switch", CTL{value}="on"
CTL{name}="x HPO L Playback Switch", CTL{value}="on"
CTL{name}="x DAC1 Playback Volume", CTL{value}="175,175"
CTL{name}="x DAC1 Playback Switch", CTL{value}="on"
CTL{name}="x DAC1 MIXR DAC1 Switch", CTL{value}="on"
CTL{name}="x DAC1 MIXL DAC1 Switch", CTL{value}="on"
# RT565x capture setup
CTL{name}="x RECMIX1L BST1 Switch", CTL{value}="on"
CTL{name}="x RECMIX1R BST1 Switch", CTL{value}="on"
CTL{name}="x Stereo1 ADC Source", CTL{value}="ADC1"
CTL{name}="x Stereo1 ADC1 Source", CTL{value}="ADC"
CTL{name}="x Stereo1 ADC MIXL ADC1 Switch", CTL{value}="on"
CTL{name}="x Stereo1 ADC MIXR ADC1 Switch", CTL{value}="on"
CTL{name}="x TDM Data Mux", CTL{value}="AD1:AD2:DAC:NUL"
CTL{name}="x IN1 Boost Volume", CTL{value}="43"
PRINT="Initialised RT565x codec with prefix 'x'\n"
LABEL="Tegra RT565x Next"
CTL{name}="y TDM Data Mux",PROGRAM!="__ctl_search",RESULT="true", EXIT="return"
# RT565x playback setup
CTL{name}="y Headphone Playback Volume", CTL{value}="31,31"
CTL{name}="y Stereo DAC MIXR DAC R1 Switch", CTL{value}="on"
CTL{name}="y Stereo DAC MIXL DAC L1 Switch", CTL{value}="on"
CTL{name}="y HPO R Playback Switch", CTL{value}="on"
CTL{name}="y HPO L Playback Switch", CTL{value}="on"
CTL{name}="y DAC1 Playback Volume", CTL{value}="175,175"
CTL{name}="y DAC1 Playback Switch", CTL{value}="on"
CTL{name}="y DAC1 MIXR DAC1 Switch", CTL{value}="on"
CTL{name}="y DAC1 MIXL DAC1 Switch", CTL{value}="on"
# RT565x capture setup
CTL{name}="y RECMIX1L BST1 Switch", CTL{value}="on"
CTL{name}="y RECMIX1R BST1 Switch", CTL{value}="on"
CTL{name}="y Stereo1 ADC Source", CTL{value}="ADC1"
CTL{name}="y Stereo1 ADC1 Source", CTL{value}="ADC"
CTL{name}="y Stereo1 ADC MIXL ADC1 Switch", CTL{value}="on"
CTL{name}="y Stereo1 ADC MIXR ADC1 Switch", CTL{value}="on"
CTL{name}="y TDM Data Mux", CTL{value}="AD1:AD2:DAC:NUL"
CTL{name}="y IN1 Boost Volume", CTL{value}="43"
PRINT="Initialised RT565x codec with prefix 'y'\n"
RESULT="true", EXIT="return"

@ -16,7 +16,7 @@ Below you can find all supported keys and their defaults.
Mandatory!
[id=@DISTRO_ID@]
Set FS Label name. SWR-UBU by default.
Set FS Label name. @DISTRO_ID@ by default.
Used to automatically find the correct linux partition.
================================================================================
@ -24,7 +24,8 @@ Below you can find all supported keys and their defaults.
[r2p_action=self]
self: Reboots to self. [Default]
bootloader: Reboots to bootloader menu.
normal: Reboots with no config. Allows default auto boot to be used.
[usb3_enable=0]
1: Enable USB3 support.
Enabling it can dramatically decrease WiFi 2.4GHz and Bluetooth signal quality.
@ -49,9 +50,17 @@ Below you can find all supported keys and their defaults.
[als_enable=1]
1: Enable Ambient Light Sensor.
[jc_rail_disable=0]
1: Disable railed Joycon support.
[cec_enable=0]
1: Enable auto DP/HDMI CEC negotiation.
[touch_skip_tuning=0]
1: Disables touch panel tuning on boot.
Some panels with broken flex cable might need it.
[wifi_disable_vht80=0]
1: Disable Wi-Fi VHT80 and VHT160 bonding (5GHz band).
In case wifi card firmware hangs when fully used at such speeds and kernel
panics, that might help to mitigate that issue.
[bootargs_extra=]
Set extra kernel command line arguments.
@ -62,34 +71,146 @@ Below you can find all supported keys and their defaults.
Can also allow higher CPU/GPU clocks. If OC is used, the reduced power draw
is negated.
[gpu_dvfsc=0]
1: Enable DVFS C-Side for GPU. T210B01 only.
Reduces power draw drastically on GPU frequencies of 768/844 MHz and up.
Allows up to 1228 MHz clocks on select speedo binnings.
[limit_gpu_clk=0]
1: Set GPU clock hard limit to 1075 MHz. T210B01 only.
Helps when `gpu_dvfsc` is enabled and GPU can't handle the higher frequencies
in such low voltages.
================================================================================
============================== RAM Overclocking ================================
[ram_oc=0]
Set RAM Overclock frequency in KHz.
If you hang or get corruption or artifacts, try to reduce it.
`mem-bench` command can use almost all of the available bandwidth so it can be
used for a quick testing.
Actual stability can only be confirmed by `memtester` command on as high as
possible temperature for several hours and with a big test size.
Running a secondary GPU benchmark can help raise temperature.
On T210 (Erista max 1996 MHz):
Only frequencies in the following list are supported:
1728000, 1795200, 1862400, 1894400, 1932800, 1996800
Suggested:
- 1862400
Any clock increase will also increase RAM power consumption like a CPU/GPU OC.
For example on T210B01, with 1z-nm ram, going from 1866 to 2133 causes a
146 mW increase on active reads/writes which is 19.8%.
Any other state is affected only with a voltage change.
On T210B01 (Mariko max 2133 MHz):
Any multiple of 38400 KHz can be used.
Suggested:
Warning: On T210B01, GPU minimum voltage might be raised if very high RAM
frequency is used and GPU binning is low.
T210 (Erista max 2133 MHz):
List of supported frequencies:
1733000, 1800000, 1866000, 1900000, 1933000, 1966000, 2000000, 2033000,
2066000, 2100000, 2133000, 2166000, 2200000, 2233000, 2266000, 2300000,
2333000, 2366000.
Input frequency is generally normalized to one of the above.
Actual frequency will differ a bit.
Suggested Jedec Frequencies:
- 1866000
- 2133000
Suggested Custom:
- Any, if it works.
[performance_mode=0]
0: Use default schedutil cpu governor
1: Use Performance CPU governor
[dock_freq_switch_enabled=0]
0: Do not autoswitch clocks when docking/undocking
1: Autoswitch clocks when docking/undocking.
T210B01 (Mariko max 3000 MHz):
List of supported frequencies:
1866000, 2133000, 2166000, 2200000, 2233000, 2266000, 2300000, 2333000,
2366000, 2400000, 2433000, 2466000, 2500000, 2533000, 2566000, 2600000,
2633000, 2666000, 2700000, 2733000, 2766000, 2800000, 2833000, 2866000,
2900000, 2933000, 2966000, 3000000, 3033000, 3066000, 3100000, 3133000,
3166000, 3200000.
This feature only auto changes speeds to the HOS defaults for both tablet/docked mode.
It also doesnt switch even if set if you change clocks manually. This is intentional,
as I give you a menu to set clocks, and dont want to override your settings. If
you set clock back to stock clock speed, it will start auto swapping again.
Input frequency is generally normalized to one of the above.
Actual frequency will be exactly one of these.
Suggested Jedec Frequencies:
- 1866000
- 2133000
- 2400000
- 2666000
Suggested Custom Frequencies:
- Any, if it works.
Very high ram frequencies might raise GPU power draw on some GPU frequencies
if GPU binning is low.
Timing based overclocking:
To enable that, edit the last [2 (T210) or 3 (T210B01) digits] of the frequency.
It's generally better to find a good base frequency before touching these.
Do not touch them at all for guaranteed stability on max possible frequency,
since without these, the whole configuration is exactly per Nvidia's and
RAM vendor's specifications.
Syntax:
T210: Freq MHz + BA. FFFFF[BA]. (18624[00] -> 18624[52])
T210B01: Freq MHz + CBA. FFFF[CBA]. (2133[000] -> 2133[252])
Description of F, A, B and C timing overclocking options:
[F]: Actual clock frequency. Exceeding chip's real max is actual OC.
[A]: Base Latency reduction.
Base latency decreases based on selected frequency bracket.
Brackets: 1333/1600/1866/2133.
- Range: 0 - 3. 0 to -3 bracket change.
Example 1: 1866 with 2 is 1333 base latency. Originally 1866 bracket.
Example 1: 1866 with 3 is 1333 base latency. Originally 1866 bracket.
Example 2: 1996 with 3 is 1333 base latency. Originally 2133 bracket.
Example 3: 2133 with 2 is 1600 base latency. Originally 2133 bracket.
Example 4: 2400 with 0 is 2133 base latency. Originally 2133 bracket.
[B]: Core Timings reduction.
Timings that massively get affected by temperatures are not touched.
- Range: 0 - 9. 0% to 45% reduction.
[C]: BW Increase. T210B01/LPDDR4x only. RAM Temperature limited timings.
Can cause significant ram data corruption if ram temperature exceeds max.
Reason is not allowed on T210 and LPDDR4.
- 0/1/2/3/4: for max 85/75/65/55/45 oC
RAM Temperature is only related to MEM/PLL sensors and not to Tdiode or Tboard.
45oC is 50/51 oC MEM/PLL (around 43 oC Tdiode, depends on temp equilibrium).
65oC is 68/69 oC MEM/PLL (around 60 oC Tdiode, depends on temp equilibrium).
Full Examples:
Old (no timing adjustments) OC equivalents:
- 1862 Old OC: 15% -> [A1,B3,C0] - 1866031
- 1996 Old OC: 25% -> [A2,B5,C0] - 2000052
T210 Examples:
- 19968[00] -> 1996800: 1996 MHz with read/write base latency of 2133 MHz
and proper 1996 MHz core timings.
- 19968[00] -> 1996852: 1996 MHz with read/write base latency of 1600 MHz
and reduced core timings by 25%.
T210B01 Examples:
- 2666[000] -> 2666000: 2666 MHz with read/write base latency of 2133 MHz
and proper 2666 MHz core timings.
- 2666[000] -> 2666252: 2666 MHz with read/write base latency of 1600 MHz,
reduced core timings by 25% and up to 65C operation.
Again, do not use them if you want the ram running like Nvidia and RAM vendor
made the tables, and write the frequency `as is` in that case.
[ram_oc_vdd2=0]
Changes VDDIO/VDDQ voltage for T210. VDDIO only for T210B01.
Can stabilize timing reduction or if at frequency limit.
Do not use for zero reason. Limits are fully safe (official Jedec).
Range: 1100 - 1175. (Unit in mV).
[ram_oc_vddq=0]
Changes VDDQ voltage for T210B01.
Can stabilize timing reduction or if at frequency limit.
Do not use for zero reason. Limits are fully safe (official Jedec).
Range: 600 - 650. (Unit in mV).
================================================================================

@ -1,8 +1,9 @@
# Set defaults env variables if they do not exist.
setenv boot_dir @DISTRO_PATH@
test -n ${id} || setenv id @DISTRO_ID@
test -n ${fbconsole} || setenv fbconsole 1
test -n ${fbconsole} || setenv fbconsole 9
test -n ${uart_port} || setenv uart_port 0
test -n ${earlycon} || setenv earlycon 0
test -n ${r2p_action} || setenv r2p_action self
test -n ${autoboot} || setenv autoboot 0
test -n ${autoboot_list} || setenv autoboot_list 0
@ -10,15 +11,57 @@ test -n ${als_enable} || setenv als_enable 1
test -n ${usb3_enable} || setenv usb3_enable 0
test -n ${4k60_disable} || setenv 4k60_disable 0
test -n ${dvfsb} || setenv dvfsb 0
test -n ${gpu_dvfsc} || setenv gpu_dvfsc 0
test -n ${limit_gpu_clk} || setenv limit_gpu_clk 0
test -n ${jc_rail_disable} || setenv jc_rail_disable 0
test -n ${cec_enable} || setenv cec_enable 0
test -n ${performance_mode} || setenv performance_mode 0
test -n ${dock_freq_switch_enabled} || setenv dock_freq_switch_enabled 0
test -n ${touch_skip_tuning} || setenv touch_skip_tuning 0
test -n ${wifi_disable_vht80} || setenv wifi_disable_vht80 0
# Built-in IMU.
test -n ${acc_cal_off_x} || setenv acc_cal_off_x 0x0
test -n ${acc_cal_off_y} || setenv acc_cal_off_y 0x0
test -n ${acc_cal_off_z} || setenv acc_cal_off_z 0x0
test -n ${acc_cal_scl_x} || setenv acc_cal_scl_x 0x0
test -n ${acc_cal_scl_y} || setenv acc_cal_scl_y 0x0
test -n ${acc_cal_scl_z} || setenv acc_cal_scl_z 0x0
test -n ${gyr_cal_off_x} || setenv gyr_cal_off_x 0x0
test -n ${gyr_cal_off_y} || setenv gyr_cal_off_y 0x0
test -n ${gyr_cal_off_z} || setenv gyr_cal_off_z 0x0
test -n ${gyr_cal_scl_x} || setenv gyr_cal_scl_x 0x0
test -n ${gyr_cal_scl_y} || setenv gyr_cal_scl_y 0x0
test -n ${gyr_cal_scl_z} || setenv gyr_cal_scl_z 0x0
# Lite Gamepad analog sticks calibration.
test -n ${lite_cal_lx_lof} || setenv lite_cal_lx_lof 0x0
test -n ${lite_cal_lx_cnt} || setenv lite_cal_lx_cnt 0x0
test -n ${lite_cal_lx_rof} || setenv lite_cal_lx_rof 0x0
test -n ${lite_cal_ly_dof} || setenv lite_cal_ly_dof 0x0
test -n ${lite_cal_ly_cnt} || setenv lite_cal_ly_cnt 0x0
test -n ${lite_cal_ly_uof} || setenv lite_cal_ly_uof 0x0
test -n ${lite_cal_rx_lof} || setenv lite_cal_rx_lof 0x0
test -n ${lite_cal_rx_cnt} || setenv lite_cal_rx_cnt 0x0
test -n ${lite_cal_rx_rof} || setenv lite_cal_rx_rof 0x0
test -n ${lite_cal_ry_dof} || setenv lite_cal_ry_dof 0x0
test -n ${lite_cal_ry_cnt} || setenv lite_cal_ry_cnt 0x0
test -n ${lite_cal_ry_uof} || setenv lite_cal_ry_uof 0x0
test -n ${lite_cal_lx_coff} || setenv lite_cal_lx_coff 0x0
test -n ${lite_cal_ly_coff} || setenv lite_cal_ly_coff 0xFFFFFF00
test -n ${lite_cal_rx_coff} || setenv lite_cal_rx_coff 0xFFFFFF00
test -n ${lite_cal_ry_coff} || setenv lite_cal_ry_coff 0x0
# Set logging params for each serial type.
setenv uarta "no_console_suspend console=ttyS0,115200,8n1 loglevel=8"
setenv uartb "no_console_suspend console=ttyS1,115200,8n1 loglevel=8"
setenv uartc "no_console_suspend console=ttyS2,115200,8n1 loglevel=8"
setenv usblg "console=ttyGS0,115200,8n1 loglevel=8"
setenv usblg "usb_logging loglevel=8"
setenv uarta_early "earlycon=uart,mmio32,0x70006000"
setenv uartb_early "earlycon=uart,mmio32,0x70006040"
setenv uartc_early "earlycon=uart,mmio32,0x70006200"
# Default read addresses.
# fdt_addr_r 0x8d000000
@ -32,13 +75,14 @@ setenv fdtrload 0xA8000000
setenv fdtraddr 0x8d000000
# Set temp addresses.
setenv enviraddr 0x8d100000
setenv fdtovaddr 0x8d200000
# Set SoC info.
if test ${t210b01} = 1; then setenv plat_info T210B01; else setenv plat_info T210; fi
# Set SKU info.
# Set SKU info. Frig is used instead of Fric for compatibility reasons.
if test ${sku} = 0; then setenv sku_info ODIN; setenv sku_rev 0
elif test ${sku} = 1; then setenv sku_info ODIN; setenv sku_rev b01
elif test ${sku} = 2; then setenv sku_info VALI; setenv sku_rev 0
@ -72,34 +116,100 @@ fdt resize 16384
# Sanity checks for dtb info.
if test ${sku_info} != ${fdt_id_text} -o ${sku_rev} != ${fdt_rev}; then
echoe Device Tree loaded (SKU: ${fdt_id_text}, Rev: ${fdt_rev}) not correct!
echoe Device Tree loaded not correct! (SKU: ${fdt_id_text}, Rev: ${fdt_rev})
echoe Expected SKU: ${sku_info}, Rev: ${sku_rev}
echoe Rebooting in 10s..; sleep 10; reset
fi
# Add additional bootargs for UART Logging.
if test ${uart_port} = 1; then
setenv bootargs_extra ${bootargs_extra} ${uarta}; echoe UART-A logging enabled
echoe UART-A logging enabled
setenv bootargs_extra ${bootargs_extra} ${uarta}
fdt set /serial@70006000 compatible nvidia,tegra20-uart
fdt set /serial@70006000 status okay
if test ${earlycon} = 1; then
echoe Early logging enabled
setenv bootargs_extra ${bootargs_extra} ${uarta_early}
fdt set /serial@70006000 reset-names noreset
fi
elif test ${uart_port} = 2; then
setenv bootargs_extra ${bootargs_extra} ${uartb}; echoe UART-B logging enabled
echoe UART-B logging enabled
setenv bootargs_extra ${bootargs_extra} ${uartb}
fdt set /serial@70006040 compatible nvidia,tegra20-uart
fdt set /serial@70006040/joyconr status disabled
if test ${earlycon} = 1; then
echoe Early logging enabled
setenv bootargs_extra ${bootargs_extra} ${uartb_early}
fdt set /serial@70006040 reset-names noreset
fi
elif test ${uart_port} = 3; then
setenv bootargs_extra ${bootargs_extra} ${uartc}; echoe UART-C logging enabled
echoe UART-C logging enabled
setenv bootargs_extra ${bootargs_extra} ${uartc}
fdt set /serial@70006200 compatible nvidia,tegra20-uart
fdt set /serial@70006200/joyconl status disabled
elif test ${uart_port} = 4; then
if test ${earlycon} = 1; then
echoe Early logging enabled
setenv bootargs_extra ${bootargs_extra} ${uartc_early}
fdt set /serial@70006200 reset-names noreset
fi
fi
# Add additional bootargs for Serial USB.
if test ${uart_port} = 4; then
setenv bootargs_extra ${usblg} ${bootargs_extra}; echoe USB Serial logging enabled
fi
# Disable Joycon Rails.
if test ${jc_rail_disable} = 1; then
echoe Joycon Rails disabled
fdt set /serial@70006040 status disabled
fdt set /serial@70006040/joyconr status disabled
fdt set /serial@70006200 status disabled
fdt set /serial@70006200/joyconl status disabled
fi
# Disable Touch panel tuning.
if test ${touch_skip_tuning} = 1; then
setenv bootargs_extra ${bootargs_extra} "ftm4.skip_tuning=1"
fi
# Check if SD is initialized in 1-bit mode.
if test "${sd_1bit}" = 1; then
echoe SD Card is initialized in 1-bit mode!
fdt set /sdhci@700b0000 bus-width <0x1>
fdt set /sdhci@700b0000 uhs-mask <0x7F>
fi
# Enable ALS sensor.
if test ${als_enable} = 1; then
echo ALS sensor enabled
fdt set /i2c@7000c400/bh1730fvc@29 status okay
fi
# Disable WiFi VHT80 bonding.
if test ${wifi_disable_vht80} = 1; then
echo WiFi VHT80 bonding disabled
setenv bootargs_extra ${bootargs_extra} "brcmfmac.vht_mask=12"
fi
# Set Sio calibration data.
if test ${sku} = 2; then
if load mmc ${devnum}:${distro_bootpart} ${enviraddr} /switchroot/switch.cal; then
env import -t -r ${enviraddr} ${filesize}
echo Sio Calibration set
fdt set /serial@70006200/sio sio-stick-cal-l <$lite_cal_lx_lof $lite_cal_lx_cnt $lite_cal_lx_rof $lite_cal_ly_dof $lite_cal_ly_cnt $lite_cal_ly_uof>
fdt set /serial@70006200/sio sio-stick-cal-r <$lite_cal_rx_lof $lite_cal_rx_cnt $lite_cal_rx_rof $lite_cal_ry_dof $lite_cal_ry_cnt $lite_cal_ry_uof>
fdt set /serial@70006200/sio sio-acc-cal <$acc_cal_off_x $acc_cal_off_y $acc_cal_off_z $acc_cal_scl_x $acc_cal_scl_y $acc_cal_scl_z>
fdt set /serial@70006200/sio sio-gyr-cal <$gyr_cal_off_x $gyr_cal_off_y $gyr_cal_off_z $gyr_cal_scl_x $gyr_cal_scl_y $gyr_cal_scl_z>
fdt set /serial@70006200/sio sio-stick-cnt-off-l <$lite_cal_lx_coff $lite_cal_ly_coff>
fdt set /serial@70006200/sio sio-stick-cnt-off-r <$lite_cal_rx_coff $lite_cal_ry_coff>
fi
fi
# Get display panel handle.
if test ${display_id} = f20; then echo Display is INN 6.2; fdt get value DHANDLE /host1x/dsi/panel-i-720p-6-2 phandle
elif test ${display_id} = f30; then echo Display is AUO 6.2; fdt get value DHANDLE /host1x/dsi/panel-a-720p-6-2 phandle
@ -111,7 +221,7 @@ elif test ${display_id} = 2050; then echo Display is SAM 7.0
else echoe Unknown Display ID: ${display_id}!; fi
# Set new active display panel handle.
if test -n ${DHANDLE} -a ${sku} != 3; then echo Setting Display panel; fdt set /host1x/dsi nvidia,active-panel <$DHANDLE>; fi
if test -n "${DHANDLE}" -a ${sku} != 3; then echo Setting Display panel; fdt set /host1x/dsi nvidia,active-panel <$DHANDLE>; fi
# Disable USB3.
if test ${usb3_enable} = 0; then
@ -128,38 +238,88 @@ else
echoe USB3 enabled
fi
# Disable 4 DP lanes on Frig.
# Disable 4 DP lanes (4K@60) on Fric.
if test ${sku} = 3 -a ${4k60_disable} = 1 -a ${usb3_enable} != 0; then
echoe 4K60 disabled
fdt set /i2c@7000c000/bm92t@18 rohm,dp-lanes <2>
fi
# Check if SD is initialized in 1-bit mode.
if test "${sd_1bit}" = 1; then
echoe SD Card is initialized in 1-bit mode!
fdt set /sdhci@700b0000 bus-width <0x1>
fdt set /sdhci@700b0000 uhs-mask <0x7F>
fi
# Set battery voltage limit via cell age for Vali.
if test ${sku} = 2 -a -n "${VLIM}"; then
echo VALI: voltage limits [${VLIM}, ${SOCLIM}]
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-voltage-limit-millivolt <0x$VLIM>
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-thermal-voltage-limit <0x$VLIM 0x$VLIM 0x$VLIM 0xFF0>
fdt set /i2c@7000c000/battery-gauge@36 maxim,kernel-maximum-soc <0x$SOCLIM>
if test "${VLIM}" != 1070; then
# Newer Vali. 4320 mV / 1664 mA.
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-voltage-limit-millivolt <0x$VLIM>
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-thermal-voltage-limit <0x$VLIM 0x$VLIM 0x$VLIM 0xFF0>
fdt set /i2c@7000c000/battery-gauge@36 maxim,kernel-maximum-soc <0x$SOCLIM>
else
# Old Vali. 4208 mV / 1536 mA. (Unreleased?)
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-voltage-limit-millivolt <0x1070>
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-thermal-voltage-limit <0x1070 0x1070 0x1070 0xF70>
fdt set /i2c@7000c000/battery-charger@6b/charger ti,fast-charge-current-limit-milliamp <0x600>
fdt set /i2c@7000c000/battery-charger@6b/charger ti,charge-current-limit <0x200 0x240 0x600 0x600>
fi
fi
# Enable SLT DVFS.
if test ${dvfsb} = 1; then
echoe SLT DVFS B enabled
setenv bootargs_extra ${bootargs_extra} "speedo_tegra210.cspd_id=2 speedo_tegra210.cspd_id=2 speedo_tegra210.gspd_id=2"
# Enable DVFS B-Side.
if test ${t210b01} = 1 -a ${dvfsb} = 1; then
echoe DVFS B-Side enabled
setenv bootargs_extra ${bootargs_extra} "speedo_tegra210.sku_id=0x83 speedo_tegra210.cspd_id=2 speedo_tegra210.sspd_id=2"
fdt set /cpufreq/cpu-scaling-data max-frequency <0x249348>
if test ${gpu_dvfsc} != 1; then
setenv bootargs_extra ${bootargs_extra} "speedo_tegra210.gspd_id=2"
fi
if test ${sku} = 2; then
# 2091 MHz CPU and 844 MHz GPU hard limit. Vali.
fdt set /cpufreq/cpu-scaling-data max-frequency <0x1FE7F8>
fdt set /dvfs nvidia,gpu-max-freq-khz <0xCE400>
fi
fi
# Enable GPU DVFS C-Side.
if test ${t210b01} = 1 -a ${gpu_dvfsc} = 1; then
echoe DVFS C-Side GPU enabled
if test ${dvfsb} != 1; then
setenv bootargs_extra ${bootargs_extra} "speedo_tegra210.sku_id=0x83 speedo_tegra210.gspd_id=3"
else
setenv bootargs_extra ${bootargs_extra} "speedo_tegra210.gspd_id=3"
fi
fi
# Limit GPU clock.
if test ${t210b01} = 1 -a ${limit_gpu_clk} = 1; then
if test ${sku} != 2; then
# If not Vali set GPU hard limit to 1075 MHz.
echoe GPU clock limit enabled
fdt set /dvfs nvidia,gpu-max-freq-khz <0x106800>
fi
fi
# Set pmic type if special (devboard).
if test ${t210b01} = 1 -a -n "${pmic_type}" -a ${pmic_type} = 1; then
echoe GPU 15A Regulator enabled
fdt set /i2c@7000d000/max77812@33 reg <0x31>
fdt set /i2c@7000d000/max77812@33/m3vout status disabled
fdt set /i2c@7000d000/fan53528@52 status okay
fdt set /dvfs nvidia,gpu-max-volt-mv <0x3B6>
fi
# Check if ptsa rework is done.
if test ${t210b01} = 1 -a "${loader_rev}" > 1; then
echo PTSA rework done
setenv bootargs_extra ${bootargs_extra} "latency_allowance.ptsa_rework"
fi
# Set serial number.
if test -n ${device_serial}; then fdt set / serial-number ${device_serial}; fi
host_mac_addr=0xff
# load mac address info file
if fatload mmc 1:1 0x90000000 switchroot/joycon_mac.bin; then
if itest.b *0x90000000 == 0x01; then
@ -173,53 +333,40 @@ if fatload mmc 1:1 0x90000000 switchroot/joycon_mac.bin; then
fi
fi
if itest $host_mac_addr == 0xff; then
# no joy con is available
if itest $host_mac_addr != 0xff; then
bt_mac=""
sep=""
for i in 0 1 2 3 4 5 ; do
setexpr x $host_mac_addr + $i
setexpr.b b *$x
if itest $b <= f; then
# There is no way to have leading zeros, so do this hack
bt_mac="$bt_mac${sep}0$b"
else
bt_mac="$bt_mac$sep$b"
fi
sep=":"
done
# write to a known good location
mw.q 0x90000000 ${serial#} 1
# write crc32 of value at offset 0x3
crc32 0x90000000 8 0x90000003
# write nintendo prefix
mw.b 0x90000000 0x98 1
mw.b 0x90000001 0xE8 1
mw.b 0x90000002 0xFA 1
# use this to generate mac
host_mac_addr=0x90000000
# Set host bt mac.
if test -n ${bt_mac}; then fdt set /chosen nvidia,bluetooth-mac ${bt_mac}; fi
else
# Set host bt mac.
if test -n ${device_bt_mac}; then fdt set /chosen nvidia,bluetooth-mac ${device_bt_mac}; fi
fi
bt_mac=""
sep=""
for i in 0 1 2 3 4 5 ; do
setexpr x $host_mac_addr + $i
setexpr.b b *$x
if itest $b <= f; then
# There is no way to have leading zeros, so do this hack
bt_mac="$bt_mac${sep}0$b"
else
bt_mac="$bt_mac$sep$b"
fi
sep=":"
done
# Set default bt mac. initramfs will/can change it.
if test -n ${bt_mac}; then fdt set /chosen nvidia,bluetooth-mac ${bt_mac}; fi
# Set default wifi mac. initramfs will/can change it.
if test -n ${device_wifi_mac}; then fdt set /chosen nvidia,wifi-mac ${device_wifi_mac}; fi
# Set kernel cdmline.
setenv bootargs ${bootargs_extra} "boot=/dev/mmcblk0p1 BOOT_IMAGE=@DISTRO_PATH@/KERNEL SYSTEM_IMAGE=@DISTRO_PATH@/SYSTEM nofsck fat32-boot cec_enabled=${cec_enable} \
# Set kernel cmdline.
setenv bootargs ${bootargs_extra} "boot=/dev/mmcblk0p1 BOOT_IMAGE=@DISTRO_PATH@/KERNEL SYSTEM_IMAGE=@DISTRO_PATH@/SYSTEM nofsck fat32-boot \
dock_freq_switch_enabled=${dock_freq_switch_enabled} performance_mode=${performance_mode} \
firmware_class.path=/usr/lib/firmware \
firmware_class.path=/usr/lib/firmware access=m2 \
pmc_r2p.enabled=1 pmc_r2p.action=${r2p_action} \
pmc_r2p.param1=${autoboot} pmc_r2p.param2=${autoboot_list} \
nvdec_enabled=0 tegra_fbmem=0x400000@0xf5a00000 access=m2 \
consoleblank=0 fbcon=map:${fbconsole} "
fbcon=map:${fbconsole} consoleblank=0 \
nvdec_enabled=0 tegra_fbmem=0x400000@0xf5a00000 "
# Boot kernel.
echo Launching Kernel!

@ -1,25 +1,9 @@
PKG_NAME="switch-bootloader"
PKG_VERSION="2.1"
PKG_VERSION="2.8"
PKG_ARCH="any"
PKG_DEPENDS_TARGET="switch-u-boot:host switch-u-boot:target switch-atf:target"
PKG_TOOLCHAIN="manual"
if [ "${DISTRO}" = "Lakka" ]; then
DISTRO_PATH="lakka"
DISTRO_ICON="icon_lakka_hue.bmp"
HEKATE_SPLASH="splash_lakka.bmp"
ID="SWR-LAK"
elif [ "${DISTRO}" = "LibreELEC" ]; then
DISTRO_PATH="libreelec"
DISTRO_ICON="icon_libreelec_hue.bmp"
HEKATE_SPLASH="splash_libreelec.bmp"
ID="SWR-LIB"
else
echo "Unknown distro, expect issues"
fi
make_target() {
cat << EOF > ${PKG_BUILD}/${DISTRO}.ini
[${DISTRO}]
@ -60,7 +44,7 @@ makeinstall_target() {
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/uenv.txt" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/uenv.txt
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/tegra210-icosa.dtb" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/tegra210-icosa.dtb
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/uartb_logging.dtbo" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/uartb_logging.dtbo
[ -f "\${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini" ] && rm \${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini
[ -f "\${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini" ] && grep "l4t=1" "\${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini" && [ $? = "1" ] && rm \${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/nx-plat.dtimg" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/nx-plat.dtimg
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/boot/boot.scr" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/boot/boot.scr
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/boot/bl31.bin" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/boot/bl31.bin
@ -70,12 +54,13 @@ makeinstall_target() {
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/splash.bmp" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/splash.bmp
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/README_CONFIG.txt" ] && rm \${BOOT_ROOT}/${DISTRO_PATH}/README_CONFIG.txt
mkdir -p \${BOOT_ROOT}/${DISTRO_PATH}/boot
[ -f "\${BOOT_ROOT}/${DISTRO_PATH}/storage/.config/retroarch/retroarch.cfg" ] && sed -i -e 's|input_player1_joypad_index = "2"|input_player1_joypad_index = "0"|' \${BOOT_ROOT}/${DISTRO_PATH}/storage/.config/retroarch/retroarch.cfg
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/nx-plat.dtimg \${BOOT_ROOT}/${DISTRO_PATH}/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/README_CONFIG.txt \${BOOT_ROOT}/${DISTRO_PATH}/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/boot.scr \${BOOT_ROOT}/${DISTRO_PATH}/boot/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/bl31.bin \${BOOT_ROOT}/${DISTRO_PATH}/boot/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/bl33.bin \${BOOT_ROOT}/${DISTRO_PATH}/boot/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/${DISTRO}.ini \${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini
[ ! -f "\${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini" ] && cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/${DISTRO}.ini \${BOOT_ROOT}/bootloader/ini/${DISTRO}.ini
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/splash.bmp \${BOOT_ROOT}/${DISTRO_PATH}/boot/
cp \${SYSTEM_ROOT}/usr/share/bootloader/boot/${DISTRO_ICON} \${BOOT_ROOT}/${DISTRO_PATH}/boot/
EOF

@ -0,0 +1,6 @@
alias hid:b0005g*v0000045Ep000002E0 hid_xpadneo
alias hid:b0005g*v0000045Ep000002FD hid_xpadneo
alias hid:b0005g*v0000045Ep00000B05 hid_xpadneo
alias hid:b0005g*v0000045Ep00000B13 hid_xpadneo
alias hid:b0005g*v0000045Ep00000B20 hid_xpadneo
alias hid:b0005g*v0000045Ep00000B22 hid_xpadneo

@ -0,0 +1,30 @@
PKG_NAME="switch-bsp"
PKG_VERSION="1.2"
PKG_LICENSE="GPL"
PKG_DEPENDS_TARGET="joycond rewritefs xdotool alsa-lib alsa-ucm-conf usb-gadget-scripts"
PKG_SECTION="virtual"
PKG_LONGDESC="LibreELEC Nintendo Switch Board Support"
if [ ! "${DISTRO}" = "LibreELEC" ]; then
PKG_DEPENDS_TARGET+=" mergerfs v4l-utils" # We use this for CEC in lakka, in libreELEC kodi handles that via libCEC.
fi
post_install() {
enable_service xorg-configure-switch.service
enable_service var-bluetoothconfig.mount
enable_service pair-joycon.service
enable_service fix-permissions.service
enable_service alsa-init.service
mkdir -p ${INSTALL}/usr/bin
cp -Pv ${PKG_DIR}/scripts/pair-joycon.sh ${INSTALL}/usr/bin
cp -Pv ${PKG_DIR}/scripts/dock-hotplug ${INSTALL}/usr/bin
cp -pv ${PKG_DIR}/scripts/fix-sysfs-permissions.sh ${INSTALL}/usr/bin
mkdir -p ${INSTALL}/usr/share/alsa/ucm2
cp -Prv ${PKG_DIR}/ucm_data/* ${INSTALL}/usr/share/alsa/ucm2/
#Fix Script Permissions
chmod +x ${INSTALL}/usr/bin/pair-joycon.sh
chmod +x ${INSTALL}/usr/bin/dock-hotplug
chmod +x ${INSTALL}/usr/bin/fix-sysfs-permissions.sh
}

@ -22,7 +22,7 @@ dock_hotplug_handle() {
do
if [ ! -e "$x" ]; then continue; fi
export DISPLAY=":${x#X}"
PULSE_SERVER="127.0.0.1"
export PULSE_SERVER="127.0.0.1"
if [[ "$1" -eq 1 ]]
then
@ -37,17 +37,6 @@ dock_hotplug_handle() {
# Reapply config to avoid X stubbornness.
sleep 0.2
xrandr --output DSI-0 --off --output DP-0 $DP_SETTINGS
#AutoSwitch CPU/GPU profiles
if [ ! "$(cat /proc/cmdline | grep dock_freq_switch_enabled=1)" = "" ]; then
if [ "$(cpu-profile get)" = "Stock Performance" ]; then
cpu-profile set "Maximum Performance"
fi
if [ "$(gpu-profile get)" = "Handheld Stock Mode" ]; then
gpu-profile set "Docked Stock Mode"
fi
fi
else
xrandr --output DSI-0 --primary --mode 720x1280 --rotate left --panning 1280x720+0+0 --pos 0x0 --dpi 237 --output DP-0 --off
pactl set-card-profile 1 HiFi
@ -59,17 +48,7 @@ dock_hotplug_handle() {
# Reapply config to avoid X stubbornness.
sleep 0.2
xrandr --output DP-0 --off --output DSI-0 --primary --mode 720x1280 --rotate left --panning 1280x720+0+0 --pos 0x0 --dpi 237
#AutoSwitch CPU/GPU profiles
if [ ! "$(cat /proc/cmdline | grep dock_freq_switch_enabled=1)" = "" ]; then
if [ "$(cpu-profile get)" = "Maximum Performance" ]; then
cpu-profile set "Stock Performance"
fi
if [ "$(gpu-profile get)" = "Docked Stock Mode" ]; then
gpu-profile set "Handheld Stock Mode"
fi
fi
fi
fi
done
# Wait for X to set current resolution.
@ -90,10 +69,12 @@ if [[ "$1" -eq 1 ]]; then LOOPS=5; fi
while [ "$i" -le "$LOOPS" ]; do
if grep -q 1 "/sys/class/switch/dp/state"; then DP_ENABLED=1; else DP_ENABLED=0; fi
# Prepare CEC info.
if [ ! "$(cat /proc/cmdline | grep cec_enabled=1)" = "" ]; then
if [[ "$DP_ENABLED" -eq 0 ]]; then cec-ctl -C
else cec-ctl -s -o NintendoSwitch --playback --active-source phys-addr="$(cec-ctl | sed -n 's/.*Physical Address.*: //p')"; fi
# Prepare CEC info. ignore if libreelec, kodi will handle this.
if [ "$(cat /etc/os-release | grep LibreELEC)" = "" ]; then
if [ -f /tmp/.CEC ]; then
if [[ "$DP_ENABLED" -eq 0 ]]; then cec-ctl -C
else cec-ctl -s -o NintendoSwitch --playback --active-source phys-addr="$(cec-ctl | sed -n 's/.*Physical Address.*: //p')"; fi
fi
fi
# Configure dock

@ -0,0 +1,27 @@
#!/bin/sh
#Allow all users to take advantage of changing Clock stuff, and setting R2P stuff.
#CPU
/usr/bin/busybox chmod 766 /sys/kernel/tegra_cpufreq/overclock
/usr/bin/busybox chmod 766 /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
/usr/bin/busybox chmod 766 /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq
/usr/bin/busybox chmod 766 /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq
#GPU
/usr/bin/busybox chmod 766 /sys/devices/57000000.gpu/devfreq/57000000.gpu/governor
/usr/bin/busybox chmod 766 /sys/devices/57000000.gpu/devfreq/57000000.gpu/max_freq
/usr/bin/busybox chmod 766 /sys/devices/57000000.gpu/devfreq/57000000.gpu/min_freq
#Bluetooth ERTM disable toggle
/usr/bin/busybox chmod 766 /sys/module/bluetooth/parameters/disable_ertm
#R2P
/usr/bin/busybox chmod 766 /sys/module/pmc_r2p/parameters/enabled
/usr/bin/busybox chmod 766 /sys/module/pmc_r2p/parameters/action
/usr/bin/busybox chmod 766 /sys/module/pmc_r2p/parameters/entry_id
/usr/bin/busybox chmod 766 /sys/module/pmc_r2p/parameters/param1
/usr/bin/busybox chmod 766 /sys/module/pmc_r2p/parameters/param2
#Brightness
/usr/bin/busybox chmod 766 /sys/class/backlight/backlight/brightness

@ -0,0 +1,216 @@
#!/bin/bash
if [[ -f /flash/switchroot/joycon_mac.ini ]]; then
# Collect joycon_00 info from ini
JOYCON_00_TYPE=$(sed -nr "/^\[joycon_00\]/ { :l /^type[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n" )
JOYCON_00_MAC=$(sed -nr "/^\[joycon_00\]/ { :l /^mac[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_00_HOST_MAC=$(sed -nr "/^\[joycon_00\]/ { :l /^host[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_00_LTK=$(sed -nr "/^\[joycon_00\]/ { :l /^ltk[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
if [[ -z ${JOYCON_00_TYPE} ]]; then
JOYCON_00_TYPE="0"
fi
# collect joycon_01 info from ini
JOYCON_01_TYPE=$(sed -nr "/^\[joycon_01\]/ { :l /^type[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_01_MAC=$(sed -nr "/^\[joycon_01\]/ { :l /^mac[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_01_HOST_MAC=$(sed -nr "/^\[joycon_01\]/ { :l /^host[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_01_LTK=$(sed -nr "/^\[joycon_01\]/ { :l /^ltk[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
if [[ -z ${JOYCON_01_TYPE} ]]; then
JOYCON_01_TYPE="0"
fi
# Collect joycon_02 info from ini
JOYCON_02_TYPE=$(sed -nr "/^\[joycon_02\]/ { :l /^type[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_02_MAC=$(sed -nr "/^\[joycon_02\]/ { :l /^mac[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_02_HOST_MAC=$(sed -nr "/^\[joycon_02\]/ { :l /^host[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
JOYCON_02_LTK=$(sed -nr "/^\[joycon_02\]/ { :l /^ltk[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" /flash/switchroot/joycon_mac.ini | tr -d "\\r\\n")
if [[ -z ${JOYCON_02_TYPE} ]]; then
JOYCON_02_TYPE="0"
fi
# Handle Host BT MAC. Agnostically.
if [[ ! ${JOYCON_00_TYPE} == "0" ]]; then
BT_MAC_ADDR=${JOYCON_00_HOST_MAC}
elif [[ ! ${JOYCON_01_TYPE} == "0" ]]; then
BT_MAC_ADDR=${JOYCON_01_HOST_MAC}
fi
# Handle Joycon Pair data.
if [[ ${JOYCON_00_TYPE} == "1" ]]; then
BT_DEV_00_NAME="Joy-Con (L)"
BT_DEV_00_ID=8198
BT_DEV_00_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920060902030900010902042801090205090002"
elif [[ ${JOYCON_00_TYPE} == "2" ]]; then
BT_DEV_00_NAME="Joy-Con (R)"
BT_DEV_00_ID=8199
BT_DEV_00_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920070902030900010902042801090205090002"
elif [[ ${JOYCON_00_TYPE} == "3" ]]; then
BT_DEV_01_NAME="Pro Controller"
BT_DEV_01_ID=8201
BT_DEV_01_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920090902030900010902042801090205090002"
fi
if [[ ${JOYCON_01_TYPE} == "1" ]]; then
BT_DEV_01_NAME="Joy-Con (L)"
BT_DEV_01_ID=8198
BT_DEV_01_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920060902030900010902042801090205090002"
elif [[ ${JOYCON_01_TYPE} == "2" ]]; then
BT_DEV_01_NAME="Joy-Con (R)"
BT_DEV_01_ID=8199
BT_DEV_01_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920070902030900010902042801090205090002"
elif [[ ${JOYCON_01_TYPE} == "3" ]]; then
BT_DEV_01_NAME="Pro Controller"
BT_DEV_01_ID=8201
BT_DEV_01_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920090902030900010902042801090205090002"
fi
if [[ ${JOYCON_02_TYPE} == "1" ]]; then
BT_DEV_02_NAME="Joy-Con (L)"
BT_DEV_02_ID=8198
BT_DEV_02_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920060902030900010902042801090205090002"
elif [[ ${JOYCON_02_TYPE} == "2" ]]; then
BT_DEV_02_NAME="Joy-Con (R)"
BT_DEV_02_ID=8199
BT_DEV_02_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920070902030900010902042801090205090002"
elif [[ ${JOYCON_02_TYPE} == "3" ]]; then
BT_DEV_02_NAME="Pro Controller"
BT_DEV_02_ID=8201
BT_DEV_02_SERVICE_RECORDS="0x00000000=356E0900000A000000000900013503191000090004350D350619010009000135031900010900053503191002090006350909656E09006A090100090009350835061901000901000901002510576972656C6573732047616D65706164090101250747616D657061640902003503090100
0x00010000=36017D0900000A000100000900013503191124090004350D350619010009001135031900110900053503191002090006350909656E09006A0901000900093508350619112409010109000D350F350D350619010009001335031900110901002510576972656C6573732047616D65706164090101250747616D6570616409010225084E696E74656E646F090201090111090202080809020308210902042801090205280109020635B035AE082225AA05010905A1010601FF8521092175089530810285300930750895308102853109317508966901810285320932750896690181028533093375089669018102853F05091901291015002501750195108102050109391500250775049501814205097504950181010501093009310933093416000027FFFF00007510950481020601FF85010901750895309102851009107508953091028511091175089530910285120912750895309102C009020735083506090409090100090209280109020A280109020C090C8009020D280009020E2800
0x00010001=358C0900000A000100010900013503191200090004350D35061901000900013503190001090006350909656E09006A09010009000935083506191200090100090100251B576972656C6573732047616D6570616420506E5020536572766572090101250747616D6570616409020009010309020109057E0902020920090902030900010902042801090205090002"
fi
if [[ ! -d /var/bluetoothconfig/${BT_MAC_ADDR}/cache ]]; then
mkdir -p /var/bluetoothconfig/${BT_MAC_ADDR}/cache
fi
if [[ ! ${JOYCON_00_TYPE} == "0" ]]; then
if [[ ! -d /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_00_MAC} ]] || [[ ! $(grep -q ${JOYCON_00_LTK} /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_00_MAC}/info; echo $?) -eq 0 ]]; then
mkdir -p /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_00_MAC}
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_00_MAC}/info
[General]
Name=${BT_DEV_00_NAME}
Class=0x000508
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;
[LinkKey]
Key=${JOYCON_00_LTK}
Type=4
PINLength=0
[DeviceID]
Source=2
Vendor=1406
Product=${BT_DEV_00_ID}
Version=1
[ConnectionParameters]
MinInterval=5
MaxInterval=15
Latency=120
Timeout=600
EOF
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/cache/${JOYCON_00_MAC}
[General]
Name=${BT_DEV_00_NAME}
[ServiceRecords]
${BT_DEV_00_SERVICE_RECORDS}
EOF
fi
fi
if [[ ! ${JOYCON_01_TYPE} == "0" ]]; then
if [[ ! -d /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_01_MAC} ]] || [[ ! $(grep -q ${JOYCON_01_LTK} /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_01_MAC}/info; echo $?) -eq 0 ]]; then
mkdir -p /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_01_MAC}
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_01_MAC}/info
[General]
Name=${BT_DEV_01_NAME}
Class=0x000508
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;
[LinkKey]
Key=${JOYCON_01_LTK}
Type=4
PINLength=0
[DeviceID]
Source=2
Vendor=1406
Product=${BT_DEV_01_ID}
Version=1
[ConnectionParameters]
MinInterval=5
MaxInterval=15
Latency=120
Timeout=600
EOF
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/cache/${JOYCON_01_MAC}
[General]
Name=${BT_DEV_01_NAME}
[ServiceRecords]
${BT_DEV_01_SERVICE_RECORDS}
EOF
fi
fi
if [[ ! ${JOYCON_02_TYPE} == "0" ]]; then
if [[ ! -d /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_02_MAC} ]] || [[ ! $(grep -q ${JOYCON_02_LTK} /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_02_MAC}/info; echo $?) -eq 0 ]]; then
mkdir -p /var/bluetoothconfig/bluetooth/${BT_MAC_ADDR}/${JOYCON_02_MAC}
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/${JOYCON_02_MAC}/info
[General]
Name=${BT_DEV_02_NAME}
Class=0x002508
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;
[LinkKey]
Key=${JOYCON_02_LTK}
Type=4
PINLength=0
[DeviceID]
Source=2
Vendor=1406
Product=${BT_DEV_02_ID}
Version=1
[ConnectionParameters]
MinInterval=5
MaxInterval=15
Latency=120
Timeout=600
EOF
cat << EOF > /var/bluetoothconfig/${BT_MAC_ADDR}/cache/${JOYCON_02_MAC}
[General]
Name=${BT_DEV_02_NAME}
[ServiceRecords]
${BT_DEV_02_SERVICE_RECORDS}
EOF
fi
fi
fi

@ -0,0 +1,15 @@
[Unit]
Description=Fix permissions on sysfs nodes.
Before=graphical.target kodi.service retroarch.service
After=multi-user.target
After=xorg.service
[Service]
Environment=TERM=linux
Type=oneshot
ExecStart=/usr/bin/fix-sysfs-permissions.sh
StandardError=journal
RemainAfterExit=no
[Install]
WantedBy=graphical.target

@ -7,7 +7,7 @@ Before=bluetooth.service
Environment=TERM=linux
Type=oneshot
ExecStart=/usr/bin/pair-joycon.sh
StandardError=syslog
StandardError=journal
RemainAfterExit=no
[Install]

Some files were not shown because too many files have changed in this diff Show More