File indexing completed on 2025-04-27 03:58:10
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2016-04-21 0007 * Description : video thumbnails extraction based on ffmpeg 0008 * 0009 * SPDX-FileCopyrightText: 2010 by Dirk Vanden Boer <dirk dot vdb at gmail dot com> 0010 * SPDX-FileCopyrightText: 2016-2018 by Maik Qualmann <metzpinguin at gmail dot com> 0011 * SPDX-FileCopyrightText: 2016-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0012 * 0013 * SPDX-License-Identifier: GPL-2.0-or-later 0014 * 0015 * ============================================================ */ 0016 0017 #ifndef DIGIKAM_VIDEO_THUMBNAILER_H 0018 #define DIGIKAM_VIDEO_THUMBNAILER_H 0019 0020 // Qt includes 0021 0022 #include <QString> 0023 #include <QImage> 0024 0025 // Local includes 0026 0027 #include "digikam_export.h" 0028 0029 namespace Digikam 0030 { 0031 0032 class VideoFrame; 0033 class VideoThumbWriter; 0034 class VideoThumbDecoder; 0035 class VideoStripFilter; 0036 0037 class DIGIKAM_EXPORT VideoThumbnailer 0038 { 0039 public: 0040 0041 VideoThumbnailer(); 0042 VideoThumbnailer(int thumbnailSize, 0043 bool workaroundIssues, 0044 bool maintainAspectRatio, 0045 bool smartFrameSelection); 0046 ~VideoThumbnailer(); 0047 0048 public: 0049 0050 void generateThumbnail(const QString& videoFile, QImage& image); 0051 0052 void setThumbnailSize(int size); 0053 void setSeekPercentage(int percentage); 0054 void setSeekTime(const QString& seekTime); 0055 void setWorkAroundIssues(bool workAround); 0056 void setMaintainAspectRatio(bool enabled); 0057 void setSmartFrameSelection(bool enabled); 0058 void addFilter(VideoStripFilter* const filter); 0059 void removeFilter(const VideoStripFilter* const filter); 0060 void clearFilters(); 0061 0062 private: 0063 0064 void generateThumbnail(const QString& videoFile, VideoThumbWriter& imageWriter, QImage& image); 0065 void generateSmartThumbnail(VideoThumbDecoder& movieDecoder, VideoFrame& videoFrame); 0066 0067 void applyFilters(VideoFrame& frameData); 0068 int timeToSeconds(const QString& time) const; 0069 0070 private: 0071 0072 // Disable 0073 VideoThumbnailer(const VideoThumbnailer&) = delete; 0074 VideoThumbnailer& operator=(const VideoThumbnailer&) = delete; 0075 0076 private: 0077 0078 class Private; 0079 Private* const d; 0080 }; 0081 0082 } // namespace Digikam 0083 0084 #endif // DIGIKAM_VIDEO_THUMBNAILER_H