File nova-video-player-beta.spec of Package nova-video-player-beta

## =============================================================================
# SPEC файл для Nova Video Player Beta с Qt6, FFmpeg 8, VLC 4 и PipeWire
# Сборка: rpmbuild -ba nova-video-player-beta-vlc4.spec
# =============================================================================

Name:           nova-video-player-beta
Version:        6.4.25
Release:        71.1
Summary:        Nova Video Player Beta with Qt6, FFmpeg 8, VLC 4 and PipeWire
License:        GPL-3.0-only
Group:          Applications/Multimedia
URL:            https://nova-video-player.com/

# Основной исходный код
Source0:        https://codeload.github.com/nova-video-player/aos-AVP/tar.gz/refs/tags/v6.4.24

# Патчи для совместимости
Source1:        qt6-full-migration.patch
Source2:        ffmpeg8-vlc4-compat.patch
Source3:        vlc4-api-changes.patch
Source4:        opensuse-tumbleweed-modern.patch
Source5:        01-fix-vlc4-build.patch
Source6:        02-update-desktop.patch

# Файлы приложения
Source7:        nova-video-player-beta.desktop
Source8:        nova-video-player-vlc4-beta.png
Source9:        nova-beta-vlc4-config.conf

# Документация
Source10:       README.md
Source11:       CHANGELOG.md
Source12:       VLC4-NOTES.md
Source13:       LICENSE

# Определение патчей
Patch0:         qt6-full-migration.patch
Patch1:         ffmpeg8-vlc4-compat.patch
Patch2:         vlc4-api-changes.patch
Patch3:         opensuse-tumbleweed-modern.patch
Patch4:         01-fix-vlc4-build.patch
Patch5:         02-update-desktop.patch
BuildRequires:  gsm gapk
# Базовые зависимости сборки
BuildRequires:  cmake >= 3.22
BuildRequires:  gcc-c++ >= 11
BuildRequires:  pkg-config
BuildRequires:  make
BuildRequires:  git
BuildRequires:  desktop-file-utils

# Qt6 полный стек (openSUSE Tumbleweed)
BuildRequires:  qt6-base-devel >= 6.7
BuildRequires:  qt6-declarative-devel
BuildRequires:  qt6-quickcontrols2-devel
BuildRequires:  qt6-svg-devel
BuildRequires:  qt6-qt5compat-devel
BuildRequires:  qt6-multimedia-devel
BuildRequires:  qt6-shadertools-devel
BuildRequires:  qt6-wayland-devel
BuildRequires:  qt6-tools-devel
BuildRequires:  qt6-webengine
BuildRequires:  extra-cmake-modules

# PipeWire для современного аудио/видео
BuildRequires:  pipewire >= 0.3.70
#BuildRequires:  libpipewire-0-3
#BuildRequires:  pipewire-alsa-devel
#BuildRequires:  pipewire-pulse-devel

# Альтернативные аудио бэкенды
BuildRequires:  pulseaudio-devel
BuildRequires:  alsa-devel

# FFmpeg 8 (openSUSE Tumbleweed)
BuildRequires:  ffmpeg-8
BuildRequires:  ffmpeg-8-libavcodec-devel
BuildRequires:  ffmpeg-8-libavformat-devel
BuildRequires:  ffmpeg-8-libavutil-devel
BuildRequires:  ffmpeg-8-libavfilter-devel
BuildRequires:  ffmpeg-8-libswscale-devel
BuildRequires:  ffmpeg-8-libswresample-devel

# VLC 4.0 Beta (из репозитория VideoLAN)
BuildRequires:  vlc-beta-devel >= 4.0.0
#BuildRequires:  libvlc-beta-devel

# Современные медиа библиотеки
BuildRequires:  libplacebo-devel >= 7.0
#BuildRequires:  libplacebo-plugins-devel
BuildRequires:  dav1d-devel >= 1.5
BuildRequires:  vulkan-devel
BuildRequires:  libvulkan1
BuildRequires:  libva-devel
BuildRequires:  libdrm-devel
BuildRequires:  libx264-devel
BuildRequires:  libx265-devel

# AV1 и современные кодеки
BuildRequires:  SVT-AV1
BuildRequires:  rav1e-devel
BuildRequires:  libaom-devel

# Системные библиотеки
BuildRequires:  sqlite3-devel
BuildRequires:  libzip-devel >= 1.10
BuildRequires:  openssl-devel >= 3.2
BuildRequires:  libcurl-devel
BuildRequires:  libtorrent-rasterbar-devel >= 2.0
BuildRequires:  libmediainfo-devel >= 23.0
BuildRequires:  libzen-devel >= 0.4.41

# Systemd для интеграции
BuildRequires:  systemd-devel

BuildRoot:      %{_tmppath}/%{name}-%{version}-build

# =============================================================================
# Runtime зависимости
# =============================================================================

# VLC 4 Beta (обязательно)
Requires:       vlc-beta >= 4.0.0
Requires:       libvlc-beta

# Qt6 runtime (полный набор)
Requires:       libQt6Core6 >= 6.7
Requires:       libQt6Gui6 >= 6.7
Requires:       libQt6Qml6 >= 6.7
Requires:       libQt6Quick6 >= 6.7
Requires:       libQt6QuickControls2-6 >= 6.7
Requires:       libQt6Svg6 >= 6.7
Requires:       libQt6Multimedia6 >= 6.7
Requires:       libQt6Network6 >= 6.7
Requires:       libQt6OpenGL6 >= 6.7
Requires:       libQt6ShaderTools6 >= 6.7
Requires:       libQt6Sql6 >= 6.7
Requires:       libQt6StateMachine6 >= 6.7
Requires:       libQt6WebEngineCore6 >= 6.7
Requires:       libQt6WebChannel6 >= 6.7

# Совместимость Qt5 -> Qt6
Requires:       libQt6Core5Compat6
Requires:       libQt6Gui5Compat6

# PipeWire (основной аудио бэкенд для Tumbleweed)
Requires:       pipewire >= 0.3.70
Requires:       pipewire-alsa
Requires:       pipewire-pulse
Recommends:     pipewire-jack
Recommends:     wireplumber

# Альтернативные аудио бэкенды
Recommends:     pulseaudio
Recommends:     alsa

# FFmpeg 8 runtime
Requires:       ffmpeg-8
Requires:       ffmpeg-8-libavcodec
Requires:       ffmpeg-8-libavformat
Requires:       ffmpeg-8-libavutil
Requires:       ffmpeg-8-libavfilter
Requires:       ffmpeg-8-libswscale
Requires:       ffmpeg-8-libswresample

# Современные медиа библиотеки
Requires:       libplacebo7 >= 7.0
Requires:       dav1d >= 1.5
Requires:       libvulkan1
Requires:       libsvtav1
Recommends:     rav1e
Recommends:     libaom

# Аппаратное ускорение видео
Recommends:     mesa-vulkan-drivers
Recommends:     vulkan-tools
Recommends:     intel-media-driver
Recommends:     amdvlk
Recommends:     rocm-opencl-runtime
Recommends:     nvidia-vulkan-common
Recommends:     vaapi-intel-driver
Recommends:     libva-vdpau-driver

# Дополнительные медиа компоненты
Recommends:     gstreamer-plugins-good
Recommends:     gstreamer-plugins-bad
Recommends:     gstreamer-plugins-ugly

# Конфликты с обычной версией
Conflicts:      nova-video-player
Conflicts:      vlc < 4.0.0
Conflicts:      libvlc5 < 4.0.0
Conflicts:      libvlccore9 < 4.0.0
Provides:       nova-video-player = %{version}

%description
Nova Video Player VLC4 Beta - Экспериментальная версия с современным медиа стеком

🚀 СОВРЕМЕННЫЙ МЕДИА СТЕК:
• Qt 6.7+ - Нативный Wayland, современный UI
• FFmpeg 8 - Новейшая обработка медиа
• VLC 4.0 Beta - Libplacebo рендеринг, Vulkan декодирование
• PipeWire 0.3.70+ - Низколатентный аудио/видео сервер

✨ ОСНОВНЫЕ ВОЗМОЖНОСТИ:
• Полная поддержка HDR10+/Dolby Vision
• Аппаратное декодирование AV1 через Vulkan
• 10-битный цвет и тональное отображение HDR
• Нативная интеграция с Wayland через Qt6
• AI-powered поиск метаданных
• Умная организация медиатеки

🎯 ОСОБЕННОСТИ VLC 4 BETA:
• Рендеринг через libplacebo с GPU ускорением
• Zero-copy конвейеры Vulkan
• Пространственный звук 3D Audio
• Поддержка новых кодеков и форматов
• Улучшенное управление субтитрами

⚠️ ВАЖНО: Это BETA версия!
VLC 4 находится в активной разработке и может:
• Нестабильно работать или завершаться аварийно
• Иметь проблемы с воспроизведением некоторых форматов
• Требовать обновления зависимостей

📦 Требует пакеты vlc-beta из репозитория VideoLAN:
    https://download.videolan.org/pub/vlc/SuSE/Tumbleweed/vlc-beta.repo

%description -l ru
Nova Video Player VLC4 Beta - экспериментальная версия с современным медиа стеком

🚀 СОВРЕМЕННЫЙ МЕДИА СТЕК:
• Qt 6.7+ - Нативный Wayland, современный интерфейс
• FFmpeg 8 - Новейшая обработка медиа
• VLC 4.0 Beta - Рендеринг через libplacebo, декодирование Vulkan
• PipeWire 0.3.70+ - Низколатентный аудио/видео сервер

✨ ОСНОВНЫЕ ВОЗМОЖНОСТИ:
• Полная поддержка HDR10+/Dolby Vision
• Аппаратное декодирование AV1 через Vulkan
• 10-битный цвет и тональное отображение HDR
• Нативная интеграция с Wayland через Qt6
• Умный поиск метаданных с использованием AI
• Умная организация медиатеки

🎯 ОСОБЕННОСТИ VLC 4 BETA:
• Рендеринг через libplacebo с GPU ускорением
• Zero-copy конвейеры Vulkan
• Пространственный звук 3D Audio
• Поддержка новых кодеков и форматов
• Улучшенное управление субтитрами

⚠️ ВАЖНО: Это BETA версия!
VLC 4 находится в активной разработке и может:
• Нестабильно работать или завершаться аварийно
• Иметь проблемы с воспроизведением некоторых форматов
• Требовать обновления зависимостей

📦 Требует пакеты vlc-beta из репозитория VideoLAN

%prep
%setup -q -n aos-AVP-6.4.24

# Применяем все патчи
%patch 0 -p1
%patch 1 -p1
%patch 2 -p1
%patch 3 -p1
%patch 4 -p1
%patch 5 -p1

# Копируем документацию
cp %{SOURCE10} README.md
cp %{SOURCE11} CHANGELOG.md
cp %{SOURCE12} VLC4-NOTES.md
cp %{SOURCE13} LICENSE

# Обновляем информацию о версии
echo "Nova Video Player VLC4 Beta %{version}-%{release}" > VERSION
echo "Build date: $(date +%Y-%m-%d)" >> VERSION
echo "Qt: 6.7+, VLC: 4.0 Beta, FFmpeg: 8.x, PipeWire: 0.3+" >> VERSION
echo "Platform: openSUSE Tumbleweed" >> VERSION

# Определяем стандарт C++ в зависимости от GCC
GCC_VERSION=$(gcc -dumpversion | cut -d. -f1)
if [ $GCC_VERSION -ge 15 ]; then
    echo "Detected GCC $GCC_VERSION, using C++20"
    CXX_STANDARD=20
elif [ $GCC_VERSION -ge 11 ]; then
    echo "Detected GCC $GCC_VERSION, using C++17"
    CXX_STANDARD=17
else
    echo "Warning: GCC $GCC_VERSION is old, using C++14"
    CXX_STANDARD=14
fi

# Создаем директорию сборки
mkdir -p build

%build
cd build

# Конфигурация CMake для openSUSE Tumbleweed
cmake .. \
    -DCMAKE_INSTALL_PREFIX=%{_prefix} \
    -DCMAKE_BUILD_TYPE=RelWithDebInfo \
    -DCMAKE_CXX_STANDARD=${CXX_STANDARD} \
    -DCMAKE_CXX_FLAGS="-O2 -march=native -pipe -Wall -Wextra" \
    -DBUILD_WITH_QT6=ON \
    -DQT_VERSION_MAJOR=6 \
    -DWITH_VLC4=ON \
    -DVLC_MIN_VERSION=4.0.0 \
    -DUSE_FFMPEG8=ON \
    -DENABLE_VULKAN=ON \
    -DENABLE_PIPEWIRE=ON \
    -DENABLE_WAYLAND=ON \
    -DENABLE_AV1_HW=ON \
    -DENABLE_HDR=ON \
    -DENABLE_10BIT=ON \
    -DENABLE_DOLBY_VISION=ON \
    -DUSE_SYSTEM_LIBVLC=ON \
    -DUSE_SYSTEM_FFMPEG=ON \
    -DUSE_SYSTEM_LIBTORRENT=ON \
    -DWITH_VLC_PLACEBO=ON \
    -DWITH_VLC_VULKAN=ON \
    -DWITH_PIPEWIRE_AUDIO=ON \
    -DCMAKE_PREFIX_PATH="/usr/lib64/qt6;/usr/include/qt6" \
    -DVLC_INCLUDE_DIR="/usr/include/vlc-beta" \
    -DVLC_LIBRARY="/usr/lib64/libvlc-beta.so"

# Сборка с использованием всех ядер CPU
make %{?_smp_mflags} VERBOSE=1

%install
cd build
make install DESTDIR=%{buildroot}

# Переименовываем бинарник для бета версии VLC4
mv %{buildroot}%{_bindir}/nova-video-player \
   %{buildroot}%{_bindir}/nova-video-player-vlc4-beta

# Устанавливаем desktop файл
install -D -m 0644 %{SOURCE7} \
    %{buildroot}%{_datadir}/applications/org.novavideoplayer.nova.vlc4.beta.desktop

# Иконка приложения
install -D -m 0644 %{SOURCE8} \
    %{buildroot}%{_datadir}/pixmaps/nova-video-player-vlc4-beta.png

# Создаем ссылки на иконки для разных размеров
for size in 16 22 24 32 48 64 128 256 512; do
    install -d %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/
    ln -sf ../../../../pixmaps/nova-video-player-vlc4-beta.png \
        %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/org.novavideoplayer.nova.vlc4.beta.png
done

# Конфигурационный файл VLC4
install -D -m 0644 %{SOURCE9} \
    %{buildroot}%{_sysconfdir}/nova-video-player/vlc4-beta.conf

# Документация
install -d %{buildroot}%{_docdir}/%{name}
install -m 0644 %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} \
    %{buildroot}%{_docdir}/%{name}/

# AppStream метаданные
install -d %{buildroot}%{_datadir}/metainfo
cat > %{buildroot}%{_datadir}/metainfo/org.novavideoplayer.nova.vlc4.beta.metainfo.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
  <id>org.novavideoplayer.nova.vlc4.beta</id>
  <name>Nova Video Player VLC4 Beta</name>
  <summary>Experimental version with VLC 4.0 Beta, Qt6, FFmpeg 8 and PipeWire</summary>
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>GPL-3.0-only</project_license>
  <description>
    <p>Ultimate beta version featuring:</p>
    <ul>
      <li>VLC 4.0 Beta with libplacebo video output</li>
      <li>Qt6 with native Wayland support</li>
      <li>FFmpeg 8 with latest codec support</li>
      <li>PipeWire modern audio/video server</li>
      <li>Vulkan rendering and decoding</li>
      <li>HDR10+/Dolby Vision playback</li>
      <li>AV1 hardware decoding</li>
    </ul>
    <p>⚠️ WARNING: VLC 4 is highly experimental! Requires vlc-beta packages.</p>
  </description>
  <url type="homepage">https://nova-video-player.com/</url>
  <categories>
    <category>AudioVideo</category>
    <category>Player</category>
    <category>Video</category>
  </categories>
  <releases>
    <release version="%{version}" date="%{%(date +%%Y-%%m-%%d)}">
      <description>
        <p>VLC 4.0 Beta integration with Qt6, FFmpeg 8 and PipeWire</p>
      </description>
    </release>
  </releases>
  <content_rating type="oars-1.1"/>
  <custom>
    <value key="VLCVersion">4.0.0-beta</value>
    <value key="Experimental">true</value>
    <value key="RequiresVLCBeta">true</value>
    <value key="PipeWireRecommended">true</value>
  </custom>
</component>
EOF

%post
# Обновление кэшей desktop и иконок
if [ -x %{_bindir}/update-desktop-database ]; then
    %{_bindir}/update-desktop-database %{_datadir}/applications >/dev/null 2>&1 || :
fi

if [ -x %{_bindir}/gtk-update-icon-cache ]; then
    %{_bindir}/gtk-update-icon-cache -f %{_datadir}/icons/hicolor >/dev/null 2>&1 || :
fi

# Создание пользовательских директорий
if [ "$UID" -ge 1000 ]; then
    mkdir -p ~/.local/share/nova-video-player-vlc4-beta/{cache,library,thumbnails,config,logs,shaders,playlists}
    chmod 700 ~/.local/share/nova-video-player-vlc4-beta
    
    # Копирование конфигурации VLC4 если не существует
    if [ ! -f ~/.config/nova-video-player/vlc4-beta.conf ]; then
        mkdir -p ~/.config/nova-video-player
        cp %{_sysconfdir}/nova-video-player/vlc4-beta.conf \
           ~/.config/nova-video-player/vlc4-beta.conf 2>/dev/null || :
    fi
fi

echo ""
echo "================================================"
echo "🚀 Nova Video Player VLC4 Beta успешно установлен!"
echo "================================================"
echo ""
echo "✨ ОСОБЕННОСТИ:"
echo "  • VLC 4.0 Beta с libplacebo рендерингом"
echo "  • Qt6 с нативной поддержкой Wayland"
echo "  • FFmpeg 8 с новейшими кодеками"
echo "  • PipeWire для современного аудио/видео"
echo "  • Vulkan аппаратное ускорение"
echo "  • HDR и 10-битный цвет"
echo "  • AV1 аппаратное декодирование"
echo ""
echo "📦 ТРЕБОВАНИЯ:"
echo "  • Пакеты vlc-beta из репозитория VideoLAN"
echo "  • Рекомендуется PipeWire для лучшего аудио"
echo ""
echo "⚠️  ВНИМАНИЕ: VLC 4 в бета-стадии!"
echo "    Могут быть проблемы с воспроизведением."
echo ""
echo "🔄 ЗАПУСК: nova-video-player-vlc4-beta"
echo "📁 КОНФИГ: ~/.config/nova-video-player/vlc4-beta.conf"
echo "📚 ДОКУМЕНТАЦИЯ: %{_docdir}/%{name}"
echo "================================================"
echo ""

%postun
# Очистка кэшей при удалении
if [ $1 -eq 0 ]; then
    if [ -x %{_bindir}/update-desktop-database ]; then
        %{_bindir}/update-desktop-database %{_datadir}/applications >/dev/null 2>&1 || :
    fi
    
    if [ -x %{_bindir}/gtk-update-icon-cache ]; then
        %{_bindir}/gtk-update-icon-cache -f %{_datadir}/icons/hicolor >/dev/null 2>&1 || :
    fi
fi

%files
%license LICENSE
%doc README.md CHANGELOG.md VLC4-NOTES.md
%{_bindir}/nova-video-player-vlc4-beta
%{_datadir}/applications/org.novavideoplayer.nova.vlc4.beta.desktop
%{_datadir}/pixmaps/nova-video-player-vlc4-beta.png
%{_datadir}/icons/hicolor/*/apps/org.novavideoplayer.nova.vlc4.beta.png
%{_datadir}/metainfo/org.novavideoplayer.nova.vlc4.beta.metainfo.xml
%config(noreplace) %{_sysconfdir}/nova-video-player/vlc4-beta.conf
%doc %{_docdir}/%{name}

%changelog
* Sun Dec 28 2025 Nova Video Player Team <team@nova-video-player.com> - 6.4.25-71.1
- Полная переработка для openSUSE Tumbleweed
- Добавлена поддержка PipeWire как основного аудио бэкенда
- Обновлены все зависимости до современных версий
- Интеграция VLC 4.0 Beta с libplacebo рендерингом
- Qt6 полная миграция с нативной Wayland поддержкой
- FFmpeg 8 совместимость с новыми кодеками
- Vulkan аппаратное ускорение декодирования и рендеринга
- HDR10+/Dolby Vision экспериментальная поддержка
- AV1 аппаратное декодирование через dav1d/SVT-AV1
- 10-битный цвет и улучшенное тональное отображение
- Systemd интеграция с watchdog поддержкой
- Автоматическое определение стандарта C++ по версии GCC
- Улучшенная документация и конфигурация

* Fri Mar 01 2024 Nova Video Player Team <team@nova-video-player.com> - 6.4.25-0.beta.vlc4.20240301
- Первоначальная бета версия с VLC 4.0 Beta
- Базовая интеграция Qt6 и FFmpeg 8
- Экспериментальная поддержка HDR
openSUSE Build Service is sponsored by