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
This commit is contained in:
Tomáš Chvátal 2017-11-16 21:22:10 +00:00 committed by Git OBS Bridge
parent b3b16add9d
commit 151ef96e76
3 changed files with 160 additions and 0 deletions

145
mpv-vaapi2.patch Normal file
View File

@ -0,0 +1,145 @@
From 6265a2d7793c52b16f48f6f8db5d8833d350abc5 Mon Sep 17 00:00:00 2001
From: wm4 <wm4@nowhere>
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 <libavutil/hwcontext.h>
#include <libavutil/hwcontext_vaapi.h>
-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);

View File

@ -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

View File

@ -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