[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