commit 8344aaefd85aaf8e74d9a35738ccab4ec29b40314529397050e5cb47f8cb2356 Author: Christophe Marin Date: Thu Sep 26 10:49:49 2024 +0000 Plasma 6.2 beta, try 2 OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks/kpipewire6?expand=0&rev=25 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/0001-Simpler-yet-more-useful-handling-of-KPIPEWIRE_FORCE_.patch b/0001-Simpler-yet-more-useful-handling-of-KPIPEWIRE_FORCE_.patch new file mode 100644 index 0000000..5f15b08 --- /dev/null +++ b/0001-Simpler-yet-more-useful-handling-of-KPIPEWIRE_FORCE_.patch @@ -0,0 +1,107 @@ +From a50c28da704fbf8b9e71ec92054f325a33b9765f Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Sat, 6 Jul 2024 16:27:28 +0200 +Subject: [PATCH 1/2] Simpler yet more useful handling of + KPIPEWIRE_FORCE_ENCODER + +Previously, it always overrode the encoder type and profile. + +Now just force a specific encoder by inlining the encoder selection +in the switch cases. + +This means it's no longer possible to force a different encoder type +than the application requested, but it's arguably not that useful to +e.g. force VP9 if the application expects H.264 packets. + +(cherry picked from commit 0c3f8b4f9de7d4dcd24d952184dabdbda74b4c35) +--- + src/pipewireproduce.cpp | 45 +++++++++-------------------------------- + 1 file changed, 9 insertions(+), 36 deletions(-) + +diff --git a/src/pipewireproduce.cpp b/src/pipewireproduce.cpp +index 3452ce9..416bcd3 100644 +--- a/src/pipewireproduce.cpp ++++ b/src/pipewireproduce.cpp +@@ -266,46 +266,19 @@ void PipeWireProduce::stateChanged(pw_stream_state state) + + std::unique_ptr PipeWireProduce::makeEncoder() + { +- auto encoderType = m_encoderType; +- bool forceSoftware = false; +- bool forceHardware = false; +- +- if (qEnvironmentVariableIsSet("KPIPEWIRE_FORCE_ENCODER")) { +- auto forcedEncoder = qEnvironmentVariable("KPIPEWIRE_FORCE_ENCODER"); +- if (forcedEncoder == u"libvpx") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing VP8 Software encoding"; +- encoderType = PipeWireBaseEncodedStream::VP8; +- forceSoftware = true; +- } else if (forcedEncoder == u"libvpx-vp9") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing VP9 Software encoding"; +- encoderType = PipeWireBaseEncodedStream::VP9; +- forceSoftware = true; +- } else if (forcedEncoder == u"libx264") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing H264 Software encoding, main profile"; +- encoderType = PipeWireBaseEncodedStream::H264Main; +- forceSoftware = true; +- } else if (forcedEncoder == u"h264_vaapi") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing H264 Hardware encoding, main profile"; +- encoderType = PipeWireBaseEncodedStream::H264Main; +- forceHardware = true; +- } else if (forcedEncoder == u"libx264_baseline") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing H264 Software encoding, baseline profile"; +- encoderType = PipeWireBaseEncodedStream::H264Baseline; +- forceSoftware = true; +- } else if (forcedEncoder == u"h264_vaapi_baseline") { +- qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing H264 Hardware encoding, baseline profile"; +- encoderType = PipeWireBaseEncodedStream::H264Baseline; +- forceHardware = true; +- } ++ auto forcedEncoder = qEnvironmentVariable("KPIPEWIRE_FORCE_ENCODER"); ++ if (!forcedEncoder.isNull()) { ++ qCWarning(PIPEWIRERECORD_LOGGING) << "Forcing encoder to" << forcedEncoder; + } + + auto size = m_stream->size(); + +- switch (encoderType) { ++ switch (m_encoderType) { + case PipeWireBaseEncodedStream::H264Baseline: + case PipeWireBaseEncodedStream::H264Main: { + auto profile = m_encoderType == PipeWireBaseEncodedStream::H264Baseline ? Encoder::H264Profile::Baseline : Encoder::H264Profile::Main; +- if (!forceSoftware) { ++ ++ if (forcedEncoder.isNull() || forcedEncoder == u"h264_vaapi") { + auto hardwareEncoder = std::make_unique(profile, this); + hardwareEncoder->setQuality(m_quality); + hardwareEncoder->setEncodingPreference(m_encodingPreference); +@@ -314,7 +287,7 @@ std::unique_ptr PipeWireProduce::makeEncoder() + } + } + +- if (!forceHardware) { ++ if (forcedEncoder.isNull() || forcedEncoder == u"libx264") { + auto softwareEncoder = std::make_unique(profile, this); + softwareEncoder->setQuality(m_quality); + softwareEncoder->setEncodingPreference(m_encodingPreference); +@@ -325,7 +298,7 @@ std::unique_ptr PipeWireProduce::makeEncoder() + break; + } + case PipeWireBaseEncodedStream::VP8: { +- if (!forceHardware) { ++ if (forcedEncoder.isNull() || forcedEncoder == u"libvpx") { + auto encoder = std::make_unique(this); + encoder->setQuality(m_quality); + if (encoder->initialize(size)) { +@@ -335,7 +308,7 @@ std::unique_ptr PipeWireProduce::makeEncoder() + break; + } + case PipeWireBaseEncodedStream::VP9: { +- if (!forceHardware) { ++ if (forcedEncoder.isNull() || forcedEncoder == u"libvpx-vp9") { + auto encoder = std::make_unique(this); + encoder->setQuality(m_quality); + if (encoder->initialize(size)) { +-- +2.45.2 + diff --git a/0002-Add-encoder-using-libopenh264.patch b/0002-Add-encoder-using-libopenh264.patch new file mode 100644 index 0000000..f7ca058 --- /dev/null +++ b/0002-Add-encoder-using-libopenh264.patch @@ -0,0 +1,223 @@ +From 43ab595c28e031f38bc92bea4cf475de64021958 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Sat, 6 Jul 2024 16:40:42 +0200 +Subject: [PATCH 2/2] Add encoder using libopenh264 + +On some distributions, libopenh264 is the only encoder available OOTB. +Add support for it and use it as fallback. + +BUG: 476187 +(cherry picked from commit e17793a3b023f26411001093bb2d5934adf715c7) +--- + src/CMakeLists.txt | 1 + + src/libopenh264encoder.cpp | 106 ++++++++++++++++++++++++++++++ + src/libopenh264encoder_p.h | 28 ++++++++ + src/pipewirebaseencodedstream.cpp | 2 +- + src/pipewireproduce.cpp | 11 ++++ + 5 files changed, 147 insertions(+), 1 deletion(-) + create mode 100644 src/libopenh264encoder.cpp + create mode 100644 src/libopenh264encoder_p.h + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index e96f52b..3126528 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -135,6 +135,7 @@ add_library(KPipeWireRecord ${kpipewirerecord_SRCS} + encoder.cpp + h264vaapiencoder.cpp + libx264encoder.cpp ++ libopenh264encoder.cpp + libvpxencoder.cpp + libvpxvp9encoder.cpp + ) +diff --git a/src/libopenh264encoder.cpp b/src/libopenh264encoder.cpp +new file mode 100644 +index 0000000..6d4c6a1 +--- /dev/null ++++ b/src/libopenh264encoder.cpp +@@ -0,0 +1,106 @@ ++/* ++ SPDX-FileCopyrightText: 2023 Aleix Pol Gonzalez ++ SPDX-FileCopyrightText: 2023 Marco Martin ++ SPDX-FileCopyrightText: 2023 Arjen Hiemstra ++ SPDX-FileCopyrightText: 2024 Fabian Vogt ++ ++ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL ++*/ ++ ++#include "libopenh264encoder_p.h" ++ ++#include ++#include ++ ++extern "C" { ++#include ++#include ++#include ++#include ++} ++ ++#include "logging_record.h" ++ ++LibOpenH264Encoder::LibOpenH264Encoder(H264Profile profile, PipeWireProduce *produce) ++ : SoftwareEncoder(produce) ++ , m_profile(profile) ++{ ++} ++ ++bool LibOpenH264Encoder::initialize(const QSize &size) ++{ ++ createFilterGraph(size); ++ ++ auto codec = avcodec_find_encoder_by_name("libopenh264"); ++ if (!codec) { ++ qCWarning(PIPEWIRERECORD_LOGGING) << "libopenh264 codec not found"; ++ return false; ++ } ++ ++ m_avCodecContext = avcodec_alloc_context3(codec); ++ if (!m_avCodecContext) { ++ qCWarning(PIPEWIRERECORD_LOGGING) << "Could not allocate video codec context"; ++ return false; ++ } ++ ++ Q_ASSERT(!size.isEmpty()); ++ m_avCodecContext->width = size.width(); ++ m_avCodecContext->height = size.height(); ++ m_avCodecContext->max_b_frames = 0; ++ m_avCodecContext->gop_size = 100; ++ m_avCodecContext->pix_fmt = AV_PIX_FMT_YUV420P; ++ m_avCodecContext->time_base = AVRational{1, 1000}; ++ ++ if (m_quality) { ++ // "q" here stands for "quantization", but that effectively impacts quality. ++ m_avCodecContext->qmin = m_avCodecContext->qmax = percentageToAbsoluteQuality(m_quality); ++ } ++ ++ switch (m_profile) { ++ case H264Profile::Baseline: ++ // libopenh264 only does constrained baseline. ++ // There's a bug in the ffmpeg -> openh264 interface though: ++ // ffmpeg expects CONSTRAINED_BASELINE from the application and ++ // passes that through, but libopenh264 only allows BASELINE. ++ // Until that bug is fixed there'll always be a warning that the ++ // profile is not supported (https://github.com/cisco/openh264/issues/3613) ++ m_avCodecContext->profile = FF_PROFILE_H264_CONSTRAINED_BASELINE; ++ break; ++ case H264Profile::Main: ++ m_avCodecContext->profile = FF_PROFILE_H264_MAIN; ++ break; ++ case H264Profile::High: ++ m_avCodecContext->profile = FF_PROFILE_H264_HIGH; ++ break; ++ } ++ ++ AVDictionary *options = nullptr; ++ av_dict_set_int(&options, "threads", qMin(16, QThread::idealThreadCount()), 0); ++ applyEncodingPreference(options); ++ ++ if (int result = avcodec_open2(m_avCodecContext, codec, &options); result < 0) { ++ qCWarning(PIPEWIRERECORD_LOGGING) << "Could not open codec" << av_err2str(result); ++ return false; ++ } ++ ++ return true; ++} ++ ++int LibOpenH264Encoder::percentageToAbsoluteQuality(const std::optional &quality) ++{ ++ if (!quality) { ++ return -1; ++ } ++ ++ // 1-51 (incl.), lower is better ++ return 51 - (m_quality.value() / 100.0) * 50; ++} ++ ++void LibOpenH264Encoder::applyEncodingPreference(AVDictionary *options) ++{ ++ SoftwareEncoder::applyEncodingPreference(options); ++ // Disable motion estimation, not great while dragging windows but speeds up encoding by an order of magnitude ++ av_dict_set(&options, "flags", "+mv4", 0); ++ // Disable in-loop filtering ++ av_dict_set_int(&options, "loopfilter", 0, 0); ++} +diff --git a/src/libopenh264encoder_p.h b/src/libopenh264encoder_p.h +new file mode 100644 +index 0000000..fdacf14 +--- /dev/null ++++ b/src/libopenh264encoder_p.h +@@ -0,0 +1,28 @@ ++/* ++ SPDX-FileCopyrightText: 2023 Aleix Pol Gonzalez ++ SPDX-FileCopyrightText: 2023 Marco Martin ++ SPDX-FileCopyrightText: 2023 Arjen Hiemstra ++ SPDX-FileCopyrightText: 2024 Fabian Vogt ++ ++ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL ++*/ ++ ++#include "encoder_p.h" ++ ++/** ++ * A software encoder that uses ffmpeg + libopenh264 to encode to H.264. ++ */ ++class LibOpenH264Encoder : public SoftwareEncoder ++{ ++public: ++ LibOpenH264Encoder(H264Profile profile, PipeWireProduce *produce); ++ ++ bool initialize(const QSize &size) override; ++ ++protected: ++ int percentageToAbsoluteQuality(const std::optional &quality) override; ++ void applyEncodingPreference(AVDictionary *options) override; ++ ++private: ++ H264Profile m_profile = H264Profile::Main; ++}; +diff --git a/src/pipewirebaseencodedstream.cpp b/src/pipewirebaseencodedstream.cpp +index 553c334..814d8d9 100644 +--- a/src/pipewirebaseencodedstream.cpp ++++ b/src/pipewirebaseencodedstream.cpp +@@ -225,7 +225,7 @@ QList PipeWireBaseEncodedStream::suggestedEn + && avcodec_find_encoder_by_name("h264_vaapi")) { + return false; + } else { +- return !avcodec_find_encoder_by_name("libx264"); ++ return !(avcodec_find_encoder_by_name("libx264") || avcodec_find_encoder_by_name("libopenh264")); + } + default: + return true; +diff --git a/src/pipewireproduce.cpp b/src/pipewireproduce.cpp +index 416bcd3..52594e6 100644 +--- a/src/pipewireproduce.cpp ++++ b/src/pipewireproduce.cpp +@@ -16,6 +16,7 @@ + #include + + #include "h264vaapiencoder_p.h" ++#include "libopenh264encoder_p.h" + #include "libvpxencoder_p.h" + #include "libvpxvp9encoder_p.h" + #include "libx264encoder_p.h" +@@ -295,6 +296,16 @@ std::unique_ptr PipeWireProduce::makeEncoder() + return softwareEncoder; + } + } ++ ++ // Try libopenh264 last, it's slower and has less features. ++ if (forcedEncoder.isNull() || forcedEncoder == u"libopenh264") { ++ auto softwareEncoder = std::make_unique(profile, this); ++ softwareEncoder->setQuality(m_quality); ++ softwareEncoder->setEncodingPreference(m_encodingPreference); ++ if (softwareEncoder->initialize(size)) { ++ return softwareEncoder; ++ } ++ } + break; + } + case PipeWireBaseEncodedStream::VP8: { +-- +2.45.2 + diff --git a/kpipewire-6.1.3.tar.xz b/kpipewire-6.1.3.tar.xz new file mode 100644 index 0000000..aeaa567 --- /dev/null +++ b/kpipewire-6.1.3.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb2217024e3bf3a4777548b9a0bda88ca0b97912d20336b03f5942b28b1baef9 +size 148504 diff --git a/kpipewire-6.1.3.tar.xz.sig b/kpipewire-6.1.3.tar.xz.sig new file mode 100644 index 0000000..d49c963 --- /dev/null +++ b/kpipewire-6.1.3.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEE4KPrIC+OV1KOE+cv11dEg7tXsY0FAmaWVKcACgkQ11dEg7tX +sY0bnA/9FAl4Ym/986mF3V5rW/z7SACdBUSd/PivMDigDVRedzYuAe2oR87e2paO +UO51vAEGjXZEeNk9X2jUd/nYXda/EtwjWHMxxHsnzgb5kpIvA7vZ+9tE5FCNUbRy +9EWMf2OId/INCsSh6RH6iLmiuoUa7jtdJ2cAvx5AxSGfYxjHj3YAoWk77zDAxhy4 +bZzY0+5fgYCcT8xbSUeGiRscXIw/G6Q8boOOqACyeJCD7mESOB4BtziF6RL4r05i +EBMeuutUDTK1//bu6Y4MaEKx1bPrawR6RQeFocW4Pgp2hKiPTRuWMy8e+7OjTvb1 +cfQlEqOEVtyWKAD5uSCCif+yCqdFkSXXpo9vNXpKjBnMlyXASFLM7jN8TIm7HcQo +FqPaHstaOaOOQ33om5PjLsSNEzV/MSv2SQ6aA0CbglJxBm5okfLuYb/Vuaid4iPD +LV5eySGagfmI+LS/SGUTbNC499+cFCnWB0XziYbbW0mxQWfBe25Yxk4LXMzSYFIH +WZE3MUgKbPRrRL4/VGdrD2eBGCt7p2xlLEdmTSVJ0AIHfKoaIC8hmDoy3N8L8S7Q +IS9Qf95EASBc0/aDbY7o1JQuKjR8VnDvE8ooBtBnW9sObnDSJhWYpi8fOr1ZhWvW +RKDnX/B6rWkIVqG7rZLUcpXwrnQjAdnO5B3NAwn7Eo7/vt0OFdY= +=9kTE +-----END PGP SIGNATURE----- diff --git a/kpipewire-6.1.4.tar.xz b/kpipewire-6.1.4.tar.xz new file mode 100644 index 0000000..44855e5 --- /dev/null +++ b/kpipewire-6.1.4.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab116d56fd8a6b36da6b595f597cf4383d8ed171f8e625dca67b7a4645337134 +size 148980 diff --git a/kpipewire-6.1.4.tar.xz.sig b/kpipewire-6.1.4.tar.xz.sig new file mode 100644 index 0000000..2efcbc5 --- /dev/null +++ b/kpipewire-6.1.4.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEE4KPrIC+OV1KOE+cv11dEg7tXsY0FAmayGCUACgkQ11dEg7tX +sY1swQ/8CARXuUAQxMDLs5tkDTk9RZudSLocHQKgAi8JIIWh6uGHcn9fcVfM5nsA +ml/esuTG3eWz3ezqGQqzWLWinSPDvsWnpS6fiBE2aBWIHaFLI5RObtpjYtY0Dfpc +YruJx6WbnHWIzdUN4bls5dPwL0Josg0Uu/gAL46bAHY6+PprHEJnOZkmJAs9GOJE +PAnoWotE+2wrACd0BP+LzXzn/EcfGVx0SmLSiL581zbFWRYyb7H/nFNnkq1HZDMy +V+x2Gg8va6Ft3LKDoLZlil3oEfr76pDv+NQKesaOrGtu4YWcjSBUWmyMErLDjk9k +gd7gQfxAJQ1he6z4ueJc3Zx/aAir8VxXAb1xIluHLlclLqZSIsHZA4Izg7SNqeju +G4eO9h6ap9Ttvz0z8mB0XfvZLpGlXteAkBEZ4iG5skj/r3G97cSu9onLNznMKA7A +P0vT1Px+qye45wz3AZkQMsUkZ332MPTdnazxP7dyK5hHw8p1TtRaP9BwDp/QZisP +DYEJtjGpMDjOlV/bSG5otDcJ/ykvDF1AVSw1iBNKJY1Mcrl1bmmrVl89A+duR2sS +PAGw9ye1euFubA4pUo5hz9DrDKaAOCeWQB2eSZvkHfbVbPbFx/hhsbLRmv8rOvVp +hxeSooNYuCWQNp3CUD6DzBIreIbsiBvmdY+aRvFaUe/o80cEx9g= +=03/q +-----END PGP SIGNATURE----- diff --git a/kpipewire-6.1.5.tar.xz b/kpipewire-6.1.5.tar.xz new file mode 100644 index 0000000..d4850e0 --- /dev/null +++ b/kpipewire-6.1.5.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25b32cfcaff352f0c4acda5746adffd2e3b28b5ff0648521bde8628ca7145a49 +size 149096 diff --git a/kpipewire-6.1.5.tar.xz.sig b/kpipewire-6.1.5.tar.xz.sig new file mode 100644 index 0000000..9b927a0 --- /dev/null +++ b/kpipewire-6.1.5.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEE4KPrIC+OV1KOE+cv11dEg7tXsY0FAmbgCFcACgkQ11dEg7tX +sY1ypg/+LX5uzdfEqBbZQNtyl7selXiGGlWlwqgB0zbVhLI4KawapP0zU1YTgQtQ +eVjHBF9TdRyN3JgEKeDhAeKxchIau0n7/VNugvLLlyB93vC4Qmg6Dy7szIuiLoIa +tWycxAaPaaF+LLx+WHwYG4ymgWvzkh0+7dYoWn4EBwfrqhqB8ijJexWYawgqEiVh +FdkFiOGPLZ8nbwCkvYFFkxv9cfHmCO4nZpHrfekp8vvSsGY9sngvvjhHc+Uf0eU8 +Q7Onyro768isRP+pPsifZwjLS1JvdMIKHt3+gC9/MTLXsc2kyBSNnlVGFT+JAV6A +fdMt3AuuBeVVJPJ11TiawefjR1KCSh8jdeHNsBmszBvpXTuAcC2pbEF22KOwau7W +qBU15RYl1g9DRL/0h0XzTDHjOdi+IQOmui1ZrO1vNrw+uxA+Zo7dPBSbf7ex4E33 +AEgzQrDiZgk+DBPC3opIl1W4IB1kf+FTu1azqCT5DFR3S5QEA7vLbidaV8T2VGH9 +EE0eZEiGBeKrzj7O8KpclRL2IDuBsBfEQoSiDQU34Pk2Q9Vw9HvL2Au/j/tBzc67 +OT//ng3QXjK/rl2iw9Bj6WZfLODiRGE1edQ79nxfJHZpIl+HTubQxDtlDOQ3bYOd +lqQiy0KgupZ19xbH9BnLrgeEzQM0rp4xgr78rEEcJOQIPOc6WAo= +=t2v3 +-----END PGP SIGNATURE----- diff --git a/kpipewire-6.1.90.tar.xz b/kpipewire-6.1.90.tar.xz new file mode 100644 index 0000000..b4870d7 --- /dev/null +++ b/kpipewire-6.1.90.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4072e0584580bfac5a76840b55b948c5e2ab19b6315267e5657ffdb3b84dfb6 +size 149248 diff --git a/kpipewire-6.1.90.tar.xz.sig b/kpipewire-6.1.90.tar.xz.sig new file mode 100644 index 0000000..ed3c5c6 --- /dev/null +++ b/kpipewire-6.1.90.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEE4KPrIC+OV1KOE+cv11dEg7tXsY0FAmbiw1gACgkQ11dEg7tX +sY2wBA//Q1DZRhBlNGMFt2vrlL5nmh+9ANeLS4T5cJot3ufGV2QoDJ10ew+G8+t0 +9g7XKMABL/B4GOJAoZ3L1/L6Fm0hv0nkYMkuy7dXQC5a/W1qkHZLnS+QjwZM42wp +deIimcssJmi+5GoQ5sFPMDJgh6UFBEqBjeORmK9iJ6et3+TfPoUFngUluriIlrmO +/xN5a8yOxNHT+Ar/A3twRzU+dBxx00seQLRFoMHRg6b+eiDajHMCEggsOCmpj30L +inffPZIkXY6iC+WJtYdPYovo2oxFjpDwT9fBF+2dw2CeBIsnIgJvxQcYfI/X2CzT +K9x8HrXl/VkejYryCMBiXnQWdU3ANCPjRMbkYa5FJAbOzUDDE+xy0/BMVa7tVC75 +LeaLIbEQxtxpzSTwsSOPK4U68Swf9X8n61uGyEdAhptCE+wJ3/biwzlxIknK3W4T +L/oPUvIMHtm3RlNlh2zfh8gMSXczvADzXqTKMnUtEwqJPEuzQRQQmf6BJn96rv9+ +A72RZt4w3psWzMk8OHjSCV+GiSJriDgFpKekTrf0w9HT+lF+XEAaZJxgWKEPDhlC +cAUSKJGilTxvNlpDlVVUaBZ4H+7oIL0Wvt+wB7l0tTfhFB86plruqFHLEEg9hp2J +pvVEWnpqO/DIMRe7Ld/i0Wx2CeFd04O/4c+8Iq2xjeiU+f2GIXY= +=JjCE +-----END PGP SIGNATURE----- diff --git a/kpipewire6.changes b/kpipewire6.changes new file mode 100644 index 0000000..d31b9da --- /dev/null +++ b/kpipewire6.changes @@ -0,0 +1,230 @@ +------------------------------------------------------------------- +Tue Sep 17 14:53:30 UTC 2024 - Fabian Vogt + +- Update to 6.1.90: + * New feature release + * For more details see https://kde.org/announcements/plasma/6/6.1.90 +- Changes since 6.1.5: + * update version for new release + * sourcestream: Do not process null streams + * Add missing "pipewireencodedstream.h" include + * Generate wayland code with PRIVATE_CODE + * produce: Use a separate condition_variable for passthrough/output thread + * Guard m_stream in setMaxFramerate + * pipewireproduce.cpp: Add guard to m_stream + * sourcestream: make resilient against pipewire restarts + * Fix some copy-and-paste issues in h264vaapi and libx264 encoders + * Add encoder using libopenh264 (kde#476187) + * Simpler yet more useful handling of KPIPEWIRE_FORCE_ENCODER + * produce: Properly cleanup on deactivate in all cases (kde#488687) + * produce: Destroy PipeWireSourceStream on the right thread (kde#489434) + * gitignore: add VS Code dir + * mediamonitortest: start media session and create dummy output to test playback state + * Use only non external only format modifiers + * Drop implicit modifier shortcut + * Use reserve to reserve space in list + * update version for new release + +------------------------------------------------------------------- +Tue Sep 10 14:53:47 UTC 2024 - Fabian Vogt + +- Update to 6.1.5: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.5 +- Changes since 6.1.4: + * sourcestream: Do not process null streams + * pipewireproduce.cpp: Add guard to m_stream + * update version for new release + +------------------------------------------------------------------- +Tue Aug 6 13:26:49 UTC 2024 - Fabian Vogt + +- Update to 6.1.4: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.4 +- Changes since 6.1.3: + * update version for new release + * sourcestream: make resilient against pipewire restarts + * Add encoder using libopenh264 (kde#476187) +- Drop patches, now upstream: + * 0001-Simpler-yet-more-useful-handling-of-KPIPEWIRE_FORCE_.patch + * 0002-Add-encoder-using-libopenh264.patch + +------------------------------------------------------------------- +Tue Jul 16 13:35:56 UTC 2024 - Fabian Vogt + +- Add patches to support libopenh264 for encoding + (boo#1227461, kde#476187): + * 0001-Simpler-yet-more-useful-handling-of-KPIPEWIRE_FORCE_.patch + * 0002-Add-encoder-using-libopenh264.patch + +------------------------------------------------------------------- +Tue Jul 16 13:23:41 UTC 2024 - Fabian Vogt + +- Update to 6.1.3: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.3 +- Changes since 6.1.2: + * produce: Properly cleanup on deactivate in all cases (kde#488687) + * produce: Destroy PipeWireSourceStream on the right thread (kde#489434) + * update version for new release + +------------------------------------------------------------------- +Tue Jul 2 17:34:03 UTC 2024 - Fabian Vogt + +- Update to 6.1.2: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.2 +- Changes since 6.1.1: + * update version for new release + +------------------------------------------------------------------- +Tue Jun 25 17:13:11 UTC 2024 - Fabian Vogt + +- Update to 6.1.1: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.1 +- Changes since 6.1.0: + * update version for new release + +------------------------------------------------------------------- +Thu Jun 13 10:58:29 UTC 2024 - Fabian Vogt + +- Update to 6.1.0: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.1.0 +- Changes since 6.0.90: + * update version for new release + * Use only non external only format modifiers + * Drop implicit modifier shortcut + * Use reserve to reserve space in list + +------------------------------------------------------------------- +Sat May 25 11:18:12 UTC 2024 - Fabian Vogt + +- Update to 6.0.90: + * New feature release + * For more details see https://kde.org/announcements/plasma/6/6.0.90 +- Too many changes to list here + +------------------------------------------------------------------- +Wed May 22 07:43:04 UTC 2024 - Fabian Vogt + +- Update to 6.0.5: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.0.5 +- Changes since 6.0.4: + * update version for new release + +------------------------------------------------------------------- +Wed Apr 17 08:12:31 UTC 2024 - Fabian Vogt + +- Update to 6.0.4: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.0.4 +- Changes since 6.0.3: + * fix version + * update version for new release + * encode: Only increase filtered frame count if frame was actually submitted + * Fix nullptr check (kde#484620) + * Generate presentation timestamps from std::chrono::steady_clock if SPA_META_Header is missing + * Fix a minor coding style issue + * Ignore buffers with SPA_META_HEADER_FLAG_CORRUPTED + * Ignore chunk size of SPA_DATA_DmaBuf + * typo + * update version for new release + * fix typo + * update version for new release + +------------------------------------------------------------------- +Tue Mar 26 18:05:35 UTC 2024 - Fabian Vogt + +- Update to 6.0.3: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.0.3 +- Changes since 6.0.2: + * fix typo + * update version for new release + * Don't set PipeWireSourceItem::enabled to true when the item becomes visible + * Drop redundant isComponentComplete() checks + * Remove redundant code + * Mark PipeWireSourceItem as enabled after receiving a frame + +------------------------------------------------------------------- +Wed Mar 13 09:09:42 UTC 2024 - Fabian Vogt + +- Update to 6.0.2: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.0.2 +- Changes since 6.0.1: + * fix version + * update version for new release + * bump version ahead of new release + * cmake: Add missing " to unbreak the build +- Drop patches, now upstream: + * 0001-cmake-Add-missing-to-unbreak-the-build.patch + +------------------------------------------------------------------- +Wed Mar 6 08:40:27 UTC 2024 - Fabian Vogt + +- Update to 6.0.1: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.0.1 +- Changes since 6.0.0: + * update version for new release +- Add patch to fix build (wtf): + * 0001-cmake-Add-missing-to-unbreak-the-build.patch +- Drop patch, no longer necessary: + * 0001-Set-SOVERSION-to-6.patch + +------------------------------------------------------------------- +Wed Feb 21 18:36:12 UTC 2024 - Fabian Vogt + +- Update to 6.0.0: + * New bugfix release + * Release announcement not available yet +- Changes since 5.93.0: + * add back quotes + * update version for new release + * Drop defined but undeclared property + * record: Make sure we also finalise streams that didn't even start + * revert to version 6.0.0 + * set major version for soname + * revert version number for bugfix release + * Set the framework version in the project() call + * bugfix release + * Install kpipewire_version.h + +------------------------------------------------------------------- +Tue Feb 6 18:22:58 UTC 2024 - Fabian Vogt + +- Update to 5.93.1: + * New bugfix release + * See https://kde.org/announcements/megarelease/6/rc2/ for details +- Changes since 5.93.0: + * Set the framework version in the project() call + * Install kpipewire_version.h +- Add patch to set the SOVERSION correctly: + * 0001-Set-SOVERSION-to-6.patch + +------------------------------------------------------------------- +Wed Jan 31 17:37:04 UTC 2024 - Fabian Vogt + +- Update to 5.93.0 (6.0 RC 2): + * New bugfix release + * See https://kde.org/announcements/megarelease/6/rc2/ for details +- Changes since 5.92.0: + * source: Increase logging, drop redundant condition + * Add missing cases to convertQImageFormatToAVPixelFormat + +------------------------------------------------------------------- +Mon Jan 15 21:08:49 UTC 2024 - Fabian Vogt + +- Update to 5.92.0 (6.0 RC 1) + * For more details please see: + https://kde.org/announcements/megarelease/6/rc1/ + +------------------------------------------------------------------- +Sat Jul 1 15:46:53 UTC 2023 - Christophe Marin + +- Init kpipewire6 diff --git a/kpipewire6.spec b/kpipewire6.spec new file mode 100644 index 0000000..08c06eb --- /dev/null +++ b/kpipewire6.spec @@ -0,0 +1,162 @@ +# +# spec file for package kpipewire6 +# +# Copyright (c) 2024 SUSE LLC +# +# 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 https://bugs.opensuse.org/ +# + + +%global kf6_version 6.0.0 +%define qt6_version 6.7.0 + +%define _sover 6 +%define rname kpipewire +# Full Plasma 6 version (e.g. 6.0.0) +%{!?_plasma6_bugfix: %global _plasma6_bugfix %{version}} +# Latest ABI-stable Plasma (e.g. 6.0 in KF6, but 6.0.80 in KUF) +%{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')} +%bcond_without released +Name: kpipewire6 +Version: 6.1.90 +Release: 0 +Summary: PipeWire integration for KDE Plasma +License: LGPL-2.0-only AND LGPL-3.0-only +URL: https://www.kde.org +Source: https://download.kde.org/unstable/plasma/%{version}/%{rname}-%{version}.tar.xz +%if %{with released} +Source1: https://download.kde.org/unstable/plasma/%{version}/%{rname}-%{version}.tar.xz.sig +Source2: plasma.keyring +%endif +BuildRequires: kf6-extra-cmake-modules +BuildRequires: pkgconfig +BuildRequires: qt6-gui-private-devel >= %{qt6_version} +BuildRequires: cmake(KF6CoreAddons) >= %{kf6_version} +BuildRequires: cmake(KF6I18n) >= %{kf6_version} +BuildRequires: cmake(KWayland) >= %{_plasma6_version} +BuildRequires: cmake(PlasmaWaylandProtocols) +BuildRequires: cmake(Qt6DBus) >= %{qt6_version} +BuildRequires: cmake(Qt6Quick) >= %{qt6_version} +BuildRequires: cmake(Qt6QuickTest) >= %{qt6_version} +BuildRequires: cmake(Qt6Test) >= %{qt6_version} +BuildRequires: cmake(Qt6WaylandClient) >= %{qt6_version} +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(libavcodec) +BuildRequires: pkgconfig(libavfilter) +BuildRequires: pkgconfig(libavformat) +BuildRequires: pkgconfig(libavutil) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libpipewire-0.3) +BuildRequires: pkgconfig(libswscale) +BuildRequires: pkgconfig(libva) +BuildRequires: pkgconfig(libva-drm) + +%description +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. + +%package -n libKPipeWire%{_sover} +Summary: PipeWire integration for KDE Plasma - main library + +%description -n libKPipeWire%{_sover} +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. +This package contains the main KPipeWire library. + +%package -n libKPipeWireRecord%{_sover} +Summary: PipeWire integration for KDE Plasma - recording support + +%description -n libKPipeWireRecord%{_sover} +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. +This package contains the library needed for video and audio capture. + +%package -n libKPipeWireDmaBuf%{_sover} +Summary: PipeWire integration for KDE Plasma - DMA-BUF support + +%description -n libKPipeWireDmaBuf%{_sover} +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. +This package provides a helper for downloading DMA-BUF textures for CPU processing. + +%package imports +Summary: QtQuick bindings for kpipewire6 +Requires: libKPipeWire%{_sover} = %{version} +Requires: libKPipeWireDmaBuf%{_sover} = %{version} +Requires: libKPipeWireRecord%{_sover} = %{version} + +%description imports +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. +This package provides QtQuick bindings for the main KPipeWire libraries. + +%package devel +Summary: Development files for kpipewire6 +Requires: kpipewire6-imports = %{version} +Requires: libKPipeWire%{_sover} = %{version} +Requires: libKPipeWireDmaBuf%{_sover} = %{version} +Requires: libKPipeWireRecord%{_sover} = %{version} +Requires: pkgconfig(epoxy) +Requires: pkgconfig(libpipewire-0.3) +Conflicts: kpipewire-devel + +%description devel +KPipeWire provides PipeWire integration for the Plasma desktop and mobile shells. +This package provides the development files needed to build applications +which use KPipeWire. + +%lang_package -n libKPipeWire%{_sover} + +%prep +%autosetup -p1 -n %{rname}-%{version} + +%build +%cmake_kf6 + +%kf6_build + +%install +%kf6_install + +%find_lang kpipewire6 + +%check +# Test fails since 03201bb6. A running pipewire is required +# %%ctest + +%ldconfig_scriptlets -n libKPipeWire%{_sover} +%ldconfig_scriptlets -n libKPipeWireRecord%{_sover} +%ldconfig_scriptlets -n libKPipeWireDmaBuf%{_sover} + +%files -n libKPipeWire%{_sover} +%license LICENSES/* +%doc README.md +%{_kf6_libdir}/libKPipeWire.so.* +%{_kf6_debugdir}/kpipewire.categories + +%files -n libKPipeWireRecord%{_sover} +%{_kf6_libdir}/libKPipeWireRecord.so.* +%{_kf6_debugdir}/kpipewirerecord.categories + +%files -n libKPipeWireDmaBuf%{_sover} +%{_kf6_libdir}/libKPipeWireDmaBuf.so.* + +%files imports +%{_kf6_qmldir}/org/kde/pipewire/ + +%files devel +%{_includedir}/KPipeWire/ +%{_kf6_cmakedir}/KPipeWire/ +%{_kf6_libdir}/libKPipeWire.so +%{_kf6_libdir}/libKPipeWireRecord.so +%{_kf6_libdir}/libKPipeWireDmaBuf.so + +%files -n libKPipeWire%{_sover}-lang -f kpipewire6.lang + +%changelog diff --git a/plasma.keyring b/plasma.keyring new file mode 100644 index 0000000..df40fb7 Binary files /dev/null and b/plasma.keyring differ