1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-18 00:10:04 +00:00

games/moonlight-embedded: Update to 2.7.0

PR:		280114
This commit is contained in:
Armin Zhu 2024-07-20 15:33:01 +03:00 committed by Gleb Popov
parent 7b0c816794
commit 1e807e9107
11 changed files with 48 additions and 207 deletions

View File

@ -1,5 +1,5 @@
PORTNAME= moonlight-embedded
DISTVERSION= 2.6.2
DISTVERSION= 2.7.0
CATEGORIES= games
MASTER_SITES= https://github.com/moonlight-stream/moonlight-embedded/releases/download/v${DISTVERSION}/
@ -19,28 +19,45 @@ LIB_DEPENDS= libavahi-client.so:net/avahi-app \
libexpat.so:textproc/expat2 \
libopus.so:audio/opus \
libudev.so:devel/libudev-devd \
libuuid.so:misc/e2fsprogs-libuuid \
libvdpau.so:multimedia/libvdpau \
libva.so:multimedia/libva
libuuid.so:misc/e2fsprogs-libuuid
USES= cmake gl localbase:ldflags perl5 pkgconfig sdl ssl tar:xz xorg
USES= cmake localbase:ldflags perl5 pkgconfig sdl ssl tar:xz
USE_LDCONFIG= yes
USE_GL= egl glesv2
USE_PERL5= build
USE_SDL= sdl2
USE_XORG= x11
NO_WRKSUBDIR= yes
CFLAGS+= -DHAS_SOCKLEN_T=1 -I${LOCALBASE}/include/libepoll-shim/
LDFLAGS+= -lepoll-shim
CMAKE_OFF= ENABLE_CEC ENABLE_PULSE
CMAKE_ON= ENET_NO_INSTALL
CONFLICTS_INSTALL= moonlight-embedded-devel
PLIST_FILES= bin/moonlight \
"@sample etc/moonlight.conf.sample" \
share/man/man1/moonlight.1.gz \
share/moonlight/gamecontrollerdb.txt
OPTIONS_DEFAULT= OSS X11
OSS_DESC= Open Sound System support for embedded(not SDL) platform
PULSE_DESC= PulseAudio sound server support for embedded(not SDL) platform
CEC_DESC= Enable HDMI-CEC(TV controller) feature by using libcec.so
X11_DESC= Enable x11 and x11_vaapi platform using xorg
OPTIONS_SINGLE= SOUND
OPTIONS_SINGLE_SOUND= OSS PULSE
OPTIONS_GROUP= DISPLAY OTHERS
OPTIONS_GROUP_OTHERS= CEC
OPTIONS_GROUP_DISPLAY= X11
OSS_CMAKE_ON= -DENABLE_PULSE:BOOL=false
PULSE_CMAKE_BOOL= ENABLE_PULSE
PULSE_LIB_DEPENDS= libpulse.so:audio/pulseaudio
CEC_CMAKE_BOOL= ENABLE_CEC
CEC_LIB_DEPENDS= libcec.so:multimedia/libcec \
libp8-platform.so:devel/p8-platform
X11_USES= xorg gl
X11_USE= xorg=x11 gl=egl,glesv2
X11_CMAKE_BOOL= ENABLE_X11
X11_LIB_DEPENDS= libvdpau.so:multimedia/libvdpau \
libva.so:multimedia/libva
post-extract:
@${REINPLACE_CMD} -e 's|/etc/moonlight/|${PREFIX}/etc/moonlight/|g' \
${WRKSRC}/docs/README.pod

View File

@ -1,3 +1,3 @@
TIMESTAMP = 1701007066
SHA256 (moonlight-embedded-2.6.2.tar.xz) = 8bcc69b403a628efaf8686d40c0d1428b46defe4c65b06ff6ccc3fe32f0b2356
SIZE (moonlight-embedded-2.6.2.tar.xz) = 328660
TIMESTAMP = 1708491885
SHA256 (moonlight-embedded-2.7.0.tar.xz) = 6527718e678dafd6e1e1876bbc6949538b38986d54ebda0b7fdc3b3f4af4f2dd
SIZE (moonlight-embedded-2.7.0.tar.xz) = 335984

View File

@ -1,14 +0,0 @@
--- CMakeLists.txt.orig 2023-11-03 06:08:34 UTC
+++ CMakeLists.txt
@@ -87,6 +87,11 @@ add_executable(moonlight ${SRC_LIST})
target_link_libraries(moonlight m)
target_link_libraries(moonlight gamestream)
+if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ set(ALSA_FOUND FALSE)
+ target_sources(moonlight PRIVATE ./src/audio/oss.c)
+endif()
+
if (CEC_FOUND)
list(APPEND MOONLIGHT_DEFINITIONS HAVE_LIBCEC)
list(APPEND MOONLIGHT_OPTIONS CEC)

View File

@ -1,6 +1,6 @@
--- libgamestream/CMakeLists.txt.orig 2023-11-03 06:08:34 UTC
--- libgamestream/CMakeLists.txt.orig 2024-02-20 04:01:31 UTC
+++ libgamestream/CMakeLists.txt
@@ -3,7 +3,7 @@ set(SO_VERSION 4)
@@ -3,7 +3,7 @@ find_package(CURL REQUIRED)
find_package(LibUUID REQUIRED)
find_package(Threads REQUIRED)
find_package(CURL REQUIRED)
@ -21,8 +21,8 @@
target_link_libraries(gamestream moonlight-common)
set_target_properties(gamestream PROPERTIES SOVERSION ${SO_VERSION} VERSION ${PROJECT_VERSION})
@@ -28,5 +28,3 @@ target_include_directories(moonlight-common PRIVATE ..
target_link_libraries(gamestream ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES} ${EXPAT_LIBRARIES} ${AVAHI_LIBRARIES} ${LIBUUID_LIBRARIES})
@@ -28,5 +28,3 @@ target_link_libraries(gamestream ${CMAKE_THREAD_LIBS_I
target_link_libraries(gamestream ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES} ${EXPAT_LIBRARIES} ${AVAHI_LIBRARIES} ${LibUUID_LIBRARIES})
target_link_libraries(gamestream ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})
-

View File

@ -1,10 +1,9 @@
--- libgamestream/client.c.orig 2023-11-03 06:08:34 UTC
--- libgamestream/client.c.orig 2024-02-20 04:01:31 UTC
+++ libgamestream/client.c
@@ -537,7 +537,16 @@ int gs_pair(PSERVER_DATA server, char* pin) {
@@ -539,7 +539,15 @@ int gs_pair(PSERVER_DATA server, char* pin) {
RAND_bytes(client_secret_data, sizeof(client_secret_data));
const ASN1_BIT_STRING *asnSignature;
+
+#ifdef __FreeBSD__
+ #if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
X509_get0_signature(&asnSignature, NULL, cert);
@ -15,5 +14,5 @@
+ X509_get0_signature(&asnSignature, NULL, cert);
+#endif
char challenge_response[16 + SIGNATURE_LEN + sizeof(client_secret_data)];
challenge_response = malloc(16 + asnSignature->length + sizeof(client_secret_data));
char challenge_response_hash[32];

View File

@ -1,12 +0,0 @@
--- libgamestream/http.c.orig 2023-11-03 06:08:34 UTC
+++ libgamestream/http.c
@@ -73,6 +73,9 @@ int http_init(const char* keyDirectory, int logLevel)
int http_request(char* url, PHTTP_DATA data) {
curl_easy_setopt(curl, CURLOPT_WRITEDATA, data);
curl_easy_setopt(curl, CURLOPT_URL, url);
+#ifdef __FreeBSD__
+ curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1);
+#endif
if (debug)
printf("Request %s\n", url);

View File

@ -1,9 +0,0 @@
--- src/audio/audio.h.orig 2023-11-03 06:08:34 UTC
+++ src/audio/audio.h
@@ -31,3 +31,6 @@ extern AUDIO_RENDERER_CALLBACKS audio_callbacks_sdl;
extern AUDIO_RENDERER_CALLBACKS audio_callbacks_pulse;
bool audio_pulse_init(char* audio_device);
#endif
+#ifdef __FreeBSD__
+extern AUDIO_RENDERER_CALLBACKS audio_callbacks_oss;
+#endif

View File

@ -1,108 +0,0 @@
--- src/audio/oss.c.orig 2024-01-01 05:31:28 UTC
+++ src/audio/oss.c
@@ -0,0 +1,105 @@
+/*
+ * This file is part of Moonlight Embedded.
+ *
+ * Copyright (C) 2015-2017 Iwan Timmer
+ *
+ * Moonlight is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Moonlight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Moonlight; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef __FreeBSD__
+#include <sys/soundcard.h>
+#include <sys/ioctl.h>
+#include "audio.h"
+
+#include <opus_multistream.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static OpusMSDecoder* decoder;
+static short* pcmBuffer;
+static int samplesPerFrame;
+static int channelCount;
+static int fd = -1;
+
+static int oss_renderer_init(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig, void* context, int arFlags) {
+ int rc;
+ decoder = opus_multistream_decoder_create(opusConfig->sampleRate, opusConfig->channelCount, opusConfig->streams, opusConfig->coupledStreams, opusConfig->mapping, &rc);
+
+ channelCount = opusConfig->channelCount;
+ samplesPerFrame = opusConfig->samplesPerFrame;
+ pcmBuffer = malloc(sizeof(short) * channelCount * samplesPerFrame);
+ if (pcmBuffer == NULL)
+ return -1;
+
+ const char* oss_name = "/dev/dsp";
+ fd = open(oss_name, O_WRONLY);
+ if (fd == -1) {
+ printf("Open audio device /dev/dsp failed! error %d\n", errno);
+ return -1;
+ }
+ // buffer size for fragment ,selector 12 is 4096;11 is 2048;10 is 1024; 13is 8192
+ int frag = 12;
+ if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &frag) == -1)
+ printf("Set fragment for /dev/dsp failed.");
+
+ int format = AFMT_S16_LE;
+ int channels = opusConfig->channelCount;
+ int rate = opusConfig->sampleRate;
+ if (ioctl(fd, SNDCTL_DSP_SETFMT, &format) == -1)
+ printf("Set format for /dev/dsp failed.");
+ if (ioctl(fd, SNDCTL_DSP_CHANNELS, &channels) == -1)
+ printf("Set channels for /dev/dsp failed.");
+ if (ioctl(fd, SNDCTL_DSP_SPEED, &rate) == -1)
+ printf("Set sample rate for /dev/dsp failed.");
+
+ return 0;
+}
+
+static void oss_renderer_cleanup() {
+ if (decoder != NULL) {
+ opus_multistream_decoder_destroy(decoder);
+ decoder = NULL;
+ }
+
+ if (pcmBuffer != NULL) {
+ free(pcmBuffer);
+ pcmBuffer = NULL;
+ }
+
+ if (fd != -1) {
+ close(fd);
+ fd = -1;
+ }
+}
+
+static void oss_renderer_decode_and_play_sample(char* data, int length) {
+ int decodeLen = opus_multistream_decode(decoder, data, length, pcmBuffer, samplesPerFrame, 0);
+ if (decodeLen > 0) {
+ write(fd, pcmBuffer, decodeLen * channelCount * sizeof(short));
+ } else if (decodeLen < 0) {
+ printf("Opus error from decode: %d\n", decodeLen);
+ }
+}
+
+AUDIO_RENDERER_CALLBACKS audio_callbacks_oss = {
+ .init = oss_renderer_init,
+ .cleanup = oss_renderer_cleanup,
+ .decodeAndPlaySample = oss_renderer_decode_and_play_sample,
+ .capabilities = CAPABILITY_DIRECT_SUBMIT | CAPABILITY_SUPPORTS_ARBITRARY_AUDIO_DURATION,
+};
+#endif

View File

@ -1,14 +1,7 @@
--- src/input/evdev.c.orig 2023-11-03 06:08:34 UTC
--- src/input/evdev.c.orig 2024-02-20 04:01:31 UTC
+++ src/input/evdev.c
@@ -38,9 +38,15 @@
#include <limits.h>
#include <unistd.h>
#include <pthread.h>
+#ifdef __linux__
#include <endian.h>
+#else
+#include <sys/endian.h>
+#endif
@@ -45,6 +45,8 @@
#endif
#include <math.h>
+static bool isUseKbdmux = false;
@ -16,21 +9,7 @@
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define int16_to_le(val) val
#else
@@ -66,8 +72,13 @@ struct input_device {
int hats_state[3][2];
int fd;
char modifiers;
+ #ifdef __linux__
__s32 mouseDeltaX, mouseDeltaY, mouseVScroll, mouseHScroll;
__s32 touchDownX, touchDownY, touchX, touchY;
+ #else
+ int32_t mouseDeltaX, mouseDeltaY, mouseVScroll, mouseHScroll;
+ int32_t touchDownX, touchDownY, touchX, touchY;
+ #endif
struct timeval touchDownTime;
struct timeval btnDownTime;
short controllerId;
@@ -749,7 +760,7 @@ static int evdev_handle(int fd) {
@@ -758,7 +760,7 @@ static int evdev_handle(int fd) {
struct input_event ev;
while ((rc = libevdev_next_event(devices[i].dev, LIBEVDEV_READ_FLAG_NORMAL, &ev)) >= 0) {
if (rc == LIBEVDEV_READ_STATUS_SYNC)
@ -39,7 +18,7 @@
else if (rc == LIBEVDEV_READ_STATUS_SUCCESS) {
if (!handler(&ev, &devices[i]))
return LOOP_RETURN;
@@ -766,6 +777,39 @@ static int evdev_handle(int fd) {
@@ -775,6 +777,39 @@ static int evdev_handle(int fd) {
return LOOP_OK;
}
@ -79,7 +58,7 @@
void evdev_create(const char* device, struct mapping* mappings, bool verbose, int rotate) {
int fd = open(device, O_RDWR|O_NONBLOCK);
if (fd <= 0) {
@@ -840,6 +884,33 @@ void evdev_create(const char* device, struct mapping*
@@ -851,6 +886,33 @@ void evdev_create(const char* device, struct mapping*
libevdev_has_event_code(evdev, EV_ABS, ABS_WHEEL) ||
libevdev_has_event_code(evdev, EV_ABS, ABS_GAS) ||
libevdev_has_event_code(evdev, EV_ABS, ABS_BRAKE));

View File

@ -1,4 +1,4 @@
--- src/main.c.orig 2023-11-03 06:08:34 UTC
--- src/main.c.orig 2024-02-20 04:01:31 UTC
+++ src/main.c
@@ -42,6 +42,7 @@
#include <client.h>
@ -54,16 +54,17 @@
#ifdef HAVE_SDL
if (system == SDL)
@@ -362,6 +363,8 @@ int main(int argc, char* argv[]) {
@@ -362,6 +363,9 @@ int main(int argc, char* argv[]) {
mappings = map;
}
+ // test is use kbdmux driver
+ is_use_kbdmux();
+ if (config.inputsCount <= 0)
+ is_use_kbdmux();
for (int i=0;i<config.inputsCount;i++) {
if (config.debug_level > 0)
printf("Adding input device %s...\n", config.inputs[i]);
@@ -398,7 +401,8 @@ int main(int argc, char* argv[]) {
@@ -398,7 +402,8 @@ int main(int argc, char* argv[]) {
if (config.pin > 0 && config.pin <= 9999) {
sprintf(pin, "%04d", config.pin);
} else {
@ -73,7 +74,7 @@
}
printf("Please enter the following PIN on the target PC: %s\n", pin);
fflush(stdout);
@@ -406,6 +410,7 @@ int main(int argc, char* argv[]) {
@@ -406,6 +411,7 @@ int main(int argc, char* argv[]) {
fprintf(stderr, "Failed to pair to server: %s\n", gs_error);
} else {
printf("Succesfully paired\n");

View File

@ -1,12 +0,0 @@
--- src/platform.c.orig 2023-11-03 06:08:34 UTC
+++ src/platform.c
@@ -202,6 +202,9 @@ AUDIO_RENDERER_CALLBACKS* platform_get_audio(enum plat
#ifdef HAVE_ALSA
return &audio_callbacks_alsa;
#endif
+ #ifdef __FreeBSD__
+ return &audio_callbacks_oss;
+ #endif
}
return NULL;
}