SHA256
1
0
forked from jengelh/ffmpeg-7

30 Commits

Author SHA256 Message Date
cdf181d540 Sync changes to SLFO-1.2 branch 2025-08-20 09:14:57 +02:00
058f4b41f8 Accepting request 1248138 from multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/1248138
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=10
2025-02-25 15:39:52 +00:00
OBS User unknown
5915c22dcc [info=fba0c8d5aee6456fbfe57c31817aaff4ce7ba3d31509ca778be2c36ad4b1dff5]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=23
2025-02-24 13:06:59 +00:00
OBS User unknown
0d5a257491 [info=90e1a4148e7a201c3ea960bc4e9e8b0c2e6a27b10f90b19068a0b0fd817dfc5b]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=22
2025-02-23 20:24:16 +00:00
a7d186aed2 Accepting request 1208093 from multimedia:libs
- Adjust bconds to build the package in SLFO without xvidcore.

OBS-URL: https://build.opensuse.org/request/show/1208093
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=9
2024-10-16 21:36:19 +00:00
OBS User unknown
9359870d00 [info=32cbe46280190beb53660e8ea40da248a198ba6eb095ea8a9dc9caccc4963886]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=21
2024-10-15 10:05:04 +00:00
451472ac1b Accepting request 1205169 from multimedia:libs
- Update to release 7.1

OBS-URL: https://build.opensuse.org/request/show/1205169
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=8
2024-10-04 15:08:22 +00:00
OBS User unknown
4fdf25905f [info=d30cb95aec905435c6cc64ad770f21ca719b717f1b53b756c92f9da2c7e8b4de]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=20
2024-10-02 08:32:53 +00:00
OBS User unknown
0973994793 [info=0c9616089071a8dced9fb42ea41bb32eaec1a8ee43f61e520bc172619d27fbb1]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=19
2024-10-02 08:26:14 +00:00
OBS User unknown
33b0312119 [info=e2cfa392ea5ec5c8759e17515fb74d51aa2b02f06ee8727322a04a4a623387f5]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=18
2024-10-01 10:50:51 +00:00
OBS User unknown
b4e814daa8 [info=baf5b4d95469634449521f7aa2b6937ad73458dc9e02f8350a818e586f36a5ed]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=17
2024-09-18 08:08:14 +00:00
44e58ba163 Accepting request 1195053 from multimedia:libs
- Add 0001-libavcodec-arm-mlpdsp_armv5te-fix-label-format-to-wo.patch
  to resolve build failure on armv7 [boo#1229338]

OBS-URL: https://build.opensuse.org/request/show/1195053
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=7
2024-08-22 16:10:27 +00:00
OBS User unknown
ff2a908032 [info=f803df26e37180e4cb16e1e5c0a357b23d53b87108ed61cd85ebf6b6e6fb130d]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=16
2024-08-21 10:08:05 +00:00
6cdd476369 Accepting request 1193125 from multimedia:libs
- Update to version 7.0.2:

OBS-URL: https://build.opensuse.org/request/show/1193125
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=6
2024-08-12 10:31:00 +00:00
OBS User unknown
9e7b4eb1dc [info=62e69514f7630d78d61eaba08f38722630b84b1cd4a21f572e09cb0b26d8249d]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=15
2024-08-10 08:05:40 +00:00
OBS User unknown
702836018c [info=c18297e308645d07cd752581c87e8ce7a6505bf32f0aa8ae39866670926cbbdd]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=14
2024-08-09 23:09:18 +00:00
OBS User unknown
8873641387 [info=ab72df490fb43933b2b76ceba94ffc7443f90be22155de46d0025c79a3ca7554]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=13
2024-08-08 17:24:46 +00:00
OBS User unknown
d2fc79c049 [info=c33511409da6284329adc96eef590fa4e2c9d4c7104673bb8ea91d33cac77d01]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=12
2024-08-08 16:24:53 +00:00
8cbc397a59 Accepting request 1191766 from multimedia:libs
- Add ffmpeg-7-fix-crashes.patch:
  Backporting 5b87869c from upstream, fix track handling when mixing
  IAMF and video tracks, Fixes crashes when muxing the two together.

OBS-URL: https://build.opensuse.org/request/show/1191766
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=5
2024-08-06 07:08:13 +00:00
OBS User unknown
f123e2a485 [info=8c17f41823d4600460b89dd35ff0365d154e30b5ae64f6d51ca6e5862223987c]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=11
2024-08-05 10:26:50 +00:00
ff88b22e6b Accepting request 1190843 from multimedia:libs
forwarded submit from qzhao; fix spellos in bug numbers

OBS-URL: https://build.opensuse.org/request/show/1190843
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=4
2024-08-01 20:05:08 +00:00
OBS User unknown
fac57fe4a0 [info=c11c165366f5efd4f76b39c067ee40963b935711f86e1d14fd08ef565763b0fc]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=10
2024-08-01 03:21:30 +00:00
f66ec2e89b Accepting request 1189880 from multimedia:libs
ffmpeg CVE patches

OBS-URL: https://build.opensuse.org/request/show/1189880
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=3
2024-07-28 15:19:40 +00:00
OBS User unknown
14763875da [info=99ea9689b9928285bdc91473b710e322c6674d77460c31063bc7209002dfa7e3]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=9
2024-07-27 06:41:26 +00:00
OBS User unknown
e437d3969c [info=fbe5e55a657c3ed2f9397d73c6a2952eabab5b3d5085e526c709a573f6ec97b9]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=8
2024-07-27 06:40:25 +00:00
OBS User unknown
e0891e621b [info=cfe0711badaae4cfbccf67b46e8058d05336b845a8a44479fa7ac89ed55deea3]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=7
2024-07-27 06:38:38 +00:00
b9d6f48455 [info=5866842008640d8587d2a2505eedfe03f21398112f825fb2986c6286a098bf00]
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=6
2024-07-09 14:03:20 +00:00
64b2585ab8 Accepting request 1185067 from multimedia:libs
- Add ffmpeg-7-CVE-2024-32230.patch:
  Backporting 96449cfe from upstream, Fix 1 line and one column images.
  (CVE-2024-32230 bsc#1227296)

- Add ffmpeg-7-CVE-2024-32228.patch:
  Backporting 45964876 from upstream, Fix segfault on invalid film
  grain metadata.
  (CVE-2024-32228, bsc#1227277)

OBS-URL: https://build.opensuse.org/request/show/1185067
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/ffmpeg-7?expand=0&rev=2
2024-07-04 14:24:10 +00:00
8ec2a2c630 Replace duplicate metadata; use form from git-format-patch
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=4
2024-07-03 07:45:28 +00:00
1a19def9cd Add ffmpeg-7-CVE-2024-32228.patch ffmpeg-7-CVE-2024-32230.patch to fix CVE bugs. (CVE-2024-32228, bsc#1227277, CVE-2024-32230, bsc#1227296)
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=3
2024-07-03 07:39:13 +00:00
3 changed files with 21 additions and 361 deletions

View File

@@ -1,3 +1,14 @@
-------------------------------------------------------------------
Wed Jun 25 08:40:15 UTC 2025 - Yifan Jiang <yfjiang@suse.com>
- Built with noopenh264, drop ffmpeg-dlopen-openh264.patch
(jsc#PED-12607)
-------------------------------------------------------------------
Thu Jun 12 17:48:49 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Enable libiec61883 integration [boo#1244453]
-------------------------------------------------------------------
Fri Apr 4 09:34:14 UTC 2025 - Jan Engelhardt <jengelh@inai.de>

View File

@@ -118,16 +118,14 @@ Patch3: ffmpeg-codec-choice.diff
Patch4: ffmpeg-4.2-dlopen-fdk_aac.patch
Patch5: work-around-abi-break.patch
Patch10: ffmpeg-chromium.patch
Patch91: ffmpeg-dlopen-openh264.patch
Patch15: 11013-avcodec-decode-clean-up-if-get_hw_frames_parameters-.patch
Patch18: ffmpeg-7-CVE-2025-25473.patch
Patch19: ffmpeg-7-CVE-2025-22921.patch
Patch20: 0001-avcodec-libsvtav1-unbreak-build-with-latest-svtav1.patch
BuildRequires: ladspa-devel
BuildRequires: libgsm-devel
BuildRequires: libmp3lame-devel >= 3.98.3
BuildRequires: nasm
BuildRequires: pkgconfig
BuildRequires: pkg-config
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(aom) >= 1.0.0
BuildRequires: pkgconfig(dav1d) >= 0.5.0
@@ -138,6 +136,7 @@ BuildRequires: pkgconfig(fribidi) >= 0.19.0
BuildRequires: pkgconfig(gnutls)
BuildRequires: pkgconfig(jack)
BuildRequires: pkgconfig(libass) >= 0.11.0
BuildRequires: pkgconfig(libavc1394)
BuildRequires: pkgconfig(libbluray)
BuildRequires: pkgconfig(libbs2b)
BuildRequires: pkgconfig(libcdio)
@@ -145,6 +144,8 @@ BuildRequires: pkgconfig(libcdio_paranoia)
BuildRequires: pkgconfig(libdc1394-2)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libgme)
BuildRequires: pkgconfig(libiec61883)
BuildRequires: pkgconfig(libmp3lame) >= 3.98.3
BuildRequires: pkgconfig(libopenjp2) >= 2.1.0
BuildRequires: pkgconfig(libopenmpt) >= 0.2.6557
BuildRequires: pkgconfig(libpng)
@@ -161,6 +162,7 @@ BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libzmq) >= 4.2.1
BuildRequires: pkgconfig(lilv-0)
BuildRequires: pkgconfig(ogg)
BuildRequires: pkgconfig(openh264)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(sdl2) >= 2.0.1
BuildRequires: pkgconfig(soxr)
@@ -185,7 +187,7 @@ BuildRequires: pkgconfig(zvbi-0.2) >= 0.2.28
BuildRequires: AMF-devel
%endif
%if %{with mysofa}
BuildRequires: libmysofa-devel
BuildRequires: pkgconfig(libmysofa)
%endif
%if %{with codec2}
BuildRequires: pkgconfig(codec2)
@@ -236,7 +238,7 @@ BuildRequires: pkgconfig(SvtAv1Enc) >= 0.9.0
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150600
BuildRequires: pkgconfig(libplacebo) >= 6.292.0
%else
BuildRequires: (pkgconfig(libplacebo) >= 4.192.0 with pkgconfig (libplacebo) < 6.292.0)
BuildRequires: (pkgconfig(libplacebo) >= 4.192.0 with pkgconfig(libplacebo) < 6.292.0)
%endif
BuildRequires: pkgconfig(shaderc) >= 2019.1
BuildRequires: pkgconfig(vulkan) >= 1.3.255
@@ -590,6 +592,7 @@ LDFLAGS="%_lto_cflags" \
--enable-libfreetype \
--enable-libfribidi \
--enable-libgsm \
--enable-libiec61883 \
--enable-libjack \
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150700
--enable-libjxl \
@@ -601,7 +604,7 @@ LDFLAGS="%_lto_cflags" \
%endif
--enable-libopenjpeg \
--enable-libopenmpt \
--enable-libopenh264-dlopen \
--enable-libopenh264 \
--enable-libopus \
--enable-libpulse \
%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150400
@@ -832,9 +835,9 @@ Patch3: ffmpeg-codec-choice.diff
Patch4: ffmpeg-4.2-dlopen-fdk_aac.patch
Patch5: work-around-abi-break.patch
Patch10: ffmpeg-chromium.patch
Patch91: ffmpeg-dlopen-openh264.patch
Patch15: 11013-avcodec-decode-clean-up-if-get_hw_frames_parameters-.patch
BuildRequires: c_compiler
BuildRequires: pkgconfig(openh264)
Requires: this-is-only-for-build-envs
%description

View File

@@ -1,354 +0,0 @@
From 4739b0c97b3378bdaf737171777fe9a71a53eff1 Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa@fedoraproject.org>
Date: Wed, 12 Oct 2022 09:41:27 -0400
Subject: [PATCH] avcodec/openh264: Add the ability to dlopen() OpenH264
We can't directly depend on OpenH264, but we can weakly link to it
and gracefully expose the capability.
Co-authored-by: Andreas Schneider <asn@cryptomilk.org>
Co-authored-by: Neal Gompa <ngompa@fedoraproject.org>
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
Signed-off-by: Neal Gompa <ngompa@fedoraproject.org>
---
configure | 3
libavcodec/Makefile | 1
libavcodec/libopenh264.c | 5 +
libavcodec/libopenh264_dlopen.c | 147 ++++++++++++++++++++++++++++++++++++++++
libavcodec/libopenh264_dlopen.h | 58 +++++++++++++++
libavcodec/libopenh264dec.c | 8 ++
libavcodec/libopenh264enc.c | 8 ++
7 files changed, 230 insertions(+)
create mode 100644 libavcodec/libopenh264_dlopen.c
create mode 100644 libavcodec/libopenh264_dlopen.h
Index: ffmpeg-7.1/configure
===================================================================
--- ffmpeg-7.1.orig/configure
+++ ffmpeg-7.1/configure
@@ -255,6 +255,7 @@ External library support:
--enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
--enable-libopencv enable video filtering via libopencv [no]
--enable-libopenh264 enable H.264 encoding via OpenH264 [no]
+ --enable-libopenh264-dlopen enable H.264 encoding via dlopen()'ed OpenH264 [no]
--enable-libopenjpeg enable JPEG 2000 encoding via OpenJPEG [no]
--enable-libopenmpt enable decoding tracked files via libopenmpt [no]
--enable-libopenvino enable OpenVINO as a DNN module backend
@@ -1939,6 +1940,7 @@ EXTERNAL_LIBRARY_LIST="
libmysofa
libopencv
libopenh264
+ libopenh264_dlopen
libopenjpeg
libopenmpt
libopenvino
@@ -6966,6 +6968,7 @@ enabled libopencv && { check_hea
require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } ||
require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; }
enabled libopenh264 && require_pkg_config libopenh264 "openh264 >= 1.3.0" wels/codec_api.h WelsGetCodecVersion
+enabled libopenh264_dlopen && enable libopenh264 && add_cppflags "-I$(dirname $(readlink -f "$0"))/ffdlopenhdrs/include -DCONFIG_LIBOPENH264_DLOPEN=1"
enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
{ require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
Index: ffmpeg-7.1/libavcodec/Makefile
===================================================================
--- ffmpeg-7.1.orig/libavcodec/Makefile
+++ ffmpeg-7.1/libavcodec/Makefile
@@ -1138,6 +1138,7 @@ OBJS-$(CONFIG_LIBMP3LAME_ENCODER)
OBJS-$(CONFIG_LIBOPENCORE_AMRNB_DECODER) += libopencore-amr.o
OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER) += libopencore-amr.o
OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER) += libopencore-amr.o
+OBJS-$(CONFIG_LIBOPENH264_DLOPEN) += libopenh264_dlopen.o
OBJS-$(CONFIG_LIBOPENH264_DECODER) += libopenh264dec.o libopenh264.o
OBJS-$(CONFIG_LIBOPENH264_ENCODER) += libopenh264enc.o libopenh264.o
OBJS-$(CONFIG_LIBOPENJPEG_ENCODER) += libopenjpegenc.o
Index: ffmpeg-7.1/libavcodec/libopenh264.c
===================================================================
--- ffmpeg-7.1.orig/libavcodec/libopenh264.c
+++ ffmpeg-7.1/libavcodec/libopenh264.c
@@ -20,8 +20,13 @@
*/
#include <string.h>
+
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+#include "libopenh264_dlopen.h"
+#else
#include <wels/codec_api.h>
#include <wels/codec_ver.h>
+#endif
#include "libavutil/error.h"
#include "libavutil/log.h"
Index: ffmpeg-7.1/libavcodec/libopenh264_dlopen.c
===================================================================
--- /dev/null
+++ ffmpeg-7.1/libavcodec/libopenh264_dlopen.c
@@ -0,0 +1,147 @@
+/*
+ * OpenH264 dlopen code
+ *
+ * Copyright (C) 2022 Andreas Schneider <asn@cryptomilk.org>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <dlfcn.h>
+
+#include "libopenh264_dlopen.h"
+
+/*
+ * The symbol binding makes sure we do not run into strict aliasing issues which
+ * can lead into segfaults.
+ */
+typedef int (*__oh264_WelsCreateSVCEncoder)(ISVCEncoder **);
+typedef void (*__oh264_WelsDestroySVCEncoder)(ISVCEncoder *);
+typedef int (*__oh264_WelsGetDecoderCapability)(SDecoderCapability *);
+typedef long (*__oh264_WelsCreateDecoder)(ISVCDecoder **);
+typedef void (*__oh264_WelsDestroyDecoder)(ISVCDecoder *);
+typedef OpenH264Version (*__oh264_WelsGetCodecVersion)(void);
+typedef void (*__oh264_WelsGetCodecVersionEx)(OpenH264Version *);
+
+#define OH264_SYMBOL_ENTRY(i) \
+ union { \
+ __oh264_##i f; \
+ void *obj; \
+ } _oh264_##i
+
+struct oh264_symbols {
+ OH264_SYMBOL_ENTRY(WelsCreateSVCEncoder);
+ OH264_SYMBOL_ENTRY(WelsDestroySVCEncoder);
+ OH264_SYMBOL_ENTRY(WelsGetDecoderCapability);
+ OH264_SYMBOL_ENTRY(WelsCreateDecoder);
+ OH264_SYMBOL_ENTRY(WelsDestroyDecoder);
+ OH264_SYMBOL_ENTRY(WelsGetCodecVersion);
+ OH264_SYMBOL_ENTRY(WelsGetCodecVersionEx);
+};
+
+/* Symbols are bound by loadLibOpenH264() */
+static struct oh264_symbols openh264_symbols;
+
+int oh264_WelsCreateSVCEncoder(ISVCEncoder **ppEncoder) {
+ return openh264_symbols._oh264_WelsCreateSVCEncoder.f(ppEncoder);
+}
+
+void oh264_WelsDestroySVCEncoder(ISVCEncoder *pEncoder) {
+ return openh264_symbols._oh264_WelsDestroySVCEncoder.f(pEncoder);
+}
+
+int oh264_WelsGetDecoderCapability(SDecoderCapability *pDecCapability) {
+ return openh264_symbols._oh264_WelsGetDecoderCapability.f(pDecCapability);
+}
+
+long oh264_WelsCreateDecoder(ISVCDecoder **ppDecoder) {
+ return openh264_symbols._oh264_WelsCreateDecoder.f(ppDecoder);
+}
+
+void oh264_WelsDestroyDecoder(ISVCDecoder *pDecoder) {
+ return openh264_symbols._oh264_WelsDestroyDecoder.f(pDecoder);
+}
+
+OpenH264Version oh264_WelsGetCodecVersion(void) {
+ return openh264_symbols._oh264_WelsGetCodecVersion.f();
+}
+
+void oh264_WelsGetCodecVersionEx(OpenH264Version *pVersion) {
+ openh264_symbols._oh264_WelsGetCodecVersionEx.f(pVersion);
+}
+
+static void *_oh264_bind_symbol(AVCodecContext *avctx,
+ void *handle,
+ const char *sym_name) {
+ void *sym = NULL;
+
+ sym = dlsym(handle, sym_name);
+ if (sym == NULL) {
+ const char *err = dlerror();
+ av_log(avctx,
+ AV_LOG_WARNING,
+ "%s: Failed to bind %s\n",
+ err,
+ sym_name);
+ return NULL;
+ }
+
+ return sym;
+}
+
+#define oh264_bind_symbol(avctx, handle, sym_name) \
+ if (openh264_symbols._oh264_##sym_name.obj == NULL) { \
+ openh264_symbols._oh264_##sym_name.obj = _oh264_bind_symbol(avctx, handle, #sym_name); \
+ if (openh264_symbols._oh264_##sym_name.obj == NULL) { \
+ return 1; \
+ } \
+ }
+
+int loadLibOpenH264(AVCodecContext *avctx) {
+ static bool initialized = false;
+ void *libopenh264 = NULL;
+ const char *err = NULL;
+
+ if (initialized) {
+ return 0;
+ }
+
+#define OPENH264_LIB "libopenh264.so.7"
+ libopenh264 = dlopen(OPENH264_LIB, RTLD_LAZY);
+ err = dlerror();
+ if (err != NULL) {
+ av_log(avctx, AV_LOG_WARNING,
+ "%s: %s is missing, openh264 support will be disabled\n", err,
+ OPENH264_LIB);
+
+ if (libopenh264 != NULL) {
+ dlclose(libopenh264);
+ }
+ return 1;
+ }
+
+ oh264_bind_symbol(avctx, libopenh264, WelsCreateSVCEncoder);
+ oh264_bind_symbol(avctx, libopenh264, WelsDestroySVCEncoder);
+ oh264_bind_symbol(avctx, libopenh264, WelsGetDecoderCapability);
+ oh264_bind_symbol(avctx, libopenh264, WelsCreateDecoder);
+ oh264_bind_symbol(avctx, libopenh264, WelsDestroyDecoder);
+ oh264_bind_symbol(avctx, libopenh264, WelsGetCodecVersion);
+ oh264_bind_symbol(avctx, libopenh264, WelsGetCodecVersionEx);
+
+ initialized = true;
+
+ return 0;
+}
Index: ffmpeg-7.1/libavcodec/libopenh264_dlopen.h
===================================================================
--- /dev/null
+++ ffmpeg-7.1/libavcodec/libopenh264_dlopen.h
@@ -0,0 +1,58 @@
+/*
+ * OpenH264 dlopen code
+ *
+ * Copyright (C) 2022 Andreas Schneider <asn@cryptomilk.org>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef HAVE_LIBOPENH264_DLOPEN_H
+#define HAVE_LIBOPENH264_DLOPEN_H
+
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+
+#include <wels/codec_api.h>
+#include <wels/codec_ver.h>
+
+#include "avcodec.h"
+
+int oh264_WelsCreateSVCEncoder(ISVCEncoder **ppEncoder);
+#define WelsCreateSVCEncoder oh264_WelsCreateSVCEncoder
+
+void oh264_WelsDestroySVCEncoder(ISVCEncoder *pEncoder);
+#define WelsDestroySVCEncoder oh264_WelsDestroySVCEncoder
+
+int oh264_WelsGetDecoderCapability(SDecoderCapability *pDecCapability);
+#define WelsGetDecoderCapability oh264_WelsGetDecoderCapability
+
+long oh264_WelsCreateDecoder(ISVCDecoder **ppDecoder);
+#define WelsCreateDecoder oh264_WelsCreateDecoder
+
+void oh264_WelsDestroyDecoder(ISVCDecoder *pDecoder);
+#define WelsDestroyDecoder oh264_WelsDestroyDecoder
+
+OpenH264Version oh264_WelsGetCodecVersion(void);
+#define WelsGetCodecVersion oh264_WelsGetCodecVersion
+
+void oh264_WelsGetCodecVersionEx(OpenH264Version *pVersion);
+#define WelsGetCodecVersionEx oh264_WelsGetCodecVersionEx
+
+int loadLibOpenH264(AVCodecContext *avctx);
+
+#endif /* CONFIG_LIBOPENH264_DLOPEN */
+
+#endif /* HAVE_LIBOPENH264_DLOPEN_H */
Index: ffmpeg-7.1/libavcodec/libopenh264dec.c
===================================================================
--- ffmpeg-7.1.orig/libavcodec/libopenh264dec.c
+++ ffmpeg-7.1/libavcodec/libopenh264dec.c
@@ -19,8 +19,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+#include "libopenh264_dlopen.h"
+#else
#include <wels/codec_api.h>
#include <wels/codec_ver.h>
+#endif
#include "libavutil/common.h"
#include "libavutil/fifo.h"
@@ -55,6 +59,10 @@ static av_cold int svc_decode_init(AVCod
int log_level;
WelsTraceCallback callback_function;
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+ if (loadLibOpenH264(avctx))
+ return AVERROR_DECODER_NOT_FOUND;
+#endif
if (WelsCreateDecoder(&s->decoder)) {
av_log(avctx, AV_LOG_ERROR, "Unable to create decoder\n");
return AVERROR_UNKNOWN;
Index: ffmpeg-7.1/libavcodec/libopenh264enc.c
===================================================================
--- ffmpeg-7.1.orig/libavcodec/libopenh264enc.c
+++ ffmpeg-7.1/libavcodec/libopenh264enc.c
@@ -19,8 +19,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+#include "libopenh264_dlopen.h"
+#else
#include <wels/codec_api.h>
#include <wels/codec_ver.h>
+#endif
#include "libavutil/attributes.h"
#include "libavutil/common.h"
@@ -114,6 +118,10 @@ static av_cold int svc_encode_init(AVCod
WelsTraceCallback callback_function;
AVCPBProperties *props;
+#ifdef CONFIG_LIBOPENH264_DLOPEN
+ if (loadLibOpenH264(avctx))
+ return AVERROR_ENCODER_NOT_FOUND;
+#endif
if (WelsCreateSVCEncoder(&s->encoder)) {
av_log(avctx, AV_LOG_ERROR, "Unable to create encoder\n");
return AVERROR_UNKNOWN;