From 5656ab78ae21c72d86f0d64ceb4c96def1947160 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 20 Dec 2022 14:11:45 +0200 Subject: [PATCH] thumbnailers: implement options for ffmpegthumbs Signed-off-by: Ivailo Monev --- thumbnailers/ffmpegthumbs/CMakeLists.txt | 1 + .../ffmpegthumbs/ffmpegthumbnailer.cpp | 39 +++++++++++++- thumbnailers/ffmpegthumbs/ffmpegthumbnailer.h | 3 ++ .../ffmpegthumbs/ffmpegthumbs.desktop | 1 + thumbnailers/ffmpegthumbs/ffmpegthumbsform.ui | 54 +++++++++++++++++++ .../ffmpegthumbs/ffmpegthumbssettings.kcfg | 19 +++++++ .../ffmpegthumbs/ffmpegthumbssettings.kcfgc | 4 ++ 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 thumbnailers/ffmpegthumbs/ffmpegthumbsform.ui create mode 100644 thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfg create mode 100644 thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfgc diff --git a/thumbnailers/ffmpegthumbs/CMakeLists.txt b/thumbnailers/ffmpegthumbs/CMakeLists.txt index e98ee186..f1cd7865 100644 --- a/thumbnailers/ffmpegthumbs/CMakeLists.txt +++ b/thumbnailers/ffmpegthumbs/CMakeLists.txt @@ -27,6 +27,7 @@ set(ffmpegthumbs_PART_SRCS ffmpegthumbnailer.cpp ) +kde4_add_kcfg_files(ffmpegthumbs_PART_SRCS ffmpegthumbssettings.kcfgc) kde4_add_plugin(ffmpegthumbs ${ffmpegthumbs_PART_SRCS}) target_link_libraries(ffmpegthumbs diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.cpp b/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.cpp index b352661e..d23960ea 100644 --- a/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.cpp +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.cpp @@ -18,6 +18,8 @@ #include "config-ffmpegthumbnailer.h" #include "ffmpegthumbnailer.h" +#include "ffmpegthumbssettings.h" +#include "ui_ffmpegthumbsform.h" #include #include @@ -40,6 +42,14 @@ void ffmpeg_log_callback(ThumbnailerLogLevel ffmpegloglevel, const char* ffmpegm } } +class FFMpegThumbsFormWidget : public QWidget, public Ui::FFMpegThumbsForm +{ + Q_OBJECT +public: + FFMpegThumbsFormWidget() { setupUi(this); } +}; + + extern "C" { KDE_EXPORT ThumbCreator* new_creator() @@ -69,6 +79,9 @@ bool FFMpegThumbnailer::create(const QString &path, int width, int heigth, QImag return false; } + FFMpegThumbsSettings* ffmpegthumbssettings = FFMpegThumbsSettings::self(); + ffmpegthumbssettings->readConfig(); + const QByteArray pathbytes = QFile::encodeName(path); #if defined(HAVE_VIDEO_THUMBNAILER_SET_SIZE) video_thumbnailer_set_size(ffmpegthumb, width, heigth); @@ -76,7 +89,9 @@ bool FFMpegThumbnailer::create(const QString &path, int width, int heigth, QImag ffmpegthumb->thumbnail_size = qMax(width, heigth); #endif ffmpegthumb->seek_percentage = 20; - ffmpegthumb->overlay_film_strip = 1; + ffmpegthumb->overlay_film_strip = ffmpegthumbssettings->film_strip(); + ffmpegthumb->prefer_embedded_metadata = ffmpegthumbssettings->prefer_embedded_metadata(); + ffmpegthumb->workaround_bugs = ffmpegthumbssettings->workaround_bugs(); ffmpegthumb->thumbnail_image_type = ThumbnailerImageType::Png; const int ffmpegresult = video_thumbnailer_generate_thumbnail_to_buffer( @@ -114,3 +129,25 @@ ThumbCreator::Flags FFMpegThumbnailer::flags() const return ThumbCreator::DrawFrame; } +QWidget *FFMpegThumbnailer::createConfigurationWidget() +{ + FFMpegThumbsSettings* ffmpegthumbssettings = FFMpegThumbsSettings::self(); + FFMpegThumbsFormWidget* ffmpegthumbsformwidget = new FFMpegThumbsFormWidget(); + ffmpegthumbsformwidget->filmStripCheckBox->setChecked(ffmpegthumbssettings->film_strip()); + ffmpegthumbsformwidget->preferEmbeddedMetadataCheckBox->setChecked(ffmpegthumbssettings->prefer_embedded_metadata()); + ffmpegthumbsformwidget->workaroundBugsCheckBox->setChecked(ffmpegthumbssettings->workaround_bugs()); + return ffmpegthumbsformwidget; +} + +void FFMpegThumbnailer::writeConfiguration(const QWidget *configurationWidget) +{ + const FFMpegThumbsFormWidget *ffmpegthumbsformwidget = qobject_cast(configurationWidget); + Q_ASSERT(ffmpegthumbsformwidget); + FFMpegThumbsSettings* ffmpegthumbssettings = FFMpegThumbsSettings::self(); + ffmpegthumbssettings->setFilm_strip(ffmpegthumbsformwidget->filmStripCheckBox->isChecked()); + ffmpegthumbssettings->setPrefer_embedded_metadata(ffmpegthumbsformwidget->preferEmbeddedMetadataCheckBox->isChecked()); + ffmpegthumbssettings->setWorkaround_bugs(ffmpegthumbsformwidget->workaroundBugsCheckBox->isChecked()); + ffmpegthumbssettings->writeConfig(); +} + +#include "ffmpegthumbnailer.moc" diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.h b/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.h index 8791080a..802bfd7c 100644 --- a/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.h +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbnailer.h @@ -28,6 +28,9 @@ public: bool create(const QString &path, int width, int height, QImage &img) final; ThumbCreator::Flags flags() const final; + + QWidget *createConfigurationWidget() final; + void writeConfiguration(const QWidget *configurationWidget) final; }; #endif // FFMPEGTHUMBNAILER_H diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbs.desktop b/thumbnailers/ffmpegthumbs/ffmpegthumbs.desktop index bbb5ede8..47ee7abe 100644 --- a/thumbnailers/ffmpegthumbs/ffmpegthumbs.desktop +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbs.desktop @@ -55,3 +55,4 @@ X-KDE-Library=ffmpegthumbs ServiceTypes=ThumbCreator CacheThumbnail=true IgnoreMaximumSize=true +Configurable=true diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbsform.ui b/thumbnailers/ffmpegthumbs/ffmpegthumbsform.ui new file mode 100644 index 00000000..7b1ff017 --- /dev/null +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbsform.ui @@ -0,0 +1,54 @@ + + + FFMpegThumbsForm + + + + 0 + 0 + 270 + 151 + + + + Form + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Overlay film strip + + + + + + + Prefer embedded metadata + + + + + + + Workaround bugs + + + + + + + diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfg b/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfg new file mode 100644 index 00000000..c3abf2c4 --- /dev/null +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfg @@ -0,0 +1,19 @@ + + + + + + + + true + + + + false + + + + false + + + \ No newline at end of file diff --git a/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfgc b/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfgc new file mode 100644 index 00000000..b71e03f5 --- /dev/null +++ b/thumbnailers/ffmpegthumbs/ffmpegthumbssettings.kcfgc @@ -0,0 +1,4 @@ +File=ffmpegthumbssettings.kcfg +ClassName=FFMpegThumbsSettings +Singleton=true +Mutators=true \ No newline at end of file