From 151ef96e76965aa4ee7468f994164a90ee044630a238f461a5b7e76fc819648c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= Date: Thu, 16 Nov 2017 21:22:10 +0000 Subject: [PATCH] Accepting request 542474 from home:dimstar:Factory - Add mpv-vaapi2.patch: Fix build iwth vaapi 2.0. The patch is a backport of the commits 93c52b, f35126 and 2ecf24. - Conditionalize use of %desktop_database_post/postun and icon_theme_cache_post/postun to suse_version < 1330. The functionality has since been replaced by file triggers and the macros expand to %nil. OBS-URL: https://build.opensuse.org/request/show/542474 OBS-URL: https://build.opensuse.org/package/show/multimedia:apps/mpv?expand=0&rev=125 --- mpv-vaapi2.patch | 145 +++++++++++++++++++++++++++++++++++++++++++++++ mpv.changes | 10 ++++ mpv.spec | 5 ++ 3 files changed, 160 insertions(+) create mode 100644 mpv-vaapi2.patch diff --git a/mpv-vaapi2.patch b/mpv-vaapi2.patch new file mode 100644 index 0000000..7045955 --- /dev/null +++ b/mpv-vaapi2.patch @@ -0,0 +1,145 @@ +From 6265a2d7793c52b16f48f6f8db5d8833d350abc5 Mon Sep 17 00:00:00 2001 +From: wm4 +Date: Fri, 29 Sep 2017 16:51:30 +0200 +Subject: [PATCH] vaapi: minor changes + +This is for relicensing. Some of this code is loosely based on +vo_vaapi.c from the original MPlayer-vaapi patches. Most of the code has +changed, and only the initialization code and check_status() look +remotely similar. The initialization code is changed to be like Libav's +(hwcontext_vaapi.c). check_va_status() is just a C idiom, but to play it +safe, we'll either drop it from LGPL code (or recreate it). + +vaapi.c still contains plenty of code from the original patches, but the +next commits will move them out of the LGPL code paths. +--- + video/vaapi.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +Index: mpv-0.27.0/video/vaapi.c +=================================================================== +--- mpv-0.27.0.orig/video/vaapi.c ++++ mpv-0.27.0/video/vaapi.c +@@ -30,15 +30,6 @@ + #include + #include + +-bool check_va_status(struct mp_log *log, VAStatus status, const char *msg) +-{ +- if (status != VA_STATUS_SUCCESS) { +- mp_err(log, "%s: %s\n", msg, vaErrorStr(status)); +- return false; +- } +- return true; +-} +- + int va_get_colorspace_flag(enum mp_csp csp) + { + switch (csp) { +@@ -112,9 +103,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; +@@ -149,6 +158,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) + { +@@ -181,6 +191,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); +@@ -191,15 +205,16 @@ struct mp_vaapi_ctx *va_initialize(VADis + vaSetErrorCallback(va_error_callback); + vaSetInfoCallback(va_info_callback); + #endif ++#endif + +- int major_version, minor_version; +- int status = vaInitialize(display, &major_version, &minor_version); +- if (status != VA_STATUS_SUCCESS && probing) +- goto error; +- if (!check_va_status(res->log, status, "vaInitialize()")) ++ int major, minor; ++ int status = vaInitialize(display, &major, &minor); ++ if (status != VA_STATUS_SUCCESS) { ++ if (!probing) ++ MP_ERR(res, "Failed to initialize VAAPI: %s\n", vaErrorStr(status)); + goto error; +- +- MP_VERBOSE(res, "VA API version %d.%d\n", major_version, minor_version); ++ } ++ MP_VERBOSE(res, "Initialized VAAPI: version %d.%d\n", major, minor); + + va_get_formats(res); + if (!res->image_formats) +@@ -231,6 +246,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) { +@@ -241,6 +257,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); + } +Index: mpv-0.27.0/video/vaapi.h +=================================================================== +--- mpv-0.27.0.orig/video/vaapi.h ++++ mpv-0.27.0/video/vaapi.h +@@ -41,9 +41,9 @@ struct mp_vaapi_ctx { + void (*destroy_native_ctx)(void *native_ctx); + }; + +-bool check_va_status(struct mp_log *log, VAStatus status, const char *msg); +- +-#define CHECK_VA_STATUS(ctx, msg) check_va_status((ctx)->log, status, msg) ++#define CHECK_VA_STATUS(ctx, msg) \ ++ (status == VA_STATUS_SUCCESS ? true \ ++ : (MP_ERR(ctx, "%s failed (%s)\n", msg, vaErrorStr(status)), false)) + + int va_get_colorspace_flag(enum mp_csp csp); + diff --git a/mpv.changes b/mpv.changes index 690c3ce..a7c4410 100644 --- a/mpv.changes +++ b/mpv.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Thu Nov 16 17:36:01 UTC 2017 - dimstar@opensuse.org + +- Add mpv-vaapi2.patch: Fix build iwth vaapi 2.0. The patch is a + backport of the commits 93c52b, f35126 and 2ecf24. +- Conditionalize use of %desktop_database_post/postun and + icon_theme_cache_post/postun to suse_version < 1330. The + functionality has since been replaced by file triggers and the + macros expand to %nil. + ------------------------------------------------------------------- Mon Nov 13 15:52:36 UTC 2017 - schwab@suse.de diff --git a/mpv.spec b/mpv.spec index 2c8e2ed..4ce6fdd 100644 --- a/mpv.spec +++ b/mpv.spec @@ -37,6 +37,8 @@ Source2: %{name}.changes Source3: https://github.com/2ion/mpv-bash-completion/archive/%{_mbc_ver}.tar.gz#/mpv-bash-completion-%{_mbc_ver}.tar.gz # PATCH-FIX-OPENSUSE do not require equal libav versions, obs rebuilds as needed Patch0: mpv-make-ffmpeg-version-check-non-fatal.patch +# PATCH-FIx-UPSTREAM mpv-vaapi2.patch dimstar@opensuse.org -- Fix build with vaapi 2.0 +Patch1: mpv-vaapi2.patch BuildRequires: bash BuildRequires: hicolor-icon-theme BuildRequires: libjpeg-devel @@ -194,6 +196,7 @@ features. %prep %setup -q -a 3 -n %{name}-%{_mpv_ver} %patch0 -p1 +%patch1 -p1 # As we downloaded specific waf version we need to put and prepare it in place. cp -f %{SOURCE1} waf @@ -250,6 +253,7 @@ install -D -m 0644 etc/mpv.conf %{buildroot}%{_sysconfdir}/%{name}/mpv.conf # remove shebang sed -i -e '1d' %{buildroot}%{_datadir}/bash-completion/completions/mpv +%if 0%{?suse_version} < 1330 %post %desktop_database_post %icon_theme_cache_post @@ -257,6 +261,7 @@ sed -i -e '1d' %{buildroot}%{_datadir}/bash-completion/completions/mpv %postun %desktop_database_postun %icon_theme_cache_postun +%endif %post -n %{lname} -p /sbin/ldconfig %postun -n %{lname} -p /sbin/ldconfig