File QtAV.spec of Package QtAV

#
# spec file for package QtAV
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


%define sover 1
%define src_name QtAV
%define Qt_name %{src_name}
%define ffmpeg_includedir -I%(pkg-config --variable=includedir libavutil)
Name:           QtAV
Version:        1.12.0
Release:        0
Summary:        Qt multimedia framework
License:        LGPL-2.1-or-later AND GPL-3.0-only
Group:          Productivity/Multimedia/Other
Url:            http://qtav.org/
Source0:        QtAV-%{version}.tar.xz
Patch1:         fix-linking.patch
Patch2:         disable_cuda.patch
# PATCH-FIX-UPSTREAM
Patch3:         fix-build-newer-ffmpeg.patch
# PATCH-FIX-UPSTREAM
Patch4:         disable-use-of-deprecated-header.patch
BuildRequires:  ImageMagick
BuildRequires:  dos2unix
BuildRequires:  hicolor-icon-theme
BuildRequires:  kf5-filesystem
BuildRequires:  portaudio-devel
BuildRequires:  update-desktop-files
BuildRequires:  pkgconfig(Qt5Core)
BuildRequires:  pkgconfig(Qt5Gui)
BuildRequires:  pkgconfig(Qt5OpenGL)
BuildRequires:  pkgconfig(Qt5Qml)
BuildRequires:  pkgconfig(Qt5Quick)
BuildRequires:  pkgconfig(Qt5Sql)
BuildRequires:  pkgconfig(Qt5Svg)
BuildRequires:  pkgconfig(Qt5Widgets)
BuildRequires:  pkgconfig(egl)
BuildRequires:  pkgconfig(libass)
BuildRequires:  pkgconfig(libavcodec)
BuildRequires:  pkgconfig(libavdevice)
BuildRequires:  pkgconfig(libavfilter)
BuildRequires:  pkgconfig(libavformat)
BuildRequires:  pkgconfig(libavresample)
BuildRequires:  pkgconfig(libavutil)
BuildRequires:  pkgconfig(libpulse) >= 1.0
BuildRequires:  pkgconfig(libswresample)
BuildRequires:  pkgconfig(libswscale)
BuildRequires:  pkgconfig(libva)
BuildRequires:  pkgconfig(openal)
BuildRequires:  pkgconfig(xv)
Requires:       %{Qt_name}-players = %{version}

%description
QtAV is a multimedia playback library based on Qt and FFmpeg. It can help
facilitate writing a player application.

Features include:
   * Hardware decoding suppprt: DXVA2, VAAPI, VDA, CedarX, CUDA
   * OpenGL and ES2 support for Hi10P and other 16-bit YUV videos
   * Real time preview
   * Video capture in RGB and YUV format
   * OSD and custom filters
   * Subtitles
   * Transform video using GraphicsItemRenderer. (rotate, shear, etc)
   * Playing frame by frame (currently support forward playing)
   * Playback speed control
   * Variant streams: locale file, http, rtsp, etc.
   * Audio channel, tracks and external audio tracks
   * Dynamically change render engine when playing
   * Multiple video outputs for 1 player
   * Region of interest(ROI), i.e. video cropping
   * Video eq: brightness, contrast, saturation, hue
   * QML support as a plugin. Most playback APIs are compatible with
     QtMultiMedia module

%package -n     lib%{Qt_name}%{sover}
Summary:        Qt multimedia framework library
Group:          System/Libraries

%description -n lib%{Qt_name}%{sover}
QtAV is a multimedia playback library based on Qt and FFmpeg.

This package contains the QtAV library.

%package -n     lib%{Qt_name}Widgets%{sover}
Summary:        QtAV Widgets module
Group:          System/Libraries

%description -n lib%{Qt_name}Widgets%{sover}
QtAV is a multimedia playback library based on Qt and FFmpeg.

This package contains a set of widgets to play media.

%package -n     %{Qt_name}-qml
Summary:        QtAV QML module
Group:          Productivity/Multimedia/Other

%description -n %{Qt_name}-qml
QtAV is a multimedia playback library based on Qt and FFmpeg.

This package contains the QtAV QML module for Qt declarative.

%package -n     %{Qt_name}-players
Summary:        QtAV/QML players
Group:          Productivity/Multimedia/Video/Players
Requires:       %{Qt_name}-qml = %{version}
Requires:       libQt5Svg5
Requires:       libqt5-qtquickcontrols

%description -n	%{Qt_name}-players
QtAV is a multimedia playback library based on Qt and FFmpeg.

This package contains the QtAV based players.

%package -n     %{Qt_name}-devel
Summary:        QtAV development files
Group:          Development/Libraries/C and C++
Requires:       lib%{Qt_name}Widgets%{sover} = %{version}
Requires:       libQt5OpenGL-devel

%description -n %{Qt_name}-devel
QtAV is a multimedia playback library based on Qt and FFmpeg.

This package contains the header development files for building some QtAV
applications using QtAV headers.

%prep
%setup -q -n %{src_name}-%{version}
%autopatch -p1

# Fix incorrect sRGB profile
for f in $(find . -type f -name \*.png); do
convert $f -strip $f
done

BUILD_TIME=$(LC_ALL=C date -ur %{_sourcedir}/%{Qt_name}.changes +'%H:%M')
BUILD_DATE=$(LC_ALL=C date -ur %{_sourcedir}/%{Qt_name}.changes +'%b %d %Y')
grep -rl '__TIME__' . | xargs --verbose --no-run-if-empty \
sed -i "s/__TIME__/\"$BUILD_TIME\"/"
grep -rl '__DATE__' . | xargs --verbose --no-run-if-empty \
sed -i "s/__DATE__/\"$BUILD_DATE\"/"

find . -type f -name \*.pro | while read FILE; do
echo "QMAKE_CXXFLAGS_RELEASE += %{ffmpeg_includedir}" >> "$FILE"; done

%build
mkdir build
pushd build
%qmake5 "CONFIG+=no_rpath recheck" ../%{Qt_name}.pro
%make_jobs PREFIX=%{_prefix}
popd

%install
pushd build
%qmake5_install
popd

install -d %{buildroot}%{_bindir}
install -d %{buildroot}%{_datadir}/icons/hicolor/scalable/apps
ln -s %{_libqt5_bindir}/Player %{buildroot}%{_bindir}/Player
ln -s %{_libqt5_bindir}/QMLPlayer %{buildroot}%{_bindir}/QMLPlayer

find %{buildroot} -name \*.a -exec rm {} \;

printf 'lib%{Qt_name}%{sover}\n
lib%{Qt_name}Widgets%{sover}\n' > %{_sourcedir}/baselibs.conf

# Duplicate files
rm -rf  %{buildroot}%{_datadir}/doc

%post -n  lib%{Qt_name}%{sover} -p /sbin/ldconfig
%postun -n  lib%{Qt_name}%{sover} -p /sbin/ldconfig

%post -n lib%{Qt_name}Widgets%{sover} -p /sbin/ldconfig
%postun -n lib%{Qt_name}Widgets%{sover} -p /sbin/ldconfig

%post -n %{Qt_name}-players %desktop_database_post
%postun -n %{Qt_name}-players %desktop_database_postun

%files
%defattr(-,root,root)
%doc Changelog gpl-3.0* lgpl-2.1* README*

%files -n lib%{Qt_name}%{sover}
%defattr(-,root,root)
%{_libqt5_libdir}/lib%{Qt_name}.so.*

%files -n lib%{Qt_name}Widgets%{sover}
%defattr(-,root,root)
%{_libqt5_libdir}/lib%{Qt_name}Widgets.so.*

%files -n %{Qt_name}-qml
%defattr(-,root,root)
%dir %{_kf5_qmldir}/%{Qt_name}
%{_kf5_qmldir}/%{Qt_name}/Video.qml
%{_kf5_qmldir}/%{Qt_name}/libQmlAV.so
%{_kf5_qmldir}/%{Qt_name}/plugins.qmltypes
%{_kf5_qmldir}/%{Qt_name}/qmldir

%files -n %{Qt_name}-players
%defattr(-,root,root)
%{_bindir}/Player
%{_bindir}/QMLPlayer
%{_libqt5_bindir}/Player
%{_libqt5_bindir}/QMLPlayer
%{_datadir}/applications/QMLPlayer.desktop
%{_datadir}/applications/Player.desktop
%{_datadir}/icons/hicolor/scalable/apps/%{Qt_name}.svg

%files -n %{Qt_name}-devel
%defattr(-,root,root)
%{_libqt5_libdir}/lib%{Qt_name}.so
%{_libqt5_libdir}/lib%{Qt_name}.prl
%{_libqt5_libdir}/lib%{Qt_name}Widgets.so
%{_libqt5_libdir}/lib%{Qt_name}Widgets.prl
%{_libqt5_archdatadir}/mkspecs/features/av.prf
%{_libqt5_archdatadir}/mkspecs/features/avwidgets.prf
%{_kf5_mkspecsdir}/qt_lib_av.pri
%{_kf5_mkspecsdir}/qt_lib_av_private.pri
%{_kf5_mkspecsdir}/qt_lib_avwidgets.pri
%{_kf5_mkspecsdir}/qt_lib_avwidgets_private.pri
%{_libqt5_includedir}/QtAV
%{_libqt5_includedir}/QtAVWidgets

%changelog
openSUSE Build Service is sponsored by