From d3d2957f14387d585111e473c616def3cad1e0b7 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Wed, 20 Mar 2024 02:12:02 +0300 Subject: [PATCH] import openh264-2.4.1-1.el8 --- .gitignore | 3 + .openh264.metadata | 3 + SOURCES/gst-p-bad-cleanup.sh | 200 ++++++++++++++++ SOURCES/hardcode-openh264-dep.patch | 14 ++ SPECS/openh264.spec | 359 ++++++++++++++++++++++++++++ 5 files changed, 579 insertions(+) create mode 100644 .gitignore create mode 100644 .openh264.metadata create mode 100755 SOURCES/gst-p-bad-cleanup.sh create mode 100644 SOURCES/hardcode-openh264-dep.patch create mode 100644 SPECS/openh264.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eaf62b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/gmp-api-e7d30b9.tar.gz +SOURCES/gst-plugins-bad-openh264-1.22.9.tar.xz +SOURCES/openh264-2.4.1.tar.gz diff --git a/.openh264.metadata b/.openh264.metadata new file mode 100644 index 0000000..313a004 --- /dev/null +++ b/.openh264.metadata @@ -0,0 +1,3 @@ +de8f6395a21b2005d04e105642538b68cfa07049 SOURCES/gmp-api-e7d30b9.tar.gz +f7bf74442f52a0ce01e5db81e29a778e4fabc1d7 SOURCES/gst-plugins-bad-openh264-1.22.9.tar.xz +4c12ca6790c66900ecd24c12a624fa01490e823b SOURCES/openh264-2.4.1.tar.gz diff --git a/SOURCES/gst-p-bad-cleanup.sh b/SOURCES/gst-p-bad-cleanup.sh new file mode 100755 index 0000000..00f4728 --- /dev/null +++ b/SOURCES/gst-p-bad-cleanup.sh @@ -0,0 +1,200 @@ +#!/bin/sh + +# Process a gst-plugins-bad tarball to remove +# unwanted GStreamer plugins. +# +# This script here is taken from Fedora gstreamer1-plugins-bad-free repo, with +# only change being openh264 addition. +# +# See https://bugzilla.redhat.com/show_bug.cgi?id=532470 +# for details +# +# Bastien Nocera - 2010 +# + +SOURCE="$1" +NEW_SOURCE=`echo $SOURCE | sed 's/bad-/bad-openh264-/'` +DIRECTORY=`echo $SOURCE | sed 's/\.tar\.xz//'` + +ALLOWED=" +aacparse +accurip +adpcmdec +adpcmenc +aiff +aiffparse +amrparse +asfmux +audiobuffersplit +audiofxbad +audiolatency +audiomixer +audiomixmatrix +audioparsers +audiovisualizers +autoconvert +bayer +camerabin +camerabin2 +cdxaparse +codecalpha +codectimestamper +coloreffects +colorspace +compositor +dataurisrc +dccp +debugutils +dtmf +dvbsubenc +dvbsuboverlay +faceoverlay +festival +fieldanalysis +freeverb +freeze +frei0r +gaudieffects +gdp +geometrictransform +h264parse +hdvparse +hls +id3tag +inter +interlace +invtelecine +ivfparse +ivtc +jpegformat +jp2kdecimator +legacyresample +librfb +liveadder +midi +mve +mpegdemux +mpeg4videoparse +mpegpsmux +mpegtsdemux +mpegtsmux +mpegvideoparse +mxf +netsim +nsf +nuvdemux +onvif +openh264 +patchdetect +pcapparse +pnm +proxy +qtmux +rawparse +removesilence +rist +rtmp2 +rtp +rtpmux +rtpvp8 +scaletempo +sdi +sdp +segmentclip +selector +siren +smooth +speed +stereo +subenc +switchbin +timecode +transcode +tta +valve +videofilters +videoframe_audiolevel +videomaxrate +videomeasure +videoparsers +videosignal +vmnc +yadif +y4m +" + +NOT_ALLOWED=" +dvdspu +" + +error() +{ + MESSAGE=$1 + echo $MESSAGE + exit 1 +} + +check_allowed() +{ + MODULE=$1 + for i in $ALLOWED ; do + if test x$MODULE = x$i ; then + return 0; + fi + done + # Ignore errors coming from ext/ directory + # they require external libraries so are ineffective anyway + return 1; +} + +check_not_allowed() +{ + MODULE=$1 + for i in $NOT_ALLOWED ; do + if test x$MODULE = x$i ; then + return 0; + fi + done + return 1; +} + +rm -rf $DIRECTORY +tar xJf $SOURCE || error "Cannot unpack $SOURCE" +pushd $DIRECTORY > /dev/null || error "Cannot open directory \"$DIRECTORY\"" + +unknown="" +for subdir in gst ext sys; do + for dir in $subdir/* ; do + # Don't touch non-directories + if ! [ -d $dir ] ; then + continue; + fi + MODULE=`basename $dir` + if ( check_not_allowed $MODULE ) ; then + echo "**** Removing $MODULE ****" + echo "Removing directory $dir" + rm -r $dir || error "Cannot remove $dir" + echo + elif test $subdir = ext || test $subdir = sys; then + # Ignore library or system non-blacklisted plugins + continue; + elif ! ( check_allowed $MODULE ) ; then + echo "Unknown module in $dir" + unknown="$unknown $dir" + fi + done +done + +echo + +if test "x$unknown" != "x"; then + echo -n "Aborting due to unkown modules: " + echo "$unknown" | sed "s/ /\n /g" + exit 1 +fi + +popd > /dev/null + +tar cJf $NEW_SOURCE $DIRECTORY +echo "$NEW_SOURCE is ready to use" + diff --git a/SOURCES/hardcode-openh264-dep.patch b/SOURCES/hardcode-openh264-dep.patch new file mode 100644 index 0000000..fbedcd9 --- /dev/null +++ b/SOURCES/hardcode-openh264-dep.patch @@ -0,0 +1,14 @@ +diff -up gst-plugins-bad-1.18.2/ext/openh264/meson.build.orig gst-plugins-bad-1.18.2/ext/openh264/meson.build +--- gst-plugins-bad-1.18.2/ext/openh264/meson.build.orig 2020-12-06 14:24:13.000000000 +0100 ++++ gst-plugins-bad-1.18.2/ext/openh264/meson.build 2021-02-11 11:48:58.660450319 +0100 +@@ -4,9 +4,7 @@ openh264_sources = [ + 'gstopenh264plugin.c', + ] + +-openh264_dep = dependency('openh264', version : '>= 1.3.0', +- required : get_option('openh264'), +- fallback: ['openh264', 'openh264_dep']) ++openh264_dep = cc.find_library('openh264') + + if openh264_dep.found() + gstopenh264 = library('gstopenh264', diff --git a/SPECS/openh264.spec b/SPECS/openh264.spec new file mode 100644 index 0000000..fd406f5 --- /dev/null +++ b/SPECS/openh264.spec @@ -0,0 +1,359 @@ +# To get the gmp-api commit to use, run: +# rm -rf gmp-api;make gmp-bootstrap;cd gmp-api;git rev-parse HEAD +%global commit1 e7d30b921df736a1121a0c8e0cf3ab1ce5b8a4b7 +%global shortcommit1 %(c=%{commit1}; echo ${c:0:7}) + +%global openh264_version 2.4.1 +%global gst_version 1.22.9 + +# Filter out soname provides for the mozilla plugin +%global __provides_exclude_from ^%{_libdir}/mozilla/plugins/ + +Name: openh264 +Version: %{openh264_version} +# Also bump the Release tag for gstreamer1-plugin-openh264 down below +Release: 1%{?dist} +Summary: H.264 codec library + +License: BSD-2-Clause +URL: https://www.openh264.org/ +Source0: https://github.com/cisco/openh264/archive/v%{openh264_version}/openh264-%{openh264_version}.tar.gz +Source1: https://github.com/mozilla/gmp-api/archive/%{commit1}/gmp-api-%{shortcommit1}.tar.gz +# The source is: +# http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-%%{gst_version}.tar.xz +# modified with gst-p-bad-cleanup.sh from SOURCE3 +Source2: gst-plugins-bad-openh264-%{gst_version}.tar.xz +Source3: gst-p-bad-cleanup.sh + +# Don't use pkg-config for finding openh264 as we are building against an in-tree copy +Patch2: hardcode-openh264-dep.patch + +BuildRequires: gcc-c++ +BuildRequires: gstreamer1-devel >= %{gst_version} +BuildRequires: gstreamer1-plugins-base-devel >= %{gst_version} +BuildRequires: make +BuildRequires: meson +BuildRequires: nasm + +# Replace the stub package +Obsoletes: noopenh264 < 1:0 + +%description +OpenH264 is a codec library which supports H.264 encoding and decoding. It is +suitable for use in real time applications such as WebRTC. + + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{openh264_version}-%{release} +# Replace the stub package +Obsoletes: noopenh264-devel < 1:0 + +%description devel +The %{name}-devel package contains libraries and header files for +developing applications that use %{name}. + + +%package -n mozilla-openh264 +Summary: H.264 codec support for Mozilla browsers +Requires: %{name}%{?_isa} = %{openh264_version}-%{release} +Requires: mozilla-filesystem%{?_isa} + +%description -n mozilla-openh264 +The mozilla-openh264 package contains a H.264 codec plugin for Mozilla +browsers. + + +%package -n gstreamer1-plugin-openh264 +Version: %{gst_version} +Release: 1%{?dist} +Summary: GStreamer H.264 plugin + +%description -n gstreamer1-plugin-openh264 +GStreamer is a streaming media framework, based on graphs of elements which +operate on media data. + +This package contains the H.264 plugin. + + +%prep +%setup -q + +# Extract gmp-api archive +tar -xf %{S:1} +mv gmp-api-%{commit1} gmp-api + +# Extract gst-plugins-bad-free archive +tar -xf %{S:2} +pushd gst-plugins-bad-%{gst_version} +%patch2 -p1 +popd + + +%build +# Update the makefile with our build options +# Must be done in %%build in order to pick up correct LDFLAGS. +sed -i -e 's|^CFLAGS_OPT=.*$|CFLAGS_OPT=%{optflags}|' Makefile +sed -i -e 's|^PREFIX=.*$|PREFIX=%{_prefix}|' Makefile +sed -i -e 's|^LIBDIR_NAME=.*$|LIBDIR_NAME=%{_lib}|' Makefile +sed -i -e 's|^SHAREDLIB_DIR=.*$|SHAREDLIB_DIR=%{_libdir}|' Makefile +sed -i -e '/^CFLAGS_OPT=/i LDFLAGS=%{__global_ldflags}' Makefile + +# First build the openh264 libraries +make %{?_smp_mflags} + +# ... then build the mozilla plugin +make plugin %{?_smp_mflags} + +# ... and finally build the gstreamer plugin against the previously built +# openh264 libraries +pushd gst-plugins-bad-%{gst_version} +CFLAGS="%{build_cflags} -I`pwd`/../codec/api" \ +CXXFLAGS="%{build_cflags} -I`pwd`/../codec/api" \ +LDFLAGS="%{build_ldflags} -L`pwd`/.." \ +%meson \ + --auto-features=disabled \ + -D package-name="Fedora gstreamer1-plugin-openh264 package" \ + -D package-origin="http://www.openh264.org/" \ + -D openh264=enabled +%meson_build +popd + + +%install +%make_install + +# Install mozilla plugin +mkdir -p $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/gmp-gmpopenh264/system-installed +cp -a libgmpopenh264.so* gmpopenh264.info $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/gmp-gmpopenh264/system-installed/ + +mkdir -p $RPM_BUILD_ROOT%{_libdir}/firefox/defaults/pref +cat > $RPM_BUILD_ROOT%{_libdir}/firefox/defaults/pref/gmpopenh264.js << EOF +pref("media.gmp-gmpopenh264.autoupdate", false); +pref("media.gmp-gmpopenh264.version", "system-installed"); +EOF + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/profile.d +cat > $RPM_BUILD_ROOT%{_sysconfdir}/profile.d/gmpopenh264.sh << 'EOF' +if [[ ":$MOZ_GMP_PATH:" != *":%{_libdir}/mozilla/plugins/gmp-gmpopenh264/system-installed:"* ]]; then + MOZ_GMP_PATH="${MOZ_GMP_PATH}${MOZ_GMP_PATH:+:}%{_libdir}/mozilla/plugins/gmp-gmpopenh264/system-installed" + export MOZ_GMP_PATH +fi +EOF + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/fish/vendor_conf.d +cat > $RPM_BUILD_ROOT%{_datadir}/fish/vendor_conf.d/gmpopenh264.fish << 'EOF' +set -x --path MOZ_GMP_PATH $MOZ_GMP_PATH +set dir %{_libdir}/mozilla/plugins/gmp-gmpopenh264/system-installed +if not contains $dir $MOZ_GMP_PATH + set -p MOZ_GMP_PATH $dir +end +set -e dir +EOF + +# Remove static libraries +rm $RPM_BUILD_ROOT%{_libdir}/*.a + +# Install the gstreamer plugin +pushd gst-plugins-bad-%{gst_version} +%meson_install + +# Register as an AppStream component to be visible in the software center +# +# NOTE: It would be *awesome* if this file was maintained by the upstream +# project, translated and installed into the right place during `make install`. +# +# See http://www.freedesktop.org/software/appstream/docs/ for more details. +# +mkdir -p $RPM_BUILD_ROOT%{_datadir}/appdata +cat > $RPM_BUILD_ROOT%{_datadir}/appdata/gstreamer-openh264.appdata.xml < + + + gstreamer-openh264 + CC0-1.0 + GStreamer Multimedia Codecs - H.264 + Multimedia playback for H.264 + +

+ This addon includes a codec for H.264 playback and encoding. +

+

+ These codecs can be used to encode and decode media files where the + format is not patent encumbered. +

+

+ A codec decodes audio and video for playback or editing and is also + used for transmission or storage. + Different codecs are used in video-conferencing, streaming media and + video editing applications. +

+
+ http://gstreamer.freedesktop.org/ + https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer + http://gstreamer.freedesktop.org/documentation/ + http://www.gnome.org/friends/ + +
+EOF + +# Remove unwanted gst-plugins-bad files +rm -rf $RPM_BUILD_ROOT%{_bindir}/gst-transcoder-1.0 +rm -rf $RPM_BUILD_ROOT%{_includedir}/gstreamer-1.0/ +rm -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig/gstreamer-*.pc +rm -rf $RPM_BUILD_ROOT%{_libdir}/libgst*.so* +rm -rf $RPM_BUILD_ROOT%{_datadir}/gstreamer-1.0/ +popd + + +%files +%license LICENSE +%doc README.md +%{_libdir}/libopenh264.so.7 +%{_libdir}/libopenh264.so.%{openh264_version} + +%files devel +%{_includedir}/wels/ +%{_libdir}/libopenh264.so +%{_libdir}/pkgconfig/openh264.pc + +%files -n mozilla-openh264 +%{_sysconfdir}/profile.d/gmpopenh264.sh +%dir %{_libdir}/firefox +%dir %{_libdir}/firefox/defaults +%dir %{_libdir}/firefox/defaults/pref +%{_libdir}/firefox/defaults/pref/gmpopenh264.js +%{_libdir}/mozilla/plugins/gmp-gmpopenh264/ +%dir %{_datadir}/fish +%dir %{_datadir}/fish/vendor_conf.d +%{_datadir}/fish/vendor_conf.d/gmpopenh264.fish + +%files -n gstreamer1-plugin-openh264 +%{_datadir}/appdata/*.appdata.xml +%{_libdir}/gstreamer-1.0/libgstopenh264.so + + +%changelog +* Wed Mar 20 2024 MSVSphere Packaging Team - 2.4.1-1 +- Rebuilt for MSVSphere 8.9 + +* Fri Feb 02 2024 Kalev Lember - 2.4.1-1 +- Update to 2.4.1 +- Update gstreamer plugin to 1.22.9 + +* Mon Dec 04 2023 Kalev Lember - 2.4.0-2 +- Fix off by one regression in decoder +- Filter out soname provides for mozilla gmp plugin + +* Fri Nov 24 2023 Kalev Lember - 2.4.0-1 +- Update to 2.4.0 +- Update gstreamer plugin to 1.22.7 +- Obsolete noopenh264 stub package +- Use SPDX license identifiers + +* Wed Nov 22 2023 NoisyCoil - 2.3.1-4 +- Set MOZ_GMP_PATH for fish user shell +- Partially resolves: rhbz#2250527 + +* Thu Aug 17 2023 Dominik Mierzejewski - 2.3.1-3 +- Add Mozilla plugin path to MOZ_GMP_PATH instead of overriding unconditionally +- Resolves: rhbz#2225112 + +* Mon Mar 13 2023 Kalev Lember - 2.3.1-2 +- Update gstreamer plugin to 1.22.1 + +* Thu Sep 29 2022 Kalev Lember - 2.3.1-1 +- Update to 2.3.1 + +* Wed Aug 10 2022 Kalev Lember - 2.3.0-2 +- Rebuild + +* Mon Aug 01 2022 Kalev Lember - 2.3.0-1 +- Update to 2.3.0 +- Update gstreamer plugin to 1.20.3 + +* Wed Mar 16 2022 David King - 2.2.0-1 +- Update to 2.2.0 +- Update gstreamer plugin to 1.20.0 + +* Tue Sep 07 2021 Kalev Lember - 2.1.1-3 +- Update gstreamer plugin to 1.19.1 + +* Thu Feb 11 2021 Kalev Lember - 2.1.1-2 +- Update gstreamer plugin to 1.18.2 +- Remove totem supplements as totem has recommends on + gstreamer1-plugin-openh264 instead + +* Fri May 22 2020 Kalev Lember - 2.1.1-1 +- Update to 2.1.1 +- Add totem supplements to gstreamer1-plugin-openh264 + +* Tue Mar 10 2020 Kalev Lember - 2.1.0-1 +- Update to 2.1.0 +- Update gstreamer plugin to 1.16.2 + +* Mon Jun 17 2019 Kalev Lember - 2.0.0-1 +- Update openh264 to 2.0.0 +- Update gstreamer plugin to 1.16.0 + +* Fri Feb 22 2019 Kalev Lember - 1.8.0-3 +- Update gstreamer plugin to 1.15.1 + +* Wed Sep 12 2018 Kalev Lember - 1.8.0-2 +- Update gstreamer plugin to 1.14.2 + +* Wed Jun 27 2018 Kalev Lember - 1.8.0-1 +- Update openh264 to 1.8.0 +- Update gstreamer plugin to 1.14.1 + +* Tue Mar 06 2018 Kalev Lember - 1.7.0-6 +- Update gstreamer plugin to 1.13.90 + +* Sat Dec 16 2017 Kalev Lember - 1.7.0-5 +- Update gstreamer plugin to 1.12.4 + +* Tue Sep 19 2017 Kalev Lember - 1.7.0-4 +- Update gstreamer plugin to 1.12.3 + +* Thu Jul 20 2017 Kalev Lember - 1.7.0-3 +- Update gstreamer plugin to 1.12.2 + +* Tue Jun 20 2017 Kalev Lember - 1.7.0-2 +- Update gstreamer plugin to 1.12.1 + +* Fri Jun 16 2017 Kalev Lember - 1.7.0-1 +- Update openh264 to 1.7.0 +- Update gstreamer plugin to 1.12.0 + +* Mon Mar 06 2017 Kalev Lember - 1.6.0-5 +- Update gstreamer plugin to 1.10.4 + +* Mon Jan 30 2017 Kalev Lember - 1.6.0-4 +- Update gstreamer plugin to 1.10.3 + +* Mon Dec 05 2016 Kalev Lember - 1.6.0-3 +- Update gstreamer plugin to 1.10.2 + +* Fri Sep 02 2016 Kalev Lember - 1.6.0-2 +- Update gstreamer plugin to 1.9.2 + +* Thu Aug 25 2016 Kalev Lember - 1.6.0-1 +- Update openh264 to 1.6.0 +- Update gstreamer plugin to 1.8.3 + +* Thu Apr 28 2016 Kalev Lember - 1.5.3-0.1.git2706e36 +- Update openh264 to 1.5.3 git snapshot +- Update gstreamer plugin to 1.8.1 + +* Mon Mar 21 2016 Dennis Gilmore - 1.5.2-0.4.git21e44bd +- move the mozila-openh264 definition before gstreamer1-plugin-openh264 +- gstreamer1-plugin-openh264 redefines version and release messing up requires + +* Mon Nov 30 2015 Kalev Lember - 1.5.2-0.3.git21e44bd +- Include the gstreamer plugin in gstreamer1-plugin-openh264 subpackage + +* Thu Nov 26 2015 Kalev Lember - 1.5.2-0.2.git21e44bd +- Pass Fedora LDFLAGS to the build to get full relro (#1285338) + +* Tue Nov 24 2015 Kalev Lember - 1.5.2-0.1.git21e44bd +- Initial Fedora packaging