[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdereview/mplayerthumbs/src
From: Marco Gulino <marco.gulino () gmail ! com>
Date: 2009-04-16 8:46:18
Message-ID: 1239871578.509195.13314.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 954760 by gulino:
more refactoring
M +0 -4 constants.h
M +26 -5 frameselector.cpp
M +13 -6 frameselector.h
M +8 -20 mplayervideobackend.cpp
M +1 -5 mplayervideobackend.h
M +40 -17 previewingfile.cpp
M +5 -7 previewingfile.h
M +2 -1 videobackendiface.h
--- trunk/kdereview/mplayerthumbs/src/constants.h #954759:954760
@@ -21,8 +21,4 @@
#define H_CONSTANTS
#define DBG_AREA 0
-namespace Preview {
- enum frameflags { framerandom=0x1, framestart=0x2, frameend=0x4 };
-
-}
#endif
--- trunk/kdereview/mplayerthumbs/src/frameselector.cpp #954759:954760
@@ -19,25 +19,42 @@
#include "frameselector.h"
#include "previewingfile.h"
+#include <krandomsequence.h>
+#include <QtCore/QDateTime>
+FrameSelector::~FrameSelector() {
+}
+
+
class RandomFrameSelectorPrivate {
public:
uint beginPercentPosition;
uint endPercentPosition;
+ KRandomSequence *rand;
+
};
RandomFrameSelector::RandomFrameSelector(unsigned int beginPercentPosition, unsigned int \
endPercentPosition) { d=new RandomFrameSelectorPrivate();
d->beginPercentPosition=beginPercentPosition;
d->endPercentPosition=endPercentPosition;
+ d->rand=new KRandomSequence(QDateTime::currentDateTime().toTime_t());
+
}
RandomFrameSelector::~RandomFrameSelector() {
+ delete d->rand;
delete d;
}
-qint64 RandomFrameSelector::framePositionInMilliseconds(PreviewingFile* previewingFile) {
+FrameSelector::SeekStrategy RandomFrameSelector::seekStrategy() {
+ return FrameSelector::Random;
+}
+quint64 RandomFrameSelector::framePositionInMilliseconds(PreviewingFile* previewingFile) {
+ quint64 start = (previewingFile->getMillisecondsLength()* d->beginPercentPosition)/100;
+ quint64 end = (previewingFile->getMillisecondsLength()*d->endPercentPosition)/100;
+ return (qint64)(start+(d->rand->getDouble() * (end - start) ) );
}
@@ -45,10 +62,10 @@
class PlainFrameSelectorPrivate {
public:
- qint64 millisecondsToSkip;
+ quint64 millisecondsToSkip;
};
-PlainFrameSelector::PlainFrameSelector(qint64 millisecondsToSkip) {
+PlainFrameSelector::PlainFrameSelector(quint64 millisecondsToSkip) {
d=new PlainFrameSelectorPrivate();
d->millisecondsToSkip=millisecondsToSkip;
}
@@ -57,8 +74,12 @@
delete d;
}
+FrameSelector::SeekStrategy PlainFrameSelector::seekStrategy() {
+ return FrameSelector::FromStart;
+}
-qint64 PlainFrameSelector::framePositionInMilliseconds(PreviewingFile* previewingFile) {
- qint64 fileLength=previewingFile->getSecondsLength()*1000;
+
+quint64 PlainFrameSelector::framePositionInMilliseconds(PreviewingFile* previewingFile) {
+ quint64 fileLength=previewingFile->getMillisecondsLength();
return (d->millisecondsToSkip>fileLength)?(fileLength):(d->millisecondsToSkip);
}
--- trunk/kdereview/mplayerthumbs/src/frameselector.h #954759:954760
@@ -24,7 +24,11 @@
class FrameSelector
{
public:
- virtual qint64 framePositionInMilliseconds(PreviewingFile *previewingFile) = 0;
+ enum SeekStrategy { FromStart, Random };
+
+ virtual quint64 framePositionInMilliseconds(PreviewingFile *previewingFile) = 0;
+ virtual SeekStrategy seekStrategy() = 0;
+ virtual ~FrameSelector();
};
class RandomFrameSelectorPrivate;
@@ -32,8 +36,9 @@
{
public:
RandomFrameSelector(uint beginPercentPosition, uint endPercentPosition);
- virtual qint64 framePositionInMilliseconds(PreviewingFile *previewingFile);
- ~RandomFrameSelector();
+ virtual quint64 framePositionInMilliseconds(PreviewingFile *previewingFile);
+ virtual ~RandomFrameSelector();
+ virtual SeekStrategy seekStrategy();
private:
RandomFrameSelectorPrivate *d;
};
@@ -42,9 +47,11 @@
class PlainFrameSelector : public FrameSelector
{
public:
- PlainFrameSelector(qint64 millisecondsToSkip);
- virtual qint64 framePositionInMilliseconds(PreviewingFile *previewingFile);
- ~PlainFrameSelector();
+ PlainFrameSelector(quint64 millisecondsToSkip);
+ virtual quint64 framePositionInMilliseconds(PreviewingFile *previewingFile);
+ virtual ~PlainFrameSelector();
+ virtual SeekStrategy seekStrategy();
+
private:
PlainFrameSelectorPrivate *d;
};
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.cpp #954759:954760
@@ -26,7 +26,6 @@
#include <QProcess>
#include "mplayerthumbscfg.h"
#include <kstandarddirs.h>
-#include <krandomsequence.h>
#include "previewingfile.h"
#include "thumbnail.h"
@@ -41,7 +40,6 @@
if(tmpdir->name().isNull() ) return false;
kDebug(DBG_AREA) << "videopreview: using temp directory " << tmpdir->name() << endl;
- rand=new KRandomSequence(QDateTime::currentDateTime().toTime_t());
mplayerprocess=new QProcess();
KUrl furl( previewingFile->getFilePath() );
kDebug(DBG_AREA) << "videopreview: url=" << furl << "; local:" << furl.isLocalFile() << \
endl; @@ -61,27 +59,24 @@
kDebug(DBG_AREA) << "videopreview: No information found, exiting\n";
return false;
}
- previewingFile->setStreamInformation(findInfos.cap(1).toInt(), findInfos.cap(2).toInt());
+ previewingFile->setStreamInformation(findInfos.cap(1).toInt(), findInfos.cap(2).toInt() * \
1000);
- kDebug(DBG_AREA) << "videopreview: find length=" << previewingFile->getSecondsLength() << \
", fps=" << previewingFile->getFPS() << endl; + kDebug(DBG_AREA) << "videopreview: find \
length=" << previewingFile->getMillisecondsLength() << " ms, fps=" << previewingFile->getFPS() \
<< endl; return true;
}
MPlayerVideoBackend::~MPlayerVideoBackend() {
delete mplayerprocess;
- delete rand;
tryUnlink(tmpdir);
delete tmpdir;
}
-Thumbnail *MPlayerVideoBackend::preview(int flags) {
+Thumbnail *MPlayerVideoBackend::preview(FrameSelector *frameSelector) {
QStringList args;
- kDebug(DBG_AREA) << "videopreview: using flags " << flags << endl;
-#define START ((previewingFile->getSecondsLength()*15)/100)
-#define END ((previewingFile->getSecondsLength()*70)/100)
+ kDebug(DBG_AREA) << "videopreview: using seek strategy " << frameSelector->seekStrategy() \
<< endl; args.clear();
int scalingWidth=previewingFile->getScalingWidth();
int scalingHeight=previewingFile->getScalingHeight();
@@ -89,23 +84,16 @@
args << playerBin << "\"" + previewingFile->getFilePath() + "\"";
if(previewingFile->isWide()) scalingHeight=-2; else scalingWidth=-2;
- if( flags & Preview::framerandom )
+ if( frameSelector->seekStrategy() & FrameSelector::Random )
{
kDebug(DBG_AREA) << "videopreview: framerandom\n";
- unsigned long start=(unsigned long)(START+(rand->getDouble() * (END - START) ) );
- args << "-ss" << QString::number( start )
- << "-frames" << "4";
- } else if (flags & Preview::frameend )
+ args << "-ss" << QString::number( \
frameSelector->framePositionInMilliseconds(previewingFile) / 1000 ) << "-frames" << "4"; + } \
else if (frameSelector->seekStrategy() & FrameSelector::FromStart) {
- kDebug(DBG_AREA) << "videopreview: frameend\n";
- args << "-ss" << QString::number( previewingFile->getSecondsLength() - 10 )
- << "-frames" << "4";
- } else if (flags & Preview::framestart)
- {
kDebug(DBG_AREA) << "videopreview: framestart\n";
if(!fps) fps=25; // if we've not autodetected a fps rate, let's assume 25fps.. even if \
it's wrong it shouldn't hurt.
// If we can't skip to a random frame, let's try playing 10 seconds.
- args << "-frames" << QString::number( fps*10 );
+ args << "-frames" << QString::number( fps* \
frameSelector->framePositionInMilliseconds(previewingFile) / 1000 ); }
KMD5 md5builder(previewingFile->getFilePath().toLatin1() );
QString md5file=md5builder.hexDigest().data();
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.h #954759:954760
@@ -21,8 +21,6 @@
#define MPLAYERVIDEOBACKEND_H
#include <videobackendiface.h>
-
-class KRandomSequence;
class KTempDir;
class QProcess;
class MPlayerVideoBackend : public VideoBackendIFace
@@ -30,7 +28,7 @@
public:
MPlayerVideoBackend(PreviewingFile *previewingFile, MPlayerThumbsCfg* cfg);
virtual ~MPlayerVideoBackend();
- virtual Thumbnail* preview(int flags);
+ virtual Thumbnail* preview(FrameSelector *frameSelector);
virtual bool playerCannotPreview();
virtual bool readStreamInformation();
@@ -43,8 +41,6 @@
QProcess *mplayerprocess;
QStringList customargs;
KTempDir *tmpdir;
- KRandomSequence *rand;
-
};
#endif // MPLAYERVIDEOBACKEND_H
--- trunk/kdereview/mplayerthumbs/src/previewingfile.cpp #954759:954760
@@ -24,16 +24,33 @@
#include "thumbnail.h"
#include "thumbnailsmap.h"
#include "videobackendiface.h"
+#include "frameselector.h"
+
+class PreviewingFilePrivate {
+ public:
+ QFileInfo fileInfo;
+ uint fps;
+ uint millisecondsLength;
+ uint scalingWidth;
+ uint scalingHeight;
+};
PreviewingFile::PreviewingFile(const QString& filePath, uint scalingWidth, uint scalingHeight, \
QObject* parent)
- : QObject(parent), fileInfo(filePath)
+ : QObject(parent)
{
- this->scalingHeight=scalingHeight;
- this->scalingWidth=scalingWidth;
+ d=new PreviewingFilePrivate();
+ d->fileInfo=filePath;
+ d->scalingHeight=scalingHeight;
+ d->scalingWidth=scalingWidth;
}
+PreviewingFile::~PreviewingFile() {
+ delete d;
+}
+
+
bool PreviewingFile::isBlacklisted(const QStringList& blacklistedExtensions) {
- QString extension=fileInfo.suffix().trimmed();
+ QString extension=d->fileInfo.suffix().trimmed();
kDebug(DBG_AREA) << "videopreview: file extension=\"" << extension << "\"\n";
if( extension.length() && !blacklistedExtensions.filter(extension, \
Qt::CaseInsensitive).isEmpty() ) {
@@ -43,18 +60,24 @@
return false;
}
-void PreviewingFile::setStreamInformation(unsigned int fps, unsigned int secondsLength) {
- this->fps=fps;
- this->secondsLength=secondsLength;
+void PreviewingFile::setStreamInformation(unsigned int fps, quint64 millisecondsLength) {
+ d->fps=fps;
+ d->millisecondsLength=millisecondsLength;
}
Thumbnail* PreviewingFile::getPreview(VideoBackendIFace* videoBackend, uint minVariance, \
unsigned int maxTries) { kDebug() << "getPreview with minVariance: " << minVariance << endl;
ThumbnailsMap thumbnailsMap;
- Preview::frameflags flags;
+ RandomFrameSelector randomFrameSelector(25, 75);
+ PlainFrameSelector plainFrameSelector(10000);
+ FrameSelector *frameSelector;
+
while(thumbnailsMap.hasAGoodImageOrSurrenders(minVariance, maxTries)) {
- flags=(thumbnailsMap.size()>=maxTries) ? Preview::framestart : Preview::framerandom;
- thumbnailsMap.addThumbnail(videoBackend->preview(flags) );
+ if(thumbnailsMap.size()>maxTries)
+ frameSelector=&plainFrameSelector;
+ else
+ frameSelector=&randomFrameSelector;
+ thumbnailsMap.addThumbnail(videoBackend->preview(frameSelector) );
kDebug() << "try " << thumbnailsMap.size();
}
return thumbnailsMap.getBestThumbnail();
@@ -62,27 +85,27 @@
unsigned int PreviewingFile::getFPS() {
- return this->fps;
+ return d->fps;
}
-unsigned int PreviewingFile::getSecondsLength() {
- return this->secondsLength;
+quint64 PreviewingFile::getMillisecondsLength() {
+ return d->millisecondsLength;
}
QString PreviewingFile::getFilePath() const {
- return fileInfo.absoluteFilePath();
+ return d->fileInfo.absoluteFilePath();
}
bool PreviewingFile::isWide() {
- return scalingWidth>scalingHeight;
+ return d->scalingWidth>d->scalingHeight;
}
unsigned int PreviewingFile::getScalingHeight() {
- return this->scalingHeight;
+ return d->scalingHeight;
}
unsigned int PreviewingFile::getScalingWidth() {
- return this->scalingWidth;
+ return d->scalingWidth;
}
#include "previewingfile.moc"
--- trunk/kdereview/mplayerthumbs/src/previewingfile.h #954759:954760
@@ -23,14 +23,16 @@
#include <QFileInfo>
class Thumbnail;
class VideoBackendIFace;
+class PreviewingFilePrivate;
class PreviewingFile : public QObject
{
Q_OBJECT
public:
PreviewingFile(const QString &filePath, uint scalingWidth, uint scalingHeight, QObject \
*parent = 0); + ~PreviewingFile();
bool isBlacklisted(const QStringList &blacklistedExtensions);
- void setStreamInformation(uint fps, uint secondsLength);
- uint getSecondsLength();
+ void setStreamInformation(uint fps, quint64 millisecondsLength);
+ quint64 getMillisecondsLength();
uint getFPS();
QString getFilePath() const;
bool isWide();
@@ -39,11 +41,7 @@
Thumbnail *getPreview(VideoBackendIFace *videoBackend, uint minVariance, uint maxTries);
private:
- QFileInfo fileInfo;
- uint fps;
- uint secondsLength;
- uint scalingWidth;
- uint scalingHeight;
+ PreviewingFilePrivate *d;
};
#endif // PREVIEWINGFILE_H
--- trunk/kdereview/mplayerthumbs/src/videobackendiface.h #954759:954760
@@ -22,6 +22,7 @@
#include <QObject>
#include <QPixmap>
+#include "frameselector.h"
class PreviewingFile;
class MPlayerThumbsCfg;
@@ -32,7 +33,7 @@
VideoBackendIFace(PreviewingFile *previewingFile, MPlayerThumbsCfg* cfg);
bool cannotPreview();
- virtual Thumbnail *preview(int flags) = 0;
+ virtual Thumbnail *preview(FrameSelector *frameSelector) = 0;
virtual bool readStreamInformation() = 0;
virtual ~VideoBackendIFace();
protected:
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic