diff --git a/audio/owntone/Makefile b/audio/owntone/Makefile index 35d0826552b7..2a127e501a5c 100644 --- a/audio/owntone/Makefile +++ b/audio/owntone/Makefile @@ -1,85 +1,85 @@ PORTNAME= owntone DISTVERSION= 28.5 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= audio MASTER_SITES= https://github.com/owntone/owntone-server/releases/download/${DISTVERSION}/ MAINTAINER= dinoex@FreeBSD.org COMMENT= DAAP (iTunes), MPD (Music Player Daemon) and RSP (Roku) media server WWW= https://github.com/owntone/owntone-server LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/COPYING LIB_DEPENDS= libavahi-client.so:net/avahi-app \ libavcodec.so:multimedia/ffmpeg \ libconfuse.so:devel/libconfuse \ libcurl.so:ftp/curl \ libevent_pthreads.so:devel/libevent \ libgcrypt.so:security/libgcrypt \ libgnutls.so:security/gnutls \ libgpg-error.so:security/libgpg-error \ libjson-c.so:devel/json-c \ libinotify.so:devel/libinotify \ libmxml.so:textproc/mxml \ libplist-2.0.so:devel/libplist \ libsodium.so:security/libsodium \ libunistring.so:devel/libunistring \ libprotobuf-c.so:devel/protobuf-c \ libuuid.so:misc/e2fsprogs-libuuid USES= tar:xz localbase libtool iconv:wchar_t pkgconfig gnome gmake \ gperf sqlite gnome pathfix USE_GNOME= libxml2 GNU_CONFIGURE= yes CONFIGURE_ARGS= --disable-install_systemd \ --with-owntone-user=${OWNTONE_USER} \ --with-owntone-group=${OWNTONE_USER} USE_RC_SUBR= ${PORTNAME} SUB_FILES= pkg-message OWNTONE_USER?= daapd USERS?= daapd GROUPS?= daapd OPTIONS_DEFINE= ITUNES MPD AIRPLAY2 CHROMECAST WEBINTERFACE \ ALSA PULSEAUDIO NLS DOCS OPTIONS_DEFAULT= ITUNES MPD AIRPLAY2 CHROMECAST WEBINTERFACE \ ALSA NLS DOCS NO_OPTIONS_SORT=yes OPTIONS_SUB=yes AIRPLAY2_DESC= Prefer AirPlay 2 ITUNES_DESC= iTunes XML support CHROMECAST_DESC= Chromecast support MPD_DESC= Music Player Daemon protocol support WEBINTERFACE_DESC= Install web interface AIRPLAY2_CONFIGURE_ENABLE= preferairplay2 ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib ALSA_CONFIGURE_WITH= alsa ITUNES_CONFIGURE_ENABLE= itunes CHROMECAST_CONFIGURE_ENABLE= chromecast MPD_CONFIGURE_ENABLE= mpd PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio PULSEAUDIO_CONFIGURE_WITH= pulseaudio WEBINTERFACE_CONFIGURE_ENABLE= webinterface WEBINTERFACE_CONFIGURE_WITH= libwebsockets WEBINTERFACE_LIB_DEPENDS= libwebsockets.so:net/libwebsockets NLS_USES= gettext-runtime NLS_CONFIGURE_ENABLE= nls post-install: ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/owntone/owntone-sqlext.so ${MV} ${STAGEDIR}${PREFIX}/etc/owntone.conf \ ${STAGEDIR}${PREFIX}/etc/owntone.conf.sample .include diff --git a/audio/owntone/files/patch-src_transcode.c b/audio/owntone/files/patch-src_transcode.c new file mode 100644 index 000000000000..a32c41f7c0ab --- /dev/null +++ b/audio/owntone/files/patch-src_transcode.c @@ -0,0 +1,43 @@ +From 941fab9023f0af19f178771effd2a73865e849ba Mon Sep 17 00:00:00 2001 +From: ejurgensen +Date: Thu, 17 Aug 2023 23:09:41 +0200 +Subject: [PATCH] [xcode] Circumvent ffmpeg 6 ALAC encoding problem + +The default ffmpeg ALAC encoder, "alac", requires fixed frames of size 4096, +but the Airplay 2 implementation feeds it with frames of size 352. Before +ffmpeg 6 this worked, but not any more. Seems a frame size check has been +added. + +This commit doesn't fix this, but circumvents the ffmpeg error by modifying the +frame size that ffmpeg checks. + +Fixes issue #1640 + +--- src/transcode.c.orig 2022-01-29 16:41:27 UTC ++++ src/transcode.c +@@ -42,6 +42,8 @@ + #include "misc.h" + #include "transcode.h" + ++#define USE_ALAC_FRAME_SIZE_HACK (LIBAVCODEC_VERSION_MAJOR > 59) || ((LIBAVCODEC_VERSION_MAJOR == 59) && (LIBAVCODEC_VERSION_MINOR > 31)) ++ + // Interval between ICY metadata checks for streams, in seconds + #define METADATA_ICY_INTERVAL 5 + // Maximum number of streams in a file that we will accept +@@ -506,6 +508,16 @@ stream_add(struct encode_ctx *ctx, struct stream_ctx * + avcodec_free_context(&s->codec); + return -1; + } ++ ++ // airplay.c "misuses" the ffmpeg alac encoder in that it pushes frames with ++ // 352 samples even though the encoder wants 4096 (and doesn't have variable ++ // frame capability). This worked with no issues until ffmpeg 6, where it ++ // seems a frame size check was added. The below circumvents the check, but is ++ // dirty because we shouldn't be writing to this data element. ++#if USE_ALAC_FRAME_SIZE_HACK ++ if (codec_id == AV_CODEC_ID_ALAC) ++ s->codec->frame_size = 352; ++#endif + + // Copy the codec parameters we just set to the stream, so the muxer knows them + ret = avcodec_parameters_from_context(s->stream->codecpar, s->codec);