[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdereview/mplayerthumbs/src
From:       Marco Gulino <marco () kmobiletools ! org>
Date:       2009-04-07 9:41:57
Message-ID: 1239097317.589660.23404.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 950475 by gulino:

More refactoring, introduced the file to preview as a "PreviewingFile" \
object, moving in it some responsibilities.


 M  +1 -1      CMakeLists.txt  
 A             constants.h   [License: LGPL (v2)]
 M  +33 -37    mplayervideobackend.cpp  
 M  +7 -4      mplayervideobackend.h  
 A             previewingfile.cpp   [License: LGPL (v2)]
 A             previewingfile.h   [License: LGPL (v2)]
 M  +8 -3      videobackendiface.cpp  
 M  +8 -9      videobackendiface.h  
 M  +9 -33     videopreview.cpp  
 M  +0 -6      videopreview.h  


--- trunk/kdereview/mplayerthumbs/src/CMakeLists.txt #950474:950475
@@ -3,7 +3,7 @@
 
 ########### next target ###############
 
-set(videopreview_PART_SRCS videopreview.cpp  mplayervideobackend.cpp \
videobackendiface.cpp) +set(videopreview_PART_SRCS videopreview.cpp  \
mplayervideobackend.cpp videobackendiface.cpp previewingfile.cpp)  
 kde4_add_kcfg_files(videopreview_PART_SRCS mplayerthumbs.kcfgc)
 
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.cpp \
#950474:950475 @@ -15,7 +15,7 @@
 */
 
 #include "mplayervideobackend.h"
-
+#include "constants.h"
 #include <kdebug.h>
 #include <QDir>
 #include <KMD5>
@@ -24,51 +24,46 @@
 #include "mplayerthumbscfg.h"
 #include <kstandarddirs.h>
 #include <krandomsequence.h>
+#include "previewingfile.h"
 
-MPlayerVideoBackend::MPlayerVideoBackend(const QString& filePath, \
                MPlayerThumbsCfg* cfg) 
-  : VideoBackendIFace(filePath, cfg)
+MPlayerVideoBackend::MPlayerVideoBackend(PreviewingFile *previewingfile, \
MPlayerThumbsCfg* cfg)  +  : VideoBackendIFace(previewingfile, cfg)
 {
 }
 
 
-VideoPreview::FileInformation MPlayerVideoBackend::findFileInfo() {
-    VideoPreview::FileInformation fileinfo;
-    fileinfo.seconds=0;
-    fileinfo.fps=0;
-    fileinfo.isValid=false;
-
+bool MPlayerVideoBackend::readStreamInformation() {
     tmpdir=new KTempDir();
-    if(tmpdir->name().isNull() ) return fileinfo;
+    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(this->s_filePath);
+    KUrl furl( previewingFile->getFilePath() );
     kDebug(DBG_AREA) << "videopreview: url=" << furl << "; local:" << \
furl.isLocalFile() << endl;  
 
     QStringList args;
-    args << playerBin << QString("\"" + this->s_filePath + "\"") << \
"-nocache" << "-identify" << "-vo" << "null" << "-frames" << "0"/* << \
"-nosound" */<< "-ao" << "null"; +    args << playerBin << QString("\"" + \
previewingFile->getFilePath() + "\"") << "-nocache" << "-identify" << "-vo" \
<< "null" << "-frames" << "0"/* << "-nosound" */<< "-ao" << "null";  args+= \
customargs;  
     kDebug(DBG_AREA) << "videopreview: starting process: --_" << " " << \
                args.join(" ") << "_--\n";
-    if (! startAndWaitProcess(args) ) return fileinfo;
+    if (! startAndWaitProcess(args) ) return false;
 
     QString information=QString(mplayerprocess->readAllStandardOutput() );
     QRegExp findInfos("ID_VIDEO_FPS=([\\d]*).*ID_LENGTH=([\\d]*).*");
     if(findInfos.indexIn( information) == -1 )
     {
         kDebug(DBG_AREA) << "videopreview: No information found, \
                exiting\n";
-        return fileinfo;
+        return false;
     }
-    fileinfo.seconds =findInfos.cap(2).toInt();
-    fileinfo.fps=findInfos.cap(1).toInt();
+    previewingFile->setStreamInformation(findInfos.cap(1).toInt(), \
findInfos.cap(2).toInt());  
-    kDebug(DBG_AREA) << "videopreview: find length=" << fileinfo.seconds \
                << ", fps=" << fileinfo.fps << endl;
-    fileinfo.isValid=true;
-    return fileinfo;
+    kDebug(DBG_AREA) << "videopreview: find length=" << \
previewingFile->getSecondsLength() << ", fps=" << previewingFile->getFPS() \
<< endl; +    return true;
 }
 
+
 MPlayerVideoBackend::~MPlayerVideoBackend() {
     delete mplayerprocess;
     delete rand;
@@ -78,40 +73,41 @@
 
 
 
-QPixmap MPlayerVideoBackend::getVideoFrame(int flags, \
VideoPreview::FileInformation fileinfo) { +QPixmap \
MPlayerVideoBackend::getVideoFrame(int flags) {  QStringList args;
     kDebug(DBG_AREA) << "videopreview: using flags " << flags << endl;
-#define START ((fileinfo.seconds*15)/100)
-#define END ((fileinfo.seconds*70)/100)
+#define START ((previewingFile->getSecondsLength()*15)/100)
+#define END ((previewingFile->getSecondsLength()*70)/100)
     args.clear();
-    args << playerBin << "\"" + this->s_filePath + "\"";
-    if(fileinfo.towidth>fileinfo.toheight) fileinfo.toheight=-2; else \
                fileinfo.towidth=-2;
-//     switch( flags ){
-//         case random
-//     }
-    if( flags & VideoPreview::framerandom )
+    int scalingWidth=previewingFile->getScalingWidth();
+    int scalingHeight=previewingFile->getScalingHeight();
+    int fps=previewingFile->getFPS();
+    args << playerBin << "\"" + previewingFile->getFilePath() + "\"";
+    if(previewingFile->isWide()) scalingHeight=-2; else scalingWidth=-2;
+
+    if( flags & Preview::framerandom )
     {
         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 & VideoPreview::frameend )
+    } else if (flags & Preview::frameend )
     {
         kDebug(DBG_AREA) << "videopreview: frameend\n";
-        args << "-ss" << QString::number( fileinfo.seconds - 10 )
+        args << "-ss" << QString::number(  \
previewingFile->getSecondsLength() - 10 )  << "-frames" << "4";
-    } else if (flags & VideoPreview::framestart)
+    } else if (flags & Preview::framestart)
     {
         kDebug(DBG_AREA) << "videopreview: framestart\n";
-        if(!fileinfo.fps) fileinfo.fps=25; // if we've not autodetected a \
fps rate, let's assume 25fps.. even if it's wrong it shouldn't hurt. +      \
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( fileinfo.fps*10 );
+        args << "-frames" << QString::number( fps*10 );
     }
-    KMD5 md5builder(this->s_filePath.toLatin1() );
+    KMD5 md5builder(previewingFile->getFilePath().toLatin1() );
     QString md5file=md5builder.hexDigest().data();
     QString tmpDirPath = tmpdir->name() + md5file + QDir::separator();
     args << "-nocache" << "-idx" /*@TODO check if it's too slow..*/ << \
"-ao" << "null"/*"-nosound" << */<< "-speed" << "99"  /*<< "-sstep" << \
                "5"*/
-            << "-vo" << QString("jpeg:outdir=%1").arg(tmpDirPath ) << \
"-vf" << QString("scale=%1:%2").arg(fileinfo.towidth).arg(fileinfo.toheight);
 +            << "-vo" << QString("jpeg:outdir=%1").arg(tmpDirPath ) << \
"-vf" << QString("scale=%1:%2").arg(scalingWidth).arg(scalingHeight);  \
args+=customargs;  
     if (! startAndWaitProcess(args) ) return NULL;
@@ -168,8 +164,8 @@
   return true;
 }
 
-bool MPlayerVideoBackend::canPreview() {
-  return findPlayerBin();
+bool MPlayerVideoBackend::playerCannotPreview() {
+  return ! findPlayerBin();
 }
 
 
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.h #950474:950475
@@ -20,14 +20,17 @@
 #include <videobackendiface.h>
 
 class KRandomSequence;
+class KTempDir;
+class QProcess;
 class MPlayerVideoBackend : public VideoBackendIFace
 {
 public:
-	MPlayerVideoBackend(const QString &filePath,  MPlayerThumbsCfg* cfg);
+	MPlayerVideoBackend(PreviewingFile *previewingFile,  MPlayerThumbsCfg* \
cfg);  virtual ~MPlayerVideoBackend();
-  virtual VideoPreview::FileInformation findFileInfo();
-  virtual QPixmap getVideoFrame(int flags, VideoPreview::FileInformation \
                fileinfo);
-	virtual bool canPreview();
+  virtual QPixmap getVideoFrame(int flags);
+	virtual bool playerCannotPreview();
+	virtual bool readStreamInformation();
+
 private:
   bool findPlayerBin();
   bool startAndWaitProcess(const QStringList &args);
--- trunk/kdereview/mplayerthumbs/src/videobackendiface.cpp #950474:950475
@@ -15,14 +15,19 @@
 */
 
 #include "videobackendiface.h"
+#include "previewingfile.h"
+#include "mplayerthumbs.h"
 
-VideoBackendIFace::VideoBackendIFace(const QString& filePath,  \
                MPlayerThumbsCfg* cfg) :
-  s_filePath(filePath), mplayerThumbsConfig(cfg)
+VideoBackendIFace::VideoBackendIFace(PreviewingFile *previewingFile,  \
MPlayerThumbsCfg* cfg) : +  mplayerThumbsConfig(cfg)
 {
-  
+  this->previewingFile = previewingFile;
 }
 
 VideoBackendIFace::~VideoBackendIFace() {
 
 }
 
+bool VideoBackendIFace::cannotPreview() {
+  return previewingFile->isBlacklisted( \
mplayerThumbsConfig->noextensions() ) || playerCannotPreview(); +}
--- trunk/kdereview/mplayerthumbs/src/videobackendiface.h #950474:950475
@@ -20,21 +20,20 @@
 #include <QObject>
 #include <QPixmap>
 
-#include "videopreview.h"
-
+class PreviewingFile;
+class MPlayerThumbsCfg;
 class VideoBackendIFace
 {
 public:
-  VideoBackendIFace(const QString &filePath,  MPlayerThumbsCfg* cfg);
-  virtual QPixmap getVideoFrame(int flags, VideoPreview::FileInformation \
                fileinfo) = 0;
-  virtual VideoPreview::FileInformation findFileInfo() = 0;
-  virtual bool canPreview() = 0;
+  VideoBackendIFace(PreviewingFile *previewingFile, MPlayerThumbsCfg* \
cfg); +  virtual QPixmap getVideoFrame(int flags) = 0;
+  bool cannotPreview();
+  virtual bool readStreamInformation() = 0;
   virtual ~VideoBackendIFace();
 protected:
-  const QString s_filePath;
+  PreviewingFile *previewingFile;
   MPlayerThumbsCfg* mplayerThumbsConfig;
-
-
+  virtual bool playerCannotPreview() = 0;
 };
 
 #endif // VIDEOBACKENDIFACE_H
--- trunk/kdereview/mplayerthumbs/src/videopreview.cpp #950474:950475
@@ -19,32 +19,23 @@
  ***************************************************************************/
  
 #include "videopreview.h"
-
-#include <QFile>
+#include "constants.h"
 #include <qpixmap.h>
 #include <qimage.h>
 #include <QtCore/QVarLengthArray>
 
 #include <kmimetype.h>
-#include <QDir>
 #include <qpainter.h>
 #include <qdatetime.h>
-#include <qregexp.h>
 #include "videopreview.h"
 #include <kdebug.h>
-#include <kurl.h>
-#include <math.h>
-#include <QFileInfo>
-#include <kcodecs.h>
 #include <kstandarddirs.h>
 
 #include "videobackendiface.h"
 #include "mplayervideobackend.h"
 #include "mplayerthumbs.h"
+#include "previewingfile.h"
 
-#include <unistd.h>
-
-//#include "config.h"
 extern "C"
 {
     KDE_EXPORT ThumbCreator *new_creator()
@@ -65,31 +56,26 @@
 {
     kDebug(DBG_AREA) << "videopreview svn\n";
     MPlayerThumbsCfg *cfg=MPlayerThumbsCfg::self();
-    VideoBackendIFace *videoBackend = new MPlayerVideoBackend(path, cfg);
+    PreviewingFile *previewingFile = new PreviewingFile(path, width, \
height, this); +    VideoBackendIFace *videoBackend = new \
MPlayerVideoBackend(previewingFile, cfg);  
-    QFileInfo fi(path);
-    if(hasBlacklistedExtension(&fi, cfg) || ! videoBackend->canPreview() ) \
{ +    if( videoBackend->cannotPreview() || ! \
videoBackend->readStreamInformation() ) {  delete cfg;
       delete videoBackend;
       return false;
     }
 
-    FileInformation fileinfo=videoBackend->findFileInfo();
-
-    if(! fileinfo.isValid) return false;
-    fileinfo.towidth=width;
-    fileinfo.toheight=height;
     QPixmap pix;
-    int flags=framerandom;
+    int flags=Preview::framerandom;
     #define LASTTRY 3
     for(int i=0; i<=LASTTRY; i++)
     {
         kDebug(DBG_AREA) << "videopreview: try " << i << endl;
-	flags=((i<LASTTRY) ? flags : framestart );
-        pix=videoBackend->getVideoFrame(flags, fileinfo);
+	flags=((i<LASTTRY) ? flags : Preview::framestart );
+        pix=videoBackend->getVideoFrame(flags);
         if(!pix.isNull()) {
             uint variance=imageVariance(pix.toImage()/*.bits(),( (width+ \
                7) & ~0x7), width, height, 1 */);
-            kDebug(DBG_AREA) << "videopreview: " << \
QFileInfo(path).fileName() << " frame variance: " << variance << "; " <<  + \
kDebug(DBG_AREA) << "videopreview: " << previewingFile->getFilePath() << " \
                frame variance: " << variance << "; " << 
                     ((variance<=40 && ( i!=LASTTRY-1))? "!!!DROPPING!!!" : \
"GOOD :-)" ) << endl;  if(variance>40 || i==LASTTRY-1 ) break;
         }
@@ -158,16 +144,6 @@
     return delta/STEPS;
 }
 
-bool VideoPreview::hasBlacklistedExtension(QFileInfo* fileInfo, \
                MPlayerThumbsCfg *cfg) {
-    QString extension=fileInfo->suffix().trimmed();
-    kDebug(DBG_AREA) << "videopreview: file extension=\"" << extension << \
                "\"\n";
-    if( extension.length() && !cfg->noextensions().filter(extension, \
                Qt::CaseInsensitive).isEmpty() )
-    {
-        kDebug(DBG_AREA) << "videopreview: matched extension " << \
                extension.prepend('.') << "; exiting.\n";
-        return true;
-    }
-    return false;
-}
 
 
 #include "videopreview.moc"
--- trunk/kdereview/mplayerthumbs/src/videopreview.h #950474:950475
@@ -32,9 +32,7 @@
 class KTempDir;
 class KRandomSequence;
 #include <qobject.h>
-#define DBG_AREA 0
 
-
 class QFileInfo;
 class MPlayerThumbsCfg;
 class VideoPreview : public QObject, public ThumbCreator
@@ -45,15 +43,11 @@
         virtual ~VideoPreview();
         virtual bool create(const QString &path, int width, int height, \
QImage &img);  virtual Flags flags() const;
-	struct FileInformation { int towidth; int toheight; int fps; int seconds; \
                bool isValid; };
-        enum frameflags { framerandom=0x1, framestart=0x2, frameend=0x4 };
 
     protected:
         static uint imageVariance(QImage image );
     private:
         QPixmap m_pixmap;
-	bool hasBlacklistedExtension(QFileInfo *fileInfo, MPlayerThumbsCfg *cfg);
-        FileInformation fileinfo;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic