Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ffmpegthumbs for openSUSE:Factory checked in at 2022-12-09 16:58:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ffmpegthumbs (Old) and /work/SRC/openSUSE:Factory/.ffmpegthumbs.new.1835 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ffmpegthumbs" Fri Dec 9 16:58:25 2022 rev:92 rq:1041420 version:22.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ffmpegthumbs/ffmpegthumbs.changes 2022-11-04 17:37:24.833578070 +0100 +++ /work/SRC/openSUSE:Factory/.ffmpegthumbs.new.1835/ffmpegthumbs.changes 2022-12-09 16:58:34.796047653 +0100 @@ -1,0 +2,20 @@ +Fri Dec 2 12:24:41 UTC 2022 - Christophe Marin <[email protected]> + +- Update to 22.12.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/gear/22.12.0/ + +------------------------------------------------------------------- +Sat Nov 26 16:44:19 UTC 2022 - Christophe Giboudeaux <[email protected]> + +- Update to 22.11.90 + * New feature release + +------------------------------------------------------------------- +Sat Nov 12 08:53:30 UTC 2022 - Christophe Giboudeaux <[email protected]> + +- Update to 22.11.80 + * New feature release + +------------------------------------------------------------------- Old: ---- ffmpegthumbs-22.08.3.tar.xz ffmpegthumbs-22.08.3.tar.xz.sig New: ---- ffmpegthumbs-22.12.0.tar.xz ffmpegthumbs-22.12.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ffmpegthumbs.spec ++++++ --- /var/tmp/diff_new_pack.hVIVd8/_old 2022-12-09 16:58:35.280050049 +0100 +++ /var/tmp/diff_new_pack.hVIVd8/_new 2022-12-09 16:58:35.288050089 +0100 @@ -1,7 +1,7 @@ # # spec file for package ffmpegthumbs # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -20,11 +20,10 @@ %{!?_kapp_version: %define _kapp_version %(echo %{version}| awk -F. '{print $1"."$2}')} %bcond_without released Name: ffmpegthumbs -Version: 22.08.3 +Version: 22.12.0 Release: 0 Summary: FFmpeg-based thumbnail creator for video files License: LGPL-2.0-or-later -Group: System/GUI/KDE URL: https://www.kde.org Source: https://download.kde.org/stable/release-service/%{version}/src/%{name}-%{version}.tar.xz %if %{with released} ++++++ ffmpegthumbs-22.08.3.tar.xz -> ffmpegthumbs-22.12.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/.gitlab-ci.yml new/ffmpegthumbs-22.12.0/.gitlab-ci.yml --- old/ffmpegthumbs-22.08.3/.gitlab-ci.yml 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/.gitlab-ci.yml 2022-11-30 01:11:43.000000000 +0100 @@ -3,4 +3,6 @@ include: - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd-qt6.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/CMakeLists.txt new/ffmpegthumbs-22.12.0/CMakeLists.txt --- old/ffmpegthumbs-22.08.3/CMakeLists.txt 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/CMakeLists.txt 2022-11-30 01:11:43.000000000 +0100 @@ -2,8 +2,8 @@ # Release Service version, managed by release script set(RELEASE_SERVICE_VERSION_MAJOR "22") -set(RELEASE_SERVICE_VERSION_MINOR "08") -set(RELEASE_SERVICE_VERSION_MICRO "3") +set(RELEASE_SERVICE_VERSION_MINOR "12") +set(RELEASE_SERVICE_VERSION_MICRO "0") set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") @@ -22,10 +22,9 @@ include(ECMQtDeclareLoggingCategory) include(FeatureSummary) -find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Gui) +find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Gui) find_package(KF5 ${KF_MIN_VERSION} REQUIRED COMPONENTS KIO I18n Config) find_package(FFmpeg COMPONENTS AVCODEC AVFORMAT SWSCALE) -find_package(Taglib REQUIRED) include_directories( ${FFMPEG_INCLUDE_DIRS} @@ -57,7 +56,7 @@ kconfig_add_kcfg_files(ffmpegthumbs ffmpegthumbnailersettings5.kcfgc) -target_link_libraries(ffmpegthumbs Qt5::Core Qt5::Gui KF5::KIOWidgets KF5::KIOCore KF5::I18n KF5::ConfigCore KF5::ConfigGui ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES} Taglib::Taglib ) +target_link_libraries(ffmpegthumbs Qt::Core Qt::Gui KF5::KIOWidgets KF5::KIOCore KF5::I18n KF5::ConfigCore KF5::ConfigGui ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES}) install(FILES ffmpegthumbnailersettings5.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) install(TARGETS ffmpegthumbs DESTINATION ${KDE_INSTALL_PLUGINDIR}) @@ -69,7 +68,7 @@ ########### install files ############### -install(FILES ffmpegthumbs.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) +install(FILES ffmpegthumbs.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR}) install(FILES org.kde.ffmpegthumbs.metainfo.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/imagewriter.cpp new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/imagewriter.cpp --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/imagewriter.cpp 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/imagewriter.cpp 2022-11-30 01:11:43.000000000 +0100 @@ -7,6 +7,8 @@ #include "imagewriter.h" #include <iostream> +extern void qt_imageTransform(QImage &src, QImageIOHandler::Transformations transforms); + using namespace std; namespace ffmpegthumbnailer @@ -16,7 +18,7 @@ { } -void ImageWriter::writeFrame(VideoFrame& frame, QImage& image) +void ImageWriter::writeFrame(VideoFrame& frame, QImage& image, const QImageIOHandler::Transformations transformations) { QImage previewImage(frame.width, frame.height, QImage::Format_RGB888); for (quint32 y = 0; y < frame.height; y++) { @@ -24,6 +26,8 @@ memcpy(previewImage.scanLine(y), &frame.frameData[y*frame.lineSize], frame.width*3); } + qt_imageTransform(previewImage, transformations); + image = previewImage; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/imagewriter.h new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/imagewriter.h --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/imagewriter.h 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/imagewriter.h 2022-11-30 01:11:43.000000000 +0100 @@ -11,6 +11,7 @@ #include <string> #include <inttypes.h> #include <QImage> +#include <QImageIOHandler> namespace ffmpegthumbnailer { @@ -21,7 +22,7 @@ ImageWriter(); virtual ~ImageWriter() {} - virtual void writeFrame(VideoFrame& frame, QImage& image); + virtual void writeFrame(VideoFrame& frame, QImage& image, const QImageIOHandler::Transformations transformations); }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/moviedecoder.cpp new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/moviedecoder.cpp --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/moviedecoder.cpp 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/moviedecoder.cpp 2022-11-30 01:11:43.000000000 +0100 @@ -5,12 +5,14 @@ */ #include "moviedecoder.h" +#include "ffmpegthumbs_debug.h" #include <QDebug> #include <QFileInfo> extern "C" { #include <libswscale/swscale.h> +#include <libavutil/display.h> #include <libavutil/imgutils.h> } @@ -57,12 +59,12 @@ QFileInfo fileInfo(filename); if ((!m_FormatContextWasGiven) && avformat_open_input(&m_pFormatContext, fileInfo.absoluteFilePath().toLocal8Bit().data(), nullptr, nullptr) != 0) { - qDebug() << "Could not open input file: " << fileInfo.absoluteFilePath(); + qCDebug(ffmpegthumbs_LOG) << "Could not open input file: " << fileInfo.absoluteFilePath(); return; } if (avformat_find_stream_info(m_pFormatContext, nullptr) < 0) { - qDebug() << "Could not find stream information"; + qCDebug(ffmpegthumbs_LOG) << "Could not find stream information"; return; } @@ -90,6 +92,7 @@ avcodec_close(m_pVideoCodecContext); m_pVideoCodecContext = nullptr; } + m_pVideoStream = nullptr; if ((!m_FormatContextWasGiven) && m_pFormatContext) { avformat_close_input(&m_pFormatContext); @@ -126,24 +129,25 @@ { m_VideoStream = av_find_best_stream(m_pFormatContext, AVMEDIA_TYPE_VIDEO, -1, -1, &m_pVideoCodec, 0); if (m_VideoStream < 0) { - qDebug() << "Could not find video stream"; + qCDebug(ffmpegthumbs_LOG) << "Could not find video stream"; return false; } m_pVideoCodecContext = avcodec_alloc_context3(m_pVideoCodec); - avcodec_parameters_to_context(m_pVideoCodecContext, m_pFormatContext->streams[m_VideoStream]->codecpar); + m_pVideoStream = m_pFormatContext->streams[m_VideoStream]; + avcodec_parameters_to_context(m_pVideoCodecContext, m_pVideoStream->codecpar); if (m_pVideoCodec == nullptr) { // set to nullptr, otherwise avcodec_close(m_pVideoCodecContext) crashes m_pVideoCodecContext = nullptr; - qDebug() << "Video Codec not found"; + qCDebug(ffmpegthumbs_LOG) << "Video Codec not found"; return false; } m_pVideoCodecContext->workaround_bugs = 1; if (avcodec_open2(m_pVideoCodecContext, m_pVideoCodec, nullptr) < 0) { - qDebug() << "Could not open video codec"; + qCDebug(ffmpegthumbs_LOG) << "Could not open video codec"; return false; } @@ -193,7 +197,7 @@ if (ret >= 0) { avcodec_flush_buffers(m_pVideoCodecContext); } else { - qDebug() << "Seeking in video failed"; + qCDebug(ffmpegthumbs_LOG) << "Seeking in video failed"; return; } @@ -214,7 +218,7 @@ } while ((!gotFrame || !m_pFrame->key_frame) && keyFrameAttempts < 200); if (gotFrame == 0) { - qDebug() << "Seeking in video failed"; + qCDebug(ffmpegthumbs_LOG) << "Seeking in video failed"; } } @@ -228,7 +232,7 @@ } if (!frameFinished) { - qDebug() << "decodeVideoFrame() failed: frame not finished"; + qCDebug(ffmpegthumbs_LOG) << "decodeVideoFrame() failed: frame not finished"; } return frameFinished; @@ -251,6 +255,41 @@ return true; } +QImageIOHandler::Transformations MovieDecoder::transformations() +{ + QImageIOHandler::Transformations ret = QImageIOHandler::TransformationNone; + if (!m_pVideoStream) { + qCWarning(ffmpegthumbs_LOG) << "No video stream!"; + return ret; + } + + for (int i=0; i<m_pVideoStream->nb_side_data; i++) { + if (m_pVideoStream->side_data[i].type != AV_PKT_DATA_DISPLAYMATRIX) { + continue; + } + if (m_pVideoStream->side_data[i].size != sizeof(int32_t) * 9) { + qCWarning(ffmpegthumbs_LOG) << "Invalid display matrix size" << m_pVideoStream->side_data[i].size << "expected" << sizeof(int32_t) * 9; + continue; + } + int32_t *matrix = reinterpret_cast<int32_t*>(m_pVideoStream->side_data[i].data); + double rotation = av_display_rotation_get(matrix); + if (qFuzzyCompare(rotation, 0.)) { + ret |= QImageIOHandler::TransformationNone; + } else if (qFuzzyCompare(rotation, 90.)) { + ret |= QImageIOHandler::TransformationRotate270; + } else if (qFuzzyCompare(rotation, 180.) || qFuzzyCompare(rotation, -180.)) { + ret |= QImageIOHandler::TransformationRotate180; + } else if (qFuzzyCompare(rotation, -90.)) { + ret |= QImageIOHandler::TransformationRotate90; + } else { + qCWarning(ffmpegthumbs_LOG) << "Unhandled rotation" << rotation; + continue; + } + } + return ret; +} + + bool MovieDecoder::getVideoPacket() { bool framesAvailable = true; @@ -303,7 +342,7 @@ int ret = avfilter_graph_parse2(m_filterGraph, arguments.constData(), &inputs, &outputs); if (ret < 0) { - qWarning() << "Unable to parse filter graph"; + qCWarning(ffmpegthumbs_LOG) << "Unable to parse filter graph"; return false; } @@ -312,14 +351,14 @@ ret = avfilter_graph_config(m_filterGraph, nullptr); if (ret < 0) { - qWarning() << "Unable to validate filter graph"; + qCWarning(ffmpegthumbs_LOG) << "Unable to validate filter graph"; return false; } m_bufferSourceContext = avfilter_graph_get_filter(m_filterGraph, "Parsed_buffer_0"); m_bufferSinkContext = avfilter_graph_get_filter(m_filterGraph, "Parsed_buffersink_2"); if (!m_bufferSourceContext || !m_bufferSinkContext) { - qWarning() << "Unable to get source or sink"; + qCWarning(ffmpegthumbs_LOG) << "Unable to get source or sink"; return false; } m_filterFrame = av_frame_alloc(); @@ -394,7 +433,7 @@ format, SWS_BICUBIC, nullptr, nullptr, nullptr); if (nullptr == scaleContext) { - qDebug() << "Failed to create resize context"; + qCDebug(ffmpegthumbs_LOG) << "Failed to create resize context"; return; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/moviedecoder.h new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/moviedecoder.h --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/moviedecoder.h 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/moviedecoder.h 2022-11-30 01:11:43.000000000 +0100 @@ -9,6 +9,7 @@ #include "videoframe.h" #include <QString> +#include <QImageIOHandler> extern "C" { #include <libavcodec/avcodec.h> @@ -40,6 +41,8 @@ void destroy(); bool getInitialized(); + QImageIOHandler::Transformations transformations(); + private: bool initializeVideo(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/videothumbnailer.cpp new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/videothumbnailer.cpp --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer/videothumbnailer.cpp 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer/videothumbnailer.cpp 2022-11-30 01:11:43.000000000 +0100 @@ -107,7 +107,7 @@ } applyFilters(videoFrame); - imageWriter.writeFrame(videoFrame, image); + imageWriter.writeFrame(videoFrame, image, movieDecoder.transformations()); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer.cpp new/ffmpegthumbs-22.12.0/ffmpegthumbnailer.cpp --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer.cpp 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer.cpp 2022-11-30 01:11:43.000000000 +0100 @@ -11,17 +11,16 @@ #include <limits> -#include <mp4file.h> - #include <QCheckBox> #include <QFormLayout> #include <QImage> #include <QLineEdit> -#include <QRegExpValidator> #include <QSpinBox> #include <KLocalizedString> extern "C" { +#include <libavformat/avformat.h> +#include <libavutil/dict.h> #include <libavutil/log.h> } @@ -116,23 +115,55 @@ // Try reading thumbnail embedded into video file QByteArray ba = path.toLocal8Bit(); - TagLib::MP4::File f(ba.data(), false); + AVFormatContext* ct = avformat_alloc_context(); + AVPacket* pic = nullptr; // No matter the seqIdx, we have to know if the video has an embedded cover, even if we then don't return // it. We could cache it to avoid repeating this for higher seqIdx values, but this should be fast enough // to not be noticeable and caching adds unnecessary complexity. - if (f.isValid()) { - TagLib::MP4::Tag* tag = f.tag(); - TagLib::MP4::ItemListMap itemsListMap = tag->itemListMap(); - TagLib::MP4::Item coverItem = itemsListMap["covr"]; - TagLib::MP4::CoverArtList coverArtList = coverItem.toCoverArtList(); - - if (!coverArtList.isEmpty()) { - TagLib::MP4::CoverArt coverArt = coverArtList.front(); - img.loadFromData((const uchar *)coverArt.data().data(), - coverArt.data().size()); + if (ct && !avformat_open_input(&ct,ba.data(), nullptr, nullptr)) { + + // Using an priority system based on size or filename (matroska specification) to select the most suitable picture + int bestPrio = 0; + for (size_t i = 0; i < ct->nb_streams; ++i) { + if (ct->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) { + int prio = 0; + AVDictionaryEntry* fname = av_dict_get(ct->streams[i]->metadata, "filename", nullptr ,0); + if (fname) { + QString filename(fname->value); + QString noextname = filename.section('.', 0); + // Prefer landscape and larger + if (noextname == "cover_land") { + prio = std::numeric_limits<int>::max(); + } + else if (noextname == "small_cover_land") { + prio = std::numeric_limits<int>::max()-1; + } + else if (noextname == "cover") { + prio = std::numeric_limits<int>::max()-2; + } + else if (noextname == "small_cover") { + prio = std::numeric_limits<int>::max()-3; + } + else { + prio = ct->streams[i]->attached_pic.size; + } + } + else { + prio = ct->streams[i]->attached_pic.size; + } + if (prio > bestPrio) { + pic = &(ct->streams[i]->attached_pic); + bestPrio = prio; + } + } } } + + if (pic) { + img.loadFromData(pic->data, pic->size); + } + avformat_close_input(&ct); if (!img.isNull()) { // Video file has an embedded thumbnail -> return it for seqIdx=0 and shift the regular @@ -172,11 +203,6 @@ return false; } -ThumbCreator::Flags FFMpegThumbnailer::flags() const -{ - return (Flags)(None); -} - void FFMpegThumbnailer::updateSequenceIndexWraparoundPoint(float offset) { float wraparoundPoint = offset; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbnailer.h new/ffmpegthumbs-22.12.0/ffmpegthumbnailer.h --- old/ffmpegthumbs-22.08.3/ffmpegthumbnailer.h 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbnailer.h 2022-11-30 01:11:43.000000000 +0100 @@ -30,7 +30,6 @@ FFMpegThumbnailer(); ~FFMpegThumbnailer() override; bool create(const QString& path, int width, int height, QImage& img) override; - Flags flags() const override; private: void updateSequenceIndexWraparoundPoint(float offset); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/ffmpegthumbs.desktop new/ffmpegthumbs-22.12.0/ffmpegthumbs.desktop --- old/ffmpegthumbs-22.08.3/ffmpegthumbs.desktop 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/ffmpegthumbs.desktop 2022-11-30 01:11:43.000000000 +0100 @@ -2,7 +2,6 @@ Type=Service Name=Video Files (ffmpegthumbs) Name[ar]=Ù ÙÙÙØ§Øª اÙÙÙØ¯ÙÙ (ffmpegthumbs) -Name[ast]=Ficheros de videu (ffmpegthumbs) Name[bg]=Ðидео Ñайлове (ffmpegthumbs) Name[bs]=Video datoteke (ffmpegthumbs) Name[ca]=Fitxers de vÃdeo (ffmpegthumbs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/org.kde.ffmpegthumbs.metainfo.xml new/ffmpegthumbs-22.12.0/org.kde.ffmpegthumbs.metainfo.xml --- old/ffmpegthumbs-22.08.3/org.kde.ffmpegthumbs.metainfo.xml 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/org.kde.ffmpegthumbs.metainfo.xml 2022-11-30 01:11:43.000000000 +0100 @@ -133,9 +133,9 @@ </screenshot> </screenshots> <releases> + <release version="22.12.0" date="2022-12-08"/> <release version="22.08.3" date="2022-11-03"/> <release version="22.08.2" date="2022-10-13"/> <release version="22.08.1" date="2022-09-08"/> - <release version="22.08.0" date="2022-08-18"/> </releases> </component> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ffmpegthumbs-22.08.3/tests/CMakeLists.txt new/ffmpegthumbs-22.12.0/tests/CMakeLists.txt --- old/ffmpegthumbs-22.08.3/tests/CMakeLists.txt 2022-10-30 22:04:17.000000000 +0100 +++ new/ffmpegthumbs-22.12.0/tests/CMakeLists.txt 2022-11-30 01:11:43.000000000 +0100 @@ -21,7 +21,7 @@ target_include_directories(ffmpegthumbtest PRIVATE ..) -target_link_libraries(ffmpegthumbtest Qt5::Core Qt5::Gui KF5::KIOWidgets KF5::KIOCore KF5::I18n KF5::ConfigCore KF5::ConfigGui ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES} Taglib::Taglib) +target_link_libraries(ffmpegthumbtest Qt::Core Qt::Gui KF5::KIOWidgets KF5::KIOCore KF5::I18n KF5::ConfigCore KF5::ConfigGui ${AVUTIL_LIBRARIES} ${AVFILTER_LIBRARIES} ${AVFORMAT_LIBRARIES} ${AVCODEC_LIBRARIES} ${SWSCALE_LIBRARIES})
