Index: head/multimedia/mpv/Makefile =================================================================== --- head/multimedia/mpv/Makefile (revision 457243) +++ head/multimedia/mpv/Makefile (revision 457244) @@ -1,175 +1,183 @@ # Created by: Grzegorz Blach # $FreeBSD$ PORTNAME= mpv PORTVERSION= 0.27.0 DISTVERSIONPREFIX= v PORTREVISION= 4 PORTEPOCH= 1 CATEGORIES= multimedia audio MAINTAINER= cpm@FreeBSD.org COMMENT= Free and open-source general-purpose video player LICENSE= GPLv2+ LGPL21+ LICENSE_COMB= multi BUILD_DEPENDS= ffmpeg>=3.3,1:multimedia/ffmpeg LIB_DEPENDS= libavcodec.so:multimedia/ffmpeg USES= compiler:c11 desktop-file-utils iconv jpeg localbase:ldflags \ pkgconfig python:build waf USE_LDCONFIG= yes USE_GITHUB= yes GH_ACCOUNT= mpv-player # Keep in sync with bootstrap.py to avoid regressions GH_TUPLE= waf-project:waf:waf-1.9.8:waf WAF_CMD= ${WRKSRC_waf}/waf-light CONFIGURE_ENV= BIN_PYTHON="${PYTHON_CMD}" CONFIGURE_ARGS= --docdir="${EXAMPLESDIR}" \ --htmldir="${DOCSDIR}/html" \ --mandir="${MANPREFIX}/man" \ --disable-debug-build \ --disable-optimize \ --disable-pdf \ --disable-rubberband \ - --disable-vaapi-wayland \ --disable-vapoursynth \ --disable-vapoursynth-lazy \ --enable-libmpv-shared OPTIONS_DEFINE= ARCHIVE ASS DOCS LCMS2 LUAJIT MANPAGES TEST UCHARDET ZSH OPTIONS_DEFAULT= ARCHIVE ASS DVDREAD DVDNAV MANPAGES OPENGL UCHARDET \ V4L VAAPI VDPAU X11 YTDL OPTIONS_GROUP= IN VO AO OPTIONS_GROUP_IN= CDIO DVDREAD DVDNAV LIBBLURAY V4L YTDL SMB OPTIONS_GROUP_VO= CACA OPENGL VAAPI VDPAU WAYLAND X11 OPTIONS_GROUP_AO= ALSA JACK PULSEAUDIO SDL SNDIO OPTIONS_SUB= yes ASS_DESC= ASS/SSA subtitle and OSD rendering DVDREAD_DESC= DVD Playback support DVDNAV_DESC= DVD menu navigation LUAJIT_DESC= Use LuaJIT instead of Lua scripting language support UCHARDET_DESC= Guess subtitle encoding via uchardet WAYLAND_DESC= Wayland (graphics) support YTDL_DESC= Install youtube-dl IN_DESC= Input VO_DESC= Video Output AO_DESC= Audio Output ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib ALSA_CONFIGURE_OFF= --disable-alsa ARCHIVE_USES= libarchive ARCHIVE_CONFIGURE_ON= --enable-libarchive ASS_LIB_DEPENDS= libass.so:multimedia/libass ASS_CONFIGURE_OFF= --disable-libass CACA_LIB_DEPENDS= libcaca.so:graphics/libcaca CACA_CONFIGURE_OFF= --disable-caca CDIO_LIB_DEPENDS= libcdio_paranoia.so:sysutils/libcdio-paranoia CDIO_CONFIGURE_ON= --enable-cdda DOCS_BUILD_DEPENDS= rst2html:textproc/py-docutils DOCS_CONFIGURE_ON= --enable-html DVDNAV_LIB_DEPENDS= libdvdnav.so:multimedia/libdvdnav DVDNAV_CONFIGURE_ON= --enable-dvdnav DVDREAD_LIB_DEPENDS= libdvdread.so:multimedia/libdvdread DVDREAD_CONFIGURE_ON= --enable-dvdread JACK_LIB_DEPENDS= libjack.so:audio/jack JACK_CONFIGURE_OFF= --disable-jack LCMS2_LIB_DEPENDS= liblcms2.so:graphics/lcms2 LCMS2_CONFIGURE_OFF= --disable-lcms2 LIBBLURAY_LIB_DEPENDS= libbluray.so:multimedia/libbluray LIBBLURAY_CONFIGURE_ON= --enable-libbluray LIBBLURAY_CONFIGURE_OFF= --disable-libbluray LUAJIT_LIB_DEPENDS= libluajit-5.1.so:lang/luajit LUAJIT_USES_OFF= lua LUAJIT_CONFIGURE_ON= --lua=luajit LUAJIT_CONFIGURE_OFF= --lua=${LUA_VER_STR}fbsd MANPAGES_BUILD_DEPENDS= rst2man:textproc/py-docutils MANPAGES_CONFIGURE_OFF= --disable-manpage OPENGL_USE= GL=egl,gbm,gl OPENGL_CONFIGURE_OFF= --disable-gl OPENGL_IMPLIES= X11 PULSEAUDIO_LIB_DEPENDS= libpulse.so:audio/pulseaudio PULSEAUDIO_CONFIGURE_OFF= --disable-pulse SDL_USE= SDL=sdl2 SDL_CONFIGURE_ON= --enable-sdl2 SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio SNDIO_CONFIGURE_ON= --enable-sndio SNDIO_CONFIGURE_OFF= --disable-sndio SMB_USES= samba:lib SMB_CONFIGURE_ON= --enable-libsmbclient TEST_BUILD_DEPENDS= cmocka>=1.1.0:sysutils/cmocka TEST_CONFIGURE_ON= --enable-test TEST_UNITTESTFILES= chmap chmap_sel gl_video UCHARDET_LIB_DEPENDS= libuchardet.so:textproc/uchardet UCHARDET_CONFIGURE_OFF= --disable-uchardet V4L_BUILD_DEPENDS= ${LOCALBASE}/include/linux/videodev2.h:multimedia/v4l_compat V4L_LIB_DEPENDS= libv4l2.so:multimedia/libv4l V4L_CONFIGURE_ON= --enable-tv --enable-dvbin VAAPI_LIB_DEPENDS= libva.so:multimedia/libva VAAPI_CONFIGURE_OFF= --disable-vaapi VDPAU_LIB_DEPENDS= libvdpau.so:multimedia/libvdpau VDPAU_CONFIGURE_OFF= --disable-vdpau WAYLAND_LIB_DEPENDS= libwayland-client.so:graphics/wayland \ libwayland-cursor.so:graphics/wayland \ libxkbcommon.so:x11/libxkbcommon WAYLAND_CONFIGURE_OFF= --disable-wayland X11_USE= XORG=x11,xext,xinerama,xineramaproto,xrandr,xscrnsaver,xv,xxf86vm X11_VARS= INSTALLS_ICONS=yes X11_CONFIGURE_OFF= --disable-x11 YTDL_RUN_DEPENDS= youtube-dl:www/youtube_dl ZSH_USES= perl5 ZSH_USE= PERL5=build ZSH_CONFIGURE_ENV= BIN_PERL="${PERL}" ZSH_CONFIGURE_ENABLE= zsh-comp + +.include + +.if ${PORT_OPTIONS:MVAAPI} && ${PORT_OPTIONS:MWAYLAND} +CONFIGURE_ARGS+= --enable-vaapi-wayland +LIB_DEPENDS+= libva-wayland.so:multimedia/libva +.else +CONFIGURE_ARGS+= --disable-vaapi-wayland +.endif post-patch: @${REINPLACE_CMD} -e 's|/pkgconfig/mpv.pc|data/pkgconfig/mpv.pc|g' \ ${WRKSRC}/wscript_build.py @${REINPLACE_CMD} -e 's|DBL_EPSILON|FLT_EPSILON|'g \ ${WRKSRC}/test/test_helpers.h post-patch-MANPAGES-on: @${FIND} ${WRKSRC}/DOCS/man -name '*.rst' | ${XARGS} ${REINPLACE_CMD} \ -e 's|/usr/local|${PREFIX}|g' pre-install-TEST-on: .for test in ${TEST_UNITTESTFILES} cd ${WRKSRC}/build/test && ./${test} .endfor post-install: @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/mpv @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libmpv.so .include Index: head/multimedia/mpv/files/patch-video_vaapi.c =================================================================== --- head/multimedia/mpv/files/patch-video_vaapi.c (revision 457243) +++ head/multimedia/mpv/files/patch-video_vaapi.c (revision 457244) @@ -1,88 +1,82 @@ From 2ecf240b1cd20875991a5b18efafbe799864ff7f Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Mon, 9 Oct 2017 20:10:26 +0100 Subject: [PATCH] vaapi: Use libva2 message callbacks They are no longer global, so they work vaguely sensibly. ---- - video/vaapi.c | 32 +++++++++++++++++++++++++++++--- - 1 file changed, 29 insertions(+), 3 deletions(-) - -diff --git a/video/vaapi.c b/video/vaapi.c -index 6bedbbaa18..3b1cb9cc41 100644 ---- video/vaapi.c +--- video/vaapi.c.orig 2017-09-13 01:40:14 UTC +++ video/vaapi.c -@@ -40,9 +40,27 @@ int va_get_colorspace_flag(enum mp_csp csp) - return 0; +@@ -112,9 +112,27 @@ static void va_get_formats(struct mp_vaa + ctx->image_formats = formats; } -// VA message callbacks are global and do not have a context parameter, so it's -// impossible to know from which VADisplay they originate. Try to route them -// to existing mpv/libmpv instances within this process. +#if VA_CHECK_VERSION(1, 0, 0) +static void va_message_callback(void *context, const char *msg, int mp_level) +{ + struct mp_vaapi_ctx *res = context; + mp_msg(res->log, mp_level, "libva: %s", msg); +} + +static void va_error_callback(void *context, const char *msg) +{ + va_message_callback(context, msg, MSGL_ERR); +} + +static void va_info_callback(void *context, const char *msg) +{ + va_message_callback(context, msg, MSGL_V); +} +#else +// Pre-libva2 VA message callbacks are global and do not have a context +// parameter, so it's impossible to know from which VADisplay they +// originate. Try to route them to existing mpv/libmpv instances within +// this process. static pthread_mutex_t va_log_mutex = PTHREAD_MUTEX_INITIALIZER; static struct mp_vaapi_ctx **va_mpv_clients; static int num_va_mpv_clients; -@@ -77,6 +95,7 @@ static void va_info_callback(const char *msg) +@@ -149,6 +167,7 @@ static void va_info_callback(const char { va_message_callback(msg, MSGL_V); } +#endif static void open_lavu_vaapi_device(struct mp_vaapi_ctx *ctx) { -@@ -108,6 +127,10 @@ struct mp_vaapi_ctx *va_initialize(VADisplay *display, struct mp_log *plog, +@@ -181,6 +200,10 @@ struct mp_vaapi_ctx *va_initialize(VADis }, }; +#if VA_CHECK_VERSION(1, 0, 0) + vaSetErrorCallback(display, va_error_callback, res); + vaSetInfoCallback(display, va_info_callback, res); +#else pthread_mutex_lock(&va_log_mutex); MP_TARRAY_APPEND(NULL, va_mpv_clients, num_va_mpv_clients, res); pthread_mutex_unlock(&va_log_mutex); -@@ -118,6 +141,7 @@ struct mp_vaapi_ctx *va_initialize(VADisplay *display, struct mp_log *plog, +@@ -191,6 +214,7 @@ struct mp_vaapi_ctx *va_initialize(VADis vaSetErrorCallback(va_error_callback); vaSetInfoCallback(va_info_callback); #endif +#endif - int major, minor; - int status = vaInitialize(display, &major, &minor); -@@ -154,6 +178,7 @@ void va_destroy(struct mp_vaapi_ctx *ctx) + int major_version, minor_version; + int status = vaInitialize(display, &major_version, &minor_version); +@@ -231,6 +255,7 @@ void va_destroy(struct mp_vaapi_ctx *ctx if (ctx->destroy_native_ctx) ctx->destroy_native_ctx(ctx->native_ctx); +#if !VA_CHECK_VERSION(1, 0, 0) pthread_mutex_lock(&va_log_mutex); for (int n = 0; n < num_va_mpv_clients; n++) { if (va_mpv_clients[n] == ctx) { -@@ -164,6 +189,7 @@ void va_destroy(struct mp_vaapi_ctx *ctx) +@@ -241,6 +266,7 @@ void va_destroy(struct mp_vaapi_ctx *ctx if (num_va_mpv_clients == 0) TA_FREEP(&va_mpv_clients); // avoid triggering leak detectors pthread_mutex_unlock(&va_log_mutex); +#endif talloc_free(ctx); }