[packages/chiaki-ng] - up to 1.9.9 with upstream git updates

baggins baggins at pld-linux.org
Tue Feb 17 23:31:59 CET 2026


commit cffb97a180032eaa883e163ac57a61789e11740c
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Wed Feb 18 00:31:33 2026 +0100

    - up to 1.9.9 with upstream git updates

 chiaki-ng.spec |   8 +-
 curl-lib.patch |  11 -
 git.patch      | 957 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 961 insertions(+), 15 deletions(-)
---
diff --git a/chiaki-ng.spec b/chiaki-ng.spec
index b3651f4..46faf85 100644
--- a/chiaki-ng.spec
+++ b/chiaki-ng.spec
@@ -4,13 +4,13 @@
 #
 Summary:	PlayStation Remote Play for Everyone
 Name:		chiaki-ng
-Version:	1.9.8
+Version:	1.9.9
 Release:	1
 License:	AGPL v3
 Group:		X11/Applications/Networking
 Source0:	https://github.com/streetpea/chiaki-ng/archive/v%{version}/%{name}-%{version}.tar.gz
-# Source0-md5:	6e5be68d23d14e01cf586ccaf2561892
-Patch0:		curl-lib.patch
+# Source0-md5:	9aa32f13d1fa4e015d74a3f904e230fb
+Patch0:		git.patch
 URL:		https://streetpea.github.io/chiaki-ng/
 BuildRequires:	Qt6Concurrent-devel
 BuildRequires:	Qt6Core-devel
@@ -52,7 +52,7 @@ Entertainment LLC.
 
 %prep
 %setup -q
-%patch -P 0 -p1
+%patch -P0 -p1
 
 %build
 mkdir -p build
diff --git a/curl-lib.patch b/curl-lib.patch
deleted file mode 100644
index a7f107c..0000000
--- a/curl-lib.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- chiaki-ng-1.9.3/lib/CMakeLists.txt~	2024-12-13 01:40:04.000000000 +0100
-+++ chiaki-ng-1.9.3/lib/CMakeLists.txt	2025-01-08 00:28:22.069998103 +0100
-@@ -153,7 +153,7 @@
- if (CHIAKI_ENABLE_SWITCH_CURL)
- 	target_link_libraries(chiaki-lib CURL::libcurl)
- elseif (CHIAKI_USE_SYSTEM_CURL)
--	target_link_libraries(chiaki-lib CURL::libcurl_shared)
-+	target_link_libraries(chiaki-lib CURL::libcurl)
- else()
- 	target_link_libraries(chiaki-lib CURL::libcurl_static)
- endif()
diff --git a/git.patch b/git.patch
new file mode 100644
index 0000000..4531991
--- /dev/null
+++ b/git.patch
@@ -0,0 +1,957 @@
+diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt
+index 91ad433e..7e777e1f 100755
+--- a/gui/CMakeLists.txt
++++ b/gui/CMakeLists.txt
+@@ -8,6 +8,10 @@ if(APPLE)
+ endif()
+ 
+ find_package(Qt6 REQUIRED COMPONENTS Core Gui Concurrent Svg Qml Quick Widgets)
++if(Qt6_VERSION VERSION_GREATER_EQUAL "6.10.0")
++	find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
++endif()
++
+ find_package(Qt6 COMPONENTS WebEngineQuick)
+ find_package(Qt6 COMPONENTS DBus)
+ 
+@@ -101,10 +105,12 @@ if(CHIAKI_ENABLE_CLI)
+ endif()
+ 
+ target_link_libraries(chiaki Qt::Core Qt::Gui Qt::GuiPrivate Qt::Concurrent Qt::Svg Qt::Qml Qt::Quick Qt::Widgets)
+-if (${Qt6DBus_FOUND} AND NOT WIN32 AND NOT APPLE)
++if (${Qt6DBus_FOUND} AND NOT WIN32)
+ 	target_link_libraries(chiaki Qt::DBus)
++if (NOT APPLE)
+ 	target_compile_definitions(chiaki PRIVATE CHIAKI_HAVE_DBUS)
+ endif()
++endif()
+ if (${Qt6WebEngineQuick_FOUND})
+ 	target_link_libraries(chiaki Qt::WebEngineQuick)
+ 	target_compile_definitions(chiaki PRIVATE CHIAKI_HAVE_WEBENGINE)
+@@ -152,4 +158,4 @@ install(TARGETS chiaki
+ 		BUNDLE DESTINATION bin)
+ install(FILES chiaking.desktop DESTINATION share/applications)
+ install(FILES chiaking.png DESTINATION share/icons/hicolor/512x512/apps)
+-install(FILES io.github.streetpea.Chiaki4deck.appdata.xml DESTINATION share/metainfo)
+\ No newline at end of file
++install(FILES io.github.streetpea.Chiaki4deck.appdata.xml DESTINATION share/metainfo)
+diff --git a/gui/include/qmlsettings.h b/gui/include/qmlsettings.h
+index 2f48017e..606f2f5e 100644
+--- a/gui/include/qmlsettings.h
++++ b/gui/include/qmlsettings.h
+@@ -75,6 +75,7 @@ class QmlSettings : public QObject
+     Q_PROPERTY(bool mouseTouchEnabled READ mouseTouchEnabled WRITE setMouseTouchEnabled NOTIFY mouseTouchEnabledChanged)
+     Q_PROPERTY(bool keyboardEnabled READ keyboardEnabled WRITE setKeyboardEnabled NOTIFY keyboardEnabledChanged)
+     Q_PROPERTY(bool dpadTouchEnabled READ dpadTouchEnabled WRITE setDpadTouchEnabled NOTIFY dpadTouchEnabledChanged)
++    Q_PROPERTY(bool iDROnFECFailureEnabled READ iDROnFECFailureEnabled WRITE setIDROnFECFailureEnabled NOTIFY iDROnFECFailureEnabledChanged)
+     Q_PROPERTY(uint16_t dpadTouchIncrement READ dpadTouchIncrement WRITE setDpadTouchIncrement NOTIFY dpadTouchIncrementChanged)
+     Q_PROPERTY(uint dpadTouchShortcut1 READ dpadTouchShortcut1 WRITE setDpadTouchShortcut1 NOTIFY dpadTouchShortcut1Changed)
+     Q_PROPERTY(uint dpadTouchShortcut2 READ dpadTouchShortcut2 WRITE setDpadTouchShortcut2 NOTIFY dpadTouchShortcut2Changed)
+@@ -204,6 +205,9 @@ public:
+     bool buttonsByPosition() const;
+     void setButtonsByPosition(bool buttonsByPosition);
+ 
++    bool iDROnFECFailureEnabled() const;
++    void setIDROnFECFailureEnabled(bool enabled);
++
+     bool allowJoystickBackgroundEvents() const;
+     void setAllowJoystickBackgroundEvents(bool allowJoystickBackgroundEvents);
+ 
+@@ -638,6 +642,7 @@ signals:
+     void streamMenuShortcut4Changed();
+     void controllerMappingChanged();
+     void packetLossMaxChanged();
++    void iDROnFECFailureEnabledChanged();
+     void currentProfileChanged();
+     void profilesChanged();
+     void placeboUpscalerChanged();
+diff --git a/gui/include/settings.h b/gui/include/settings.h
+index 40afabf3..cfc661be 100644
+--- a/gui/include/settings.h
++++ b/gui/include/settings.h
+@@ -274,6 +274,9 @@ class Settings : public QObject
+ 		bool GetFullscreenDoubleClickEnabled() const	   { return settings.value("settings/fullscreen_doubleclick", false).toBool(); }
+ 		void SetFullscreenDoubleClickEnabled(bool enabled) { settings.setValue("settings/fullscreen_doubleclick", enabled); }
+ 
++		bool GetIDROnFECFailureEnabled() const	   { return settings.value("settings/idr_on_fec_failure", true).toBool(); }
++		void SetIDROnFECFailureEnabled(bool enabled) { settings.setValue("settings/idr_on_fec_failure", enabled); }
++
+ 		float GetHapticOverride() const 			{ return settings.value("settings/haptic_override", 1.0).toFloat(); }
+ 		void SetHapticOverride(float override)	{ settings.setValue("settings/haptic_override", override); }
+ 
+diff --git a/gui/include/streamsession.h b/gui/include/streamsession.h
+index d603a1d4..a01ea267 100755
+--- a/gui/include/streamsession.h
++++ b/gui/include/streamsession.h
+@@ -94,6 +94,7 @@ struct StreamSessionConnectInfo
+ 	ChiakiDisableAudioVideo audio_video_disabled;
+ 	RumbleHapticsIntensity rumble_haptics_intensity;
+ 	bool buttons_by_pos;
++	bool enable_idr_on_fec_failure;
+ 	bool start_mic_unmuted;
+ #if CHIAKI_GUI_ENABLE_STEAMDECK_NATIVE
+ 	bool vertical_sdeck;
+diff --git a/gui/src/main.cpp b/gui/src/main.cpp
+index 2c7ff40e..d50d6935 100644
+--- a/gui/src/main.cpp
++++ b/gui/src/main.cpp
+@@ -67,6 +67,9 @@ int real_main(int argc, char *argv[])
+ 	QGuiApplication::setApplicationName("Chiaki");
+ 	QGuiApplication::setApplicationVersion(CHIAKI_VERSION);
+ 	QGuiApplication::setApplicationDisplayName("chiaki-ng");
++#if defined(Q_OS_MACOS)
++	qputenv("QT_MTL_NO_TRANSACTION", "1");
++#endif
+ #if defined(Q_OS_LINUX)
+ 	if(qEnvironmentVariableIsSet("FLATPAK_ID"))
+ 		QGuiApplication::setDesktopFileName(qEnvironmentVariable("FLATPAK_ID"));
+diff --git a/gui/src/qml/PSNLoginDialog.qml b/gui/src/qml/PSNLoginDialog.qml
+index 80980063..50a70008 100644
+--- a/gui/src/qml/PSNLoginDialog.qml
++++ b/gui/src/qml/PSNLoginDialog.qml
+@@ -27,6 +27,8 @@ DialogView {
+         {
+             nativeLoginForm.visible = true;
+             nativeLoginForm.forceActiveFocus(Qt.TabFocusReason);
++            if(Qt.platform.os == "linux" || Qt.platform.os == "osx")
++                extBrowserButton.clicked();
+         }
+         else
+         {
+diff --git a/gui/src/qml/PSNTokenDialog.qml b/gui/src/qml/PSNTokenDialog.qml
+index 4b4a57fe..fd46d840 100644
+--- a/gui/src/qml/PSNTokenDialog.qml
++++ b/gui/src/qml/PSNTokenDialog.qml
+@@ -39,6 +39,8 @@ DialogView {
+         Chiaki.settings.remotePlayAsk = true;
+         nativeTokenForm.visible = true;
+         nativeTokenForm.forceActiveFocus(Qt.TabFocusReason);
++        if(Qt.platform.os == "linux" || Qt.platform.os == "osx")
++            extBrowserButton.clicked();
+     }
+     function close() {
+         if(webView.web)
+diff --git a/gui/src/qml/SettingsDialog.qml b/gui/src/qml/SettingsDialog.qml
+index 1a0f1108..6cc2c3fb 100644
+--- a/gui/src/qml/SettingsDialog.qml
++++ b/gui/src/qml/SettingsDialog.qml
+@@ -1546,10 +1546,27 @@ DialogView {
+                             text: qsTr("(5%)")
+                         }
+ 
++                        Label {
++                            Layout.alignment: Qt.AlignRight
++                            text: qsTr("Request IDR Frame on FEC Failure")
++                        }
++
++                        C.CheckBox {
++                            lastInFocusChain: true
++                            checked: Chiaki.settings.iDROnFECFailureEnabled
++                            onToggled: Chiaki.settings.iDROnFECFailureEnabled = !Chiaki.settings.iDROnFECFailureEnabled
++                        }
++
++                        Label {
++                            Layout.alignment: Qt.AlignRight
++                            text: qsTr("(Checked)")
++                        }
++
+                         Label {
+                             Layout.alignment: Qt.AlignRight
+                             text: qsTr("Show Stream Stats During Gameplay")
+                         }
++
+                         C.CheckBox {
+                             lastInFocusChain: true
+                             checked: Chiaki.settings.showStreamStats
+diff --git a/gui/src/qmlbackend.cpp b/gui/src/qmlbackend.cpp
+index 420427c1..e1786d14 100644
+--- a/gui/src/qmlbackend.cpp
++++ b/gui/src/qmlbackend.cpp
+@@ -2123,31 +2123,17 @@ void QmlBackend::createSteamShortcut(QString shortcutName, QString launchOptions
+ QString QmlBackend::openPsnLink()
+ {
+     QUrl url = psnLoginUrl();
+-    if(QDesktopServices::openUrl(url) && (qEnvironmentVariable("XDG_CURRENT_DESKTOP") != "gamescope"))
+-    {
+-        qCWarning(chiakiGui) << "Launched browser.";
+-        return QString();
+-    }
+-    else
+-    {
+-        qCWarning(chiakiGui) << "Could not launch browser.";
+-        return QString(url.toEncoded());
+-    }
++    QDesktopServices::openUrl(url);
++    url = psnLoginUrl();
++    return QString(url.toEncoded());
+ }
+ 
+ QString QmlBackend::openPlaceboOptionsLink()
+ {
+     QUrl url = QUrl("https://libplacebo.org/options/");
+-    if(QDesktopServices::openUrl(url) && (qEnvironmentVariable("XDG_CURRENT_DESKTOP") != "gamescope"))
+-    {
+-        qCWarning(chiakiGui) << "Launched browser.";
+-        return QString();
+-    }
+-    else
+-    {
+-        qCWarning(chiakiGui) << "Could not launch browser.";
+-        return QString(url.toEncoded());
+-    }
++    QDesktopServices::openUrl(url);
++    url = psnLoginUrl();
++    return QString(url.toEncoded());
+ }
+ 
+ bool QmlBackend::checkPsnRedirectURL(const QUrl &url) const
+diff --git a/gui/src/qmlmainwindow.cpp b/gui/src/qmlmainwindow.cpp
+index f00e847b..b7da28e2 100644
+--- a/gui/src/qmlmainwindow.cpp
++++ b/gui/src/qmlmainwindow.cpp
+@@ -96,14 +96,13 @@ QmlMainWindow::QmlMainWindow(const StreamSessionConnectInfo &connect_info)
+     init(connect_info.settings);
+     backend->createSession(connect_info);
+ 
++    if (connect_info.fullscreen || connect_info.zoom || connect_info.stretch)
++        fullscreenTime();
+     if (connect_info.zoom)
+         setVideoMode(VideoMode::Zoom);
+     else if (connect_info.stretch)
+         setVideoMode(VideoMode::Stretch);
+ 
+-    if (connect_info.fullscreen || connect_info.zoom || connect_info.stretch)
+-        fullscreenTime();
+-
+     connect(session, &StreamSession::SessionQuit, qGuiApp, &QGuiApplication::quit);
+ }
+ 
+diff --git a/gui/src/qmlsettings.cpp b/gui/src/qmlsettings.cpp
+index 395261ed..edd90612 100644
+--- a/gui/src/qmlsettings.cpp
++++ b/gui/src/qmlsettings.cpp
+@@ -192,6 +192,17 @@ void QmlSettings::setRumbleHapticsIntensity(int intensity)
+     emit rumbleHapticsIntensityChanged();
+ }
+ 
++bool QmlSettings::iDROnFECFailureEnabled() const
++{
++    return settings->GetIDROnFECFailureEnabled();
++}
++
++void QmlSettings::setIDROnFECFailureEnabled(bool enabled)
++{
++    settings->SetIDROnFECFailureEnabled(enabled);
++    emit iDROnFECFailureEnabledChanged();
++}
++
+ #ifdef CHIAKI_GUI_ENABLE_STEAMDECK_NATIVE
+ bool QmlSettings::steamDeckHaptics() const
+ {
+diff --git a/gui/src/streamsession.cpp b/gui/src/streamsession.cpp
+index ad1e5b6f..e89d2d9d 100755
+--- a/gui/src/streamsession.cpp
++++ b/gui/src/streamsession.cpp
+@@ -111,6 +111,7 @@ StreamSessionConnectInfo::StreamSessionConnectInfo(
+ 	this->mouse_touch_enabled = settings->GetMouseTouchEnabled();
+ 	this->enable_keyboard = false; // TODO: from settings
+ 	this->enable_dualsense = true;
++	this->enable_idr_on_fec_failure = settings->GetIDROnFECFailureEnabled();
+ 	this->rumble_haptics_intensity = settings->GetRumbleHapticsIntensity();
+ 	this->buttons_by_pos = settings->GetButtonsByPosition();
+ 	this->start_mic_unmuted = settings->GetStartMicUnmuted();
+@@ -271,6 +272,7 @@ StreamSession::StreamSession(const StreamSessionConnectInfo &connect_info, QObje
+ 	chiaki_connect_info.video_profile = connect_info.video_profile;
+ 	chiaki_connect_info.video_profile_auto_downgrade = true;
+ 	chiaki_connect_info.enable_keyboard = false;
++	chiaki_connect_info.enable_idr_on_fec_failure = connect_info.enable_idr_on_fec_failure;
+ 	chiaki_connect_info.enable_dualsense = connect_info.enable_dualsense;
+ 	chiaki_connect_info.packet_loss_max = connect_info.packet_loss_max;
+ 	chiaki_connect_info.auto_regist = connect_info.auto_regist;
+@@ -1804,7 +1806,7 @@ void StreamSession::Event(ChiakiEvent *event)
+ 		case CHIAKI_EVENT_QUIT:
+ 			if(!connected && !holepunch_session && chiaki_quit_reason_is_error(event->quit.reason) && connect_timer.elapsed() < SESSION_RETRY_SECONDS * 1000)
+ 			{
+-				QTimer::singleShot(1000, this, &StreamSession::Start);
++				QTimer::singleShot(SESSION_RETRY_SECONDS / 3, this, &StreamSession::Start);
+ 				return;
+ 			}
+ 			connected = false;
+diff --git a/lib/include/chiaki/session.h b/lib/include/chiaki/session.h
+index 02e0b222..fcf4c850 100644
+--- a/lib/include/chiaki/session.h
++++ b/lib/include/chiaki/session.h
+@@ -88,6 +88,7 @@ typedef struct chiaki_connect_info_t
+ 	chiaki_socket_t *rudp_sock;
+ 	uint8_t psn_account_id[CHIAKI_PSN_ACCOUNT_ID_SIZE];
+ 	double packet_loss_max;
++	bool enable_idr_on_fec_failure;
+ } ChiakiConnectInfo;
+ 
+ 
+@@ -217,6 +218,7 @@ typedef struct chiaki_session_t
+ 		bool enable_keyboard;
+ 		bool enable_dualsense;
+ 		uint8_t psn_account_id[CHIAKI_PSN_ACCOUNT_ID_SIZE];
++		bool enable_idr_on_fec_failure;
+ 	} connect_info;
+ 
+ 	ChiakiTarget target;
+diff --git a/lib/include/chiaki/streamconnection.h b/lib/include/chiaki/streamconnection.h
+index ba3bcefc..56ec7b61 100644
+--- a/lib/include/chiaki/streamconnection.h
++++ b/lib/include/chiaki/streamconnection.h
+@@ -95,6 +95,7 @@ CHIAKI_EXPORT ChiakiErrorCode stream_connection_send_toggle_mute_direct_message(
+ CHIAKI_EXPORT ChiakiErrorCode chiaki_stream_connection_stop(ChiakiStreamConnection *stream_connection);
+ 
+ CHIAKI_EXPORT ChiakiErrorCode stream_connection_send_corrupt_frame(ChiakiStreamConnection *stream_connection, ChiakiSeqNum16 start, ChiakiSeqNum16 end);
++CHIAKI_EXPORT ChiakiErrorCode stream_connection_send_idr_request(ChiakiStreamConnection *stream_connection);
+ 
+ #ifdef __cplusplus
+ }
+diff --git a/lib/include/chiaki/videoreceiver.h b/lib/include/chiaki/videoreceiver.h
+index 6eae5b29..f0878add 100644
+--- a/lib/include/chiaki/videoreceiver.h
++++ b/lib/include/chiaki/videoreceiver.h
+@@ -33,6 +33,7 @@ typedef struct chiaki_video_receiver_t
+ 	int32_t frames_lost;
+ 	int32_t reference_frames[16];
+ 	ChiakiBitstream bitstream;
++	bool waiting_for_idr;
+ } ChiakiVideoReceiver;
+ 
+ CHIAKI_EXPORT void chiaki_video_receiver_init(ChiakiVideoReceiver *video_receiver, struct chiaki_session_t *session, ChiakiPacketStats *packet_stats);
+diff --git a/lib/src/ctrl.c b/lib/src/ctrl.c
+index 2bfeb91b..400c1c4a 100644
+--- a/lib/src/ctrl.c
++++ b/lib/src/ctrl.c
+@@ -1282,6 +1282,23 @@ static ChiakiErrorCode ctrl_connect(ChiakiCtrl *ctrl)
+ 		err = chiaki_send_recv_http_header_psn(session->rudp, session->log, &remote_counter, send_buf, request_len, buf, sizeof(buf), &header_size, &received_size);
+ 	else
+ 		err = chiaki_recv_http_header(ctrl->sock, buf, sizeof(buf), &header_size, &received_size, &ctrl->notif_pipe, CTRL_EXPECT_TIMEOUT);
++	if (err == CHIAKI_ERR_TIMEOUT)
++	{
++		CHIAKI_LOGI(session->log, "Initial ctrl startup request timed out, resending ...");
++		memset(buf, 0, sizeof(buf));
++		if(session->rudp)
++			err = chiaki_send_recv_http_header_psn(session->rudp, session->log, &remote_counter, send_buf, request_len, buf, sizeof(buf), &header_size, &received_size);
++		else
++		{
++			int sent = send(ctrl->sock, (CHIAKI_SOCKET_BUF_TYPE)send_buf, (size_t)request_len, 0);
++			if(sent < 0)
++			{
++				CHIAKI_LOGE(session->log, "Failed to send ctrl request");
++				goto error;
++			}
++			err = chiaki_recv_http_header(ctrl->sock, buf, sizeof(buf), &header_size, &received_size, &ctrl->notif_pipe, CTRL_EXPECT_TIMEOUT);
++		}
++	}
+ 	if(err != CHIAKI_ERR_SUCCESS)
+ 	{
+ 		if(err != CHIAKI_ERR_CANCELED)
+diff --git a/lib/src/remote/holepunch.c b/lib/src/remote/holepunch.c
+index 84dc8a01..e5d8d7bf 100644
+--- a/lib/src/remote/holepunch.c
++++ b/lib/src/remote/holepunch.c
+@@ -2059,10 +2059,15 @@ static void* websocket_thread_func(void *user) {
+     size_t rlen;
+     size_t wlen;
+     bool expecting_pong = false;
+-    chiaki_mutex_lock(&session->stop_mutex);
+-    while (!session->ws_thread_should_stop)
++    while (true)
+     {
++        chiaki_mutex_lock(&session->stop_mutex);
++        bool should_stop = session->ws_thread_should_stop;
+         chiaki_mutex_unlock(&session->stop_mutex);
++
++        if (should_stop)
++            break;
++
+         now = chiaki_time_now_monotonic_us();
+ 
+         if (expecting_pong && now - last_ping_sent > 5LL * SECOND_US)
+@@ -2201,11 +2206,9 @@ static void* websocket_thread_func(void *user) {
+                 goto cleanup_json;
+             }
+         }
+-        chiaki_mutex_lock(&session->stop_mutex);
+     }
+ 
+ cleanup_json:
+-    chiaki_mutex_unlock(&session->stop_mutex);
+     json_tokener_free(tok);
+     free(buf);
+ cleanup:
+@@ -2324,6 +2327,8 @@ CHIAKI_EXPORT ChiakiErrorCode holepunch_session_create_offer(Session *session)
+     }
+ 
+     uint16_t local_port = ntohs(client_addr.sin_port);
++#ifndef __SWITCH__
++    // Switch doesn't support IPv6 - skip IPv6 socket creation
+     session->ipv6_sock = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
+     if (CHIAKI_SOCKET_IS_INVALID(session->ipv6_sock))
+     {
+@@ -2363,6 +2368,7 @@ CHIAKI_EXPORT ChiakiErrorCode holepunch_session_create_offer(Session *session)
+         err = CHIAKI_ERR_UNKNOWN;
+         goto cleanup_socket;
+     }
++#endif // __SWITCH__
+ 
+     size_t our_offer_msg_req_id = session->local_req_id;
+     session->local_req_id++;
+@@ -3619,11 +3625,6 @@ static ChiakiErrorCode check_candidates(
+     memcpy(candidates, candidates_received, num_candidates * sizeof(Candidate));
+     int responses_received[num_candidates + EXTRA_CANDIDATE_ADDRESSES];
+     fd_set fds;
+-    FD_ZERO(&fds);
+-    if(!CHIAKI_SOCKET_IS_INVALID(session->ipv4_sock))
+-        FD_SET(session->ipv4_sock, &fds);
+-    if(!CHIAKI_SOCKET_IS_INVALID(session->ipv6_sock))
+-        FD_SET(session->ipv6_sock, &fds);
+     bool failed = true;
+     char service_remote[6];
+     struct addrinfo hints;
+@@ -3788,35 +3789,51 @@ static ChiakiErrorCode check_candidates(
+     // Wait for responses
+     uint8_t response_buf[88];
+ 
+-    chiaki_socket_t maxfd = -1;
+-    if(!CHIAKI_SOCKET_IS_INVALID(session->ipv4_sock))
+-        maxfd = session->ipv4_sock;
+-    if(session->ipv6_sock > maxfd)
+-        maxfd = session->ipv6_sock;
+-    if(session->stun_random_allocation)
+-    {
+-        for(int i=0; i<RANDOM_ALLOCATION_SOCKS_NUMBER; i++)
+-        {
+-            if(socks[i] > maxfd)
+-                maxfd = socks[i];
+-            FD_SET(socks[i], &fds);
+-        }
+-    }
+-    maxfd = maxfd + 1;
+-
+-    struct timeval tv;
+-    tv.tv_sec = 0;
+-    tv.tv_usec = SELECT_CANDIDATE_TIMEOUT_SEC * SECOND_US;
+-
+     chiaki_socket_t selected_sock = CHIAKI_INVALID_SOCKET;
+     Candidate *selected_candidate = NULL;
+     bool received_response = false;
+     bool responded = false;
+     bool connecting = false;
+     int retry_counter = 0;
++    chiaki_socket_t maxfd = -1;
++    struct timeval tv;
+ 
+     while (!selected_candidate)
+     {
++        // Reset fd_set before each select() call 
++        FD_ZERO(&fds);
++        maxfd = -1;
++        if(!CHIAKI_SOCKET_IS_INVALID(session->ipv4_sock))
++        {
++            FD_SET(session->ipv4_sock, &fds);
++            maxfd = session->ipv4_sock;
++        }
++        if(!CHIAKI_SOCKET_IS_INVALID(session->ipv6_sock))
++        {
++            FD_SET(session->ipv6_sock, &fds);
++            if(session->ipv6_sock > maxfd)
++                maxfd = session->ipv6_sock;
++        }
++        if(session->stun_random_allocation)
++        {
++            for(int i=0; i<RANDOM_ALLOCATION_SOCKS_NUMBER; i++)
++            {
++                if(socks[i] > maxfd)
++                    maxfd = socks[i];
++                FD_SET(socks[i], &fds);
++            }
++        }
++        maxfd = maxfd + 1;
++        if(connecting)
++        {
++            tv.tv_sec = SELECT_CANDIDATE_CONNECTION_SEC;
++            tv.tv_usec = 0;
++        }
++        else
++        {
++            tv.tv_usec = SELECT_CANDIDATE_TIMEOUT_SEC * SECOND_US;
++            tv.tv_sec = 0;
++        }
+         int ret = select(maxfd, &fds, NULL, NULL, &tv);
+ #ifdef _WIN32
+ 	    if (ret < 0 && WSAGetLastError() != WSAEINTR)
+@@ -3834,13 +3851,6 @@ static ChiakiErrorCode check_candidates(
+                 if(retry_counter < SELECT_CANDIDATE_TRIES && !received_response)
+                 {
+                     retry_counter++;
+-                    tv.tv_sec = 0;
+-                    tv.tv_usec = SELECT_CANDIDATE_TIMEOUT_SEC * SECOND_US;
+-                    FD_ZERO(&fds);
+-                    if(!CHIAKI_SOCKET_IS_INVALID(session->ipv4_sock))
+-                        FD_SET(session->ipv4_sock, &fds);
+-                    if(!CHIAKI_SOCKET_IS_INVALID(session->ipv6_sock))
+-                        FD_SET(session->ipv6_sock, &fds);
+                     Candidate *candidate = NULL;
+                     chiaki_socket_t sock = CHIAKI_INVALID_SOCKET;
+                     CHIAKI_LOGI(session->log, "check_candidates: Resending requests to all candidates TRY %d... waiting for 1st response", retry_counter);
+@@ -3863,22 +3873,12 @@ static ChiakiErrorCode check_candidates(
+                             CHIAKI_LOGE(session->log, "check_candidates: Sending request failed for %s:%d with error: " CHIAKI_SOCKET_ERROR_FMT, candidate->addr, candidate->port, CHIAKI_SOCKET_ERROR_VALUE);
+                             continue;
+                         }
+-                        if(session->stun_random_allocation && (candidate->type == CANDIDATE_TYPE_STATIC || candidate->type == CANDIDATE_TYPE_STUN))
+-                        {
+-                            for(int j=0; j<RANDOM_ALLOCATION_SOCKS_NUMBER; j++)
+-                            {
+-                                if(!CHIAKI_SOCKET_IS_INVALID(socks[j]))
+-                                    FD_SET(socks[j], &fds);
+-                            }
+-                        }
+                     }
+                     continue;                    
+                 }
+                 else if(received_response && !connecting)
+                 {
+                     connecting = true;
+-                    tv.tv_sec = SELECT_CANDIDATE_CONNECTION_SEC;
+-                    tv.tv_usec = 0;
+                     continue;
+                 }
+                 // No responsive candidate within timeout, terminate with error
+@@ -4758,9 +4758,11 @@ static ChiakiErrorCode wait_for_session_message_ack(
+             CHIAKI_LOGE(session->log, "wait_for_session_message_ack: Got ACK for unexpected request ID %d", msg->req_id);
+             session_message_free(msg);
+             msg = NULL;
++            chiaki_mutex_unlock(&session->stop_mutex);
+             continue;
+         }
+         finished = true;
++        chiaki_mutex_unlock(&session->stop_mutex);
+         chiaki_mutex_lock(&session->notif_mutex);
+         session_message_free(msg);
+         chiaki_mutex_unlock(&session->notif_mutex);
+diff --git a/lib/src/session.c b/lib/src/session.c
+index 42a86002..ac8eb6a0 100644
+--- a/lib/src/session.c
++++ b/lib/src/session.c
+@@ -263,6 +263,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_session_init(ChiakiSession *session, Chiaki
+ 	session->connect_info.video_profile_auto_downgrade = connect_info->video_profile_auto_downgrade;
+ 	session->connect_info.enable_keyboard = connect_info->enable_keyboard;
+ 	session->connect_info.enable_dualsense = connect_info->enable_dualsense;
++	session->connect_info.enable_idr_on_fec_failure = connect_info->enable_idr_on_fec_failure;
+ 
+ 	return CHIAKI_ERR_SUCCESS;
+ 
+diff --git a/lib/src/streamconnection.c b/lib/src/streamconnection.c
+index 50c9aa15..3853b0fc 100644
+--- a/lib/src/streamconnection.c
++++ b/lib/src/streamconnection.c
+@@ -1279,4 +1279,23 @@ CHIAKI_EXPORT ChiakiErrorCode stream_connection_send_corrupt_frame(ChiakiStreamC
+ 
+ 	CHIAKI_LOGD(stream_connection->log, "StreamConnection reporting corrupt frame(s) from %u to %u", (unsigned int)start, (unsigned int)end);
+ 	return chiaki_takion_send_message_data(&stream_connection->takion, 1, 2, buf, stream.bytes_written, NULL);
++}
++
++CHIAKI_EXPORT ChiakiErrorCode stream_connection_send_idr_request(ChiakiStreamConnection *stream_connection)
++{
++	tkproto_TakionMessage msg = { 0 };
++	msg.type = tkproto_TakionMessage_PayloadType_IDRREQUEST;
++
++	uint8_t buf[0x10];
++
++	pb_ostream_t stream = pb_ostream_from_buffer(buf, sizeof(buf));
++	bool pbr = pb_encode(&stream, tkproto_TakionMessage_fields, &msg);
++	if(!pbr)
++	{
++		CHIAKI_LOGE(stream_connection->log, "StreamConnection IDR request protobuf encoding failed");
++		return CHIAKI_ERR_UNKNOWN;
++	}
++
++	CHIAKI_LOGI(stream_connection->log, "StreamConnection requesting IDR frame");
++	return chiaki_takion_send_message_data(&stream_connection->takion, 1, 2, buf, stream.bytes_written, NULL);
+ }
+\ No newline at end of file
+diff --git a/lib/src/videoreceiver.c b/lib/src/videoreceiver.c
+index fd1b754a..a09ce49f 100644
+--- a/lib/src/videoreceiver.c
++++ b/lib/src/videoreceiver.c
+@@ -51,6 +51,7 @@ CHIAKI_EXPORT void chiaki_video_receiver_init(ChiakiVideoReceiver *video_receive
+ 	video_receiver->frames_lost = 0;
+ 	memset(video_receiver->reference_frames, -1, sizeof(video_receiver->reference_frames));
+ 	chiaki_bitstream_init(&video_receiver->bitstream, video_receiver->log, video_receiver->session->connect_info.video_profile.codec);
++	video_receiver->waiting_for_idr = false;
+ }
+ 
+ CHIAKI_EXPORT void chiaki_video_receiver_fini(ChiakiVideoReceiver *video_receiver)
+@@ -170,6 +171,12 @@ static ChiakiErrorCode chiaki_video_receiver_flush_frame(ChiakiVideoReceiver *vi
+ 		{
+ 			ChiakiSeqNum16 next_frame_expected = (ChiakiSeqNum16)(video_receiver->frame_index_prev_complete + 1);
+ 			stream_connection_send_corrupt_frame(&video_receiver->session->stream_connection, next_frame_expected, video_receiver->frame_index_cur);
++			if(video_receiver->session->connect_info.enable_idr_on_fec_failure)
++			{
++				stream_connection_send_idr_request(&video_receiver->session->stream_connection);
++				video_receiver->waiting_for_idr = true;
++				CHIAKI_LOGI(video_receiver->log, "FEC failed, waiting for IDR frame");
++			}
+ 			video_receiver->frames_lost += video_receiver->frame_index_cur - next_frame_expected + 1;
+ 			video_receiver->frame_index_prev = video_receiver->frame_index_cur;
+ 		}
+@@ -183,6 +190,21 @@ static ChiakiErrorCode chiaki_video_receiver_flush_frame(ChiakiVideoReceiver *vi
+ 	ChiakiBitstreamSlice slice;
+ 	if(chiaki_bitstream_slice(&video_receiver->bitstream, frame, frame_size, &slice))
+ 	{
++		if(video_receiver->waiting_for_idr)
++		{
++			if(slice.slice_type == CHIAKI_BITSTREAM_SLICE_I)
++			{
++				video_receiver->waiting_for_idr = false;
++				CHIAKI_LOGI(video_receiver->log, "Received IDR frame, resuming decode");
++			}
++			else
++			{
++				CHIAKI_LOGV(video_receiver->log, "Skipping P-frame %d while waiting for IDR", (int)video_receiver->frame_index_cur);
++				video_receiver->frame_index_prev = video_receiver->frame_index_cur;
++				return CHIAKI_ERR_SUCCESS;
++			}
++		}
++
+ 		if(slice.slice_type == CHIAKI_BITSTREAM_SLICE_P)
+ 		{
+ 			ChiakiSeqNum16 ref_frame_index = video_receiver->frame_index_cur - slice.reference_frame - 1;
+diff --git a/scripts/build-libplacebo-windows-arm.sh b/scripts/build-libplacebo-windows-arm.sh
+index 51f9802f..5832c6fa 100755
+--- a/scripts/build-libplacebo-windows-arm.sh
++++ b/scripts/build-libplacebo-windows-arm.sh
+@@ -6,7 +6,7 @@ cd "./$1"
+ shift
+ ROOT="`pwd`"
+ 
+-TAG=1f1ba06aa2a83a2c75ade4150b7c0bba10531088
++TAG=1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ if [ ! -d "libplacebo" ]; then
+ git clone --recursive https://github.com/haasn/libplacebo.git || exit 1
+ fi
+diff --git a/scripts/build-libplacebo-windows.sh b/scripts/build-libplacebo-windows.sh
+index edbf6a26..465cbf1c 100755
+--- a/scripts/build-libplacebo-windows.sh
++++ b/scripts/build-libplacebo-windows.sh
+@@ -6,7 +6,7 @@ cd "./$1"
+ shift
+ ROOT="`pwd`"
+ 
+-TAG=1f1ba06aa2a83a2c75ade4150b7c0bba10531088
++TAG=1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ if [ ! -d "libplacebo" ]; then
+ git clone --recursive https://github.com/haasn/libplacebo.git || exit 1
+ fi
+diff --git a/scripts/build-libplacebo.sh b/scripts/build-libplacebo.sh
+index 91209f8a..9cd05fb7 100755
+--- a/scripts/build-libplacebo.sh
++++ b/scripts/build-libplacebo.sh
+@@ -6,14 +6,12 @@ cd "./$1"
+ shift
+ ROOT="`pwd`"
+ 
+-TAG=1f1ba06aa2a83a2c75ade4150b7c0bba10531088
++TAG=1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ if [ ! -d "libplacebo" ]; then
+ git clone --recursive https://github.com/haasn/libplacebo.git || exit 1
+ fi
+ cd libplacebo || exit 1
+ git checkout $TAG || exit 1
+-git apply "${SCRIPT_DIR}/flatpak/0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch" || exit 1
+-git apply "${SCRIPT_DIR}/flatpak/0002-Vulkan-use-16bit-for-p010.patch" | exit 1
+ DIR=./build || exit 1
+ meson setup --prefix /usr -Dxxhash=disabled $DIR || exit 1
+ ninja -C$DIR || exit 1
+diff --git a/scripts/chiaki-ng.iss b/scripts/chiaki-ng.iss
+index 3bf37ede..7cdecc00 100644
+--- a/scripts/chiaki-ng.iss
++++ b/scripts/chiaki-ng.iss
+@@ -60,7 +60,6 @@ Name: "french"; MessagesFile: "compiler:Languages\French.isl"
+ Name: "german"; MessagesFile: "compiler:Languages\German.isl"
+ Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl"
+ Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl"
+-Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl"
+ Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"
+ Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
+ Name: "korean"; MessagesFile: "compiler:Languages\Korean.isl"
+diff --git a/scripts/flatpak/0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch b/scripts/flatpak/0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch
+deleted file mode 100644
+index 4537f7b9..00000000
+--- a/scripts/flatpak/0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch
++++ /dev/null
+@@ -1,28 +0,0 @@
+-diff --git a/src/vulkan/swapchain.c b/src/vulkan/swapchain.c
+-index 0646e57c..226938b5 100644
+---- a/src/vulkan/swapchain.c
+-+++ b/src/vulkan/swapchain.c
+-@@ -612,13 +612,21 @@ static bool vk_sw_recreate(pl_swapchain sw, int w, int h)
+-     }
+- #endif
+- 
+-+    {
+-+        pl_gpu_flush(gpu);
+-+        vk_wait_idle(vk);
+-+        for (int i = 0; i < vk->pool_graphics->num_queues; i++)
+-+            vk->QueueWaitIdle(vk->pool_graphics->queues[i]);
+-+        vk->DestroySwapchainKHR(vk->dev, p->swapchain, PL_VK_ALLOC);
+-+    }
+-+
+-     // Calling `vkCreateSwapchainKHR` puts sinfo.oldSwapchain into a retired
+-     // state whether the call succeeds or not, so we always need to garbage
+-     // collect it afterwards - asynchronously as it may still be in use
+--    sinfo.oldSwapchain = p->swapchain;
+-+    /* sinfo.oldSwapchain = p->swapchain; */
+-     p->swapchain = VK_NULL_HANDLE;
+-     VkResult res = vk->CreateSwapchainKHR(vk->dev, &sinfo, PL_VK_ALLOC, &p->swapchain);
+--    vk_dev_callback(vk, VK_CB_FUNC(destroy_swapchain), vk, vk_wrap_handle(sinfo.oldSwapchain));
+-+    /* vk_dev_callback(vk, (vk_cb) destroy_swapchain, vk, vk_wrap_handle(sinfo.oldSwapchain)); */
+-     PL_VK_ASSERT(res, "vk->CreateSwapchainKHR(...)");
+- 
+-     // Get the new swapchain images
+diff --git a/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch b/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch
+deleted file mode 100644
+index 1add78e6..00000000
+--- a/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch
++++ /dev/null
+@@ -1,48 +0,0 @@
+-diff --git a/src/vulkan/formats.c b/src/vulkan/formats.c
+-index f0eb0fb7..7d1c6478 100644
+---- a/src/vulkan/formats.c
+-+++ b/src/vulkan/formats.c
+-@@ -415,7 +415,12 @@ void vk_setup_formats(struct pl_gpu_t *gpu)
+-             .pNext = has_drm_mods ? &drm_props : NULL,
+-         };
+- 
+--        vk->GetPhysicalDeviceFormatProperties2KHR(vk->physd, vk_fmt->tfmt, &prop2);
+-+        VkFormat tfmt = vk_fmt->tfmt;
+-+        if (tfmt == VK_FORMAT_R10X6_UNORM_PACK16)
+-+            tfmt = VK_FORMAT_R16_UNORM;
+-+        else if (tfmt == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
+-+            tfmt = VK_FORMAT_R16G16_UNORM;
+-+        vk->GetPhysicalDeviceFormatProperties2KHR(vk->physd, tfmt, &prop2);
+- 
+-         // If wholly unsupported, try falling back to the emulation formats
+-         // for texture operations
+-diff --git a/src/vulkan/gpu_tex.c b/src/vulkan/gpu_tex.c
+-index a419ffdc..ec32c546 100644
+---- a/src/vulkan/gpu_tex.c
+-+++ b/src/vulkan/gpu_tex.c
+-@@ -371,6 +371,11 @@ pl_tex vk_tex_create(pl_gpu gpu, const struct pl_tex_params *params)
+-         .pQueueFamilyIndices = qfs,
+-     };
+-
+-+    if (tex_vk->img_fmt == VK_FORMAT_R10X6_UNORM_PACK16)
+-+        iinfo.format = VK_FORMAT_R16_UNORM;
+-+    else if (tex_vk->img_fmt == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
+-+        iinfo.format = VK_FORMAT_R16G16_UNORM;
+-+
+-     struct vk_malloc_params mparams = {
+-         .optimal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
+-         .export_handle = params->export_handle,
+-@@ -1215,7 +1220,12 @@ pl_tex pl_vulkan_wrap(pl_gpu gpu, const struct pl_vulkan_wrap_params *params)
+-     tex_vk->external_img = true;
+-     tex_vk->held = !fmt->num_planes;
+-     tex_vk->img = params->image;
+--    tex_vk->img_fmt = params->format;
+-+    if (params->format == VK_FORMAT_R10X6_UNORM_PACK16)
+-+        tex_vk->img_fmt = VK_FORMAT_R16_UNORM;
+-+    else if (params->format == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
+-+        tex_vk->img_fmt = VK_FORMAT_R16G16_UNORM;
+-+    else
+-+        tex_vk->img_fmt = params->format;
+-     tex_vk->num_planes = fmt->num_planes;
+-     tex_vk->usage_flags = usage;
+-     tex_vk->aspect = params->aspect;
+diff --git a/scripts/flatpak/chiaki4deck-devel.yaml b/scripts/flatpak/chiaki4deck-devel.yaml
+index 50609966..c7081d52 100644
+--- a/scripts/flatpak/chiaki4deck-devel.yaml
++++ b/scripts/flatpak/chiaki4deck-devel.yaml
+@@ -54,9 +54,7 @@ modules:
+     sources:
+       - type: git
+         url: https://github.com/haasn/libplacebo
+-        tag: 1f1ba06aa2a83a2c75ade4150b7c0bba10531088
+-      - type: patch
+-        path: 0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch
++        tag: 1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ 
+   - name: ffmpeg
+     cleanup:
+@@ -86,7 +84,7 @@ modules:
+   - name: python3-google
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} google"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation google"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/3e/db/5ba900920642414333bdc3cb397075381d63eafc7e75c2373bbc560a9fa1/soupsieve-2.0.1.tar.gz
+@@ -101,7 +99,7 @@ modules:
+   - name: python3-protobuf
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} protobuf"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation protobuf"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ba/dd/f8a01b146bf45ac12a829bbc599e6590aa6a6849ace7d28c42d77041d6ab/protobuf-4.21.12.tar.gz
+@@ -110,7 +108,7 @@ modules:
+   - name: python3-requests
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} requests"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation requests"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ea/b7/e0e3c1c467636186c39925827be42f16fee389dc404ac29e930e9136be70/idna-2.10.tar.gz
+diff --git a/scripts/flatpak/chiaki4deck.yaml b/scripts/flatpak/chiaki4deck.yaml
+index bf794181..adfe2b25 100644
+--- a/scripts/flatpak/chiaki4deck.yaml
++++ b/scripts/flatpak/chiaki4deck.yaml
+@@ -57,9 +57,7 @@ modules:
+     sources:
+       - type: git
+         url: https://github.com/haasn/libplacebo
+-        tag: 1f1ba06aa2a83a2c75ade4150b7c0bba10531088
+-      - type: patch
+-        path: 0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch
++        tag: 1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ 
+   - name: ffmpeg
+     cleanup:
+@@ -90,7 +88,7 @@ modules:
+   - name: python3-google
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} google"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation google"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/3e/db/5ba900920642414333bdc3cb397075381d63eafc7e75c2373bbc560a9fa1/soupsieve-2.0.1.tar.gz
+@@ -105,7 +103,7 @@ modules:
+   - name: python3-protobuf
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} protobuf"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation protobuf"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ba/dd/f8a01b146bf45ac12a829bbc599e6590aa6a6849ace7d28c42d77041d6ab/protobuf-4.21.12.tar.gz
+@@ -114,7 +112,7 @@ modules:
+   - name: python3-requests
+     buildsystem: simple
+     build-commands:
+-      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} requests"
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation requests"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ea/b7/e0e3c1c467636186c39925827be42f16fee389dc404ac29e930e9136be70/idna-2.10.tar.gz
+diff --git a/scripts/flatpak/io.github.streetpea.Chiaki4deck.yaml b/scripts/flatpak/io.github.streetpea.Chiaki4deck.yaml
+index 3afd1123..571d9b3e 100644
+--- a/scripts/flatpak/io.github.streetpea.Chiaki4deck.yaml
++++ b/scripts/flatpak/io.github.streetpea.Chiaki4deck.yaml
+@@ -58,9 +58,7 @@ modules:
+     sources:
+       - type: git
+         url: https://github.com/haasn/libplacebo
+-        tag: 1f1ba06aa2a83a2c75ade4150b7c0bba10531088
+-      - type: patch
+-        path: 0001-Vulkan-Don-t-try-to-reuse-old-swapchain.patch
++        tag: 1dcaea8b601aa969ffd5bfa70088957ce3eaa273
+ 
+   - name: ffmpeg
+     cleanup:
+@@ -91,8 +89,7 @@ modules:
+   - name: python3-google
+     buildsystem: simple
+     build-commands:
+-      - pip3 install --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST}
+-        google
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation google"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/3e/db/5ba900920642414333bdc3cb397075381d63eafc7e75c2373bbc560a9fa1/soupsieve-2.0.1.tar.gz
+@@ -107,8 +104,7 @@ modules:
+   - name: python3-protobuf
+     buildsystem: simple
+     build-commands:
+-      - pip3 install --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST}
+-        protobuf
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation protobuf"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ba/dd/f8a01b146bf45ac12a829bbc599e6590aa6a6849ace7d28c42d77041d6ab/protobuf-4.21.12.tar.gz
+@@ -117,8 +113,7 @@ modules:
+   - name: python3-requests
+     buildsystem: simple
+     build-commands:
+-      - pip3 install --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST}
+-        requests
++      - "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} --no-build-isolation requests"
+     sources:
+       - type: file
+         url: https://files.pythonhosted.org/packages/ea/b7/e0e3c1c467636186c39925827be42f16fee389dc404ac29e930e9136be70/idna-2.10.tar.gz
+diff --git a/scripts/switch/push-docker-build-chiaki.sh b/scripts/switch/push-docker-build-chiaki.sh
+index a4218d4c..3347808d 100755
+--- a/scripts/switch/push-docker-build-chiaki.sh
++++ b/scripts/switch/push-docker-build-chiaki.sh
+@@ -17,6 +17,6 @@ docker run \
+     -w "/build/chiaki" \
+     -ti -p 28771:28771 \
+     --entrypoint /opt/devkitpro/tools/bin/nxlink \
+-    docker.io/xlanor/chiaki-ng-switch-builder:latest \
++    ghcr.io/streetpea/chiaki-build-switch:latest \
+     "$@" -s /build/chiaki/build_switch/switch/chiaki-ng.nro
+ 
+diff --git a/scripts/switch/run-docker-build-chiaki.bat b/scripts/switch/run-docker-build-chiaki.bat
+index 5cbc7ea6..8f5f668a 100644
+--- a/scripts/switch/run-docker-build-chiaki.bat
++++ b/scripts/switch/run-docker-build-chiaki.bat
+@@ -2,7 +2,7 @@ set my_dir=%cd%
+ docker run --rm ^
+         -v "%my_dir%:/build/chiaki":z ^
+         -w "/build/chiaki" ^
+-        docker.io/xlanor/chiaki-ng-switch-builder:latest ^
++        ghcr.io/streetpea/chiaki-build-switch:latest ^
+         /bin/bash -c "scripts/switch/build.sh"
+ 
+ if %ErrorLevel% equ 0 (copy build_switch\switch\chiaki.nro build_switch\switch\chiaki-ng.nro)
+diff --git a/scripts/switch/run-docker-build-chiaki.sh b/scripts/switch/run-docker-build-chiaki.sh
+index b2d48b3b..0bb1cc8a 100755
+--- a/scripts/switch/run-docker-build-chiaki.sh
++++ b/scripts/switch/run-docker-build-chiaki.sh
+@@ -5,7 +5,7 @@ cd "`dirname $(readlink -f ${0})`/../.."
+ docker run --rm \
+ 	-v "`pwd`:/build/chiaki":z \
+ 	-w "/build/chiaki" \
+-	docker.io/xlanor/chiaki-ng-switch-builder:latest \
++	ghcr.io/streetpea/chiaki-build-switch:latest \
+ 	/bin/bash -c "scripts/switch/build.sh"
+ 
+ if [[ $? -eq 0 ]]; then
+diff --git a/vcpkg.json b/vcpkg.json
+index 3a5b40a9..b1539cb0 100644
+--- a/vcpkg.json
++++ b/vcpkg.json
+@@ -1,16 +1,14 @@
+ {
+   "name": "chiaki-ng",
+-  "version": "1.9.8",
++  "version": "1.9.9",
+   "dependencies": [
+     "pkgconf",
+     "sdl2",
+     "protobuf",
+     "openssl",
+-    "hidapi",
+     "json-c",
+     "miniupnpc",
+     "opus",
+-    "fftw3",
+     "lcms",
+     "speexdsp",
+     "vulkan"
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/chiaki-ng.git/commitdiff/cffb97a180032eaa883e163ac57a61789e11740c




More information about the pld-cvs-commit mailing list