[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-07 12:37:00
Message-ID: 1239107820.663230.31576.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 950517 by gulino:

More refactoring


 M  +1 -1      CMakeLists.txt  
 M  +3 -0      constants.h  
 M  +2 -2      mplayerthumbscfg.h  
 M  +7 -3      mplayervideobackend.cpp  
 M  +4 -1      mplayervideobackend.h  
 M  +19 -0     previewingfile.cpp  
 M  +8 -1      previewingfile.h  
 A             thumbnail.cpp   [License: LGPL (v2)]
 A             thumbnail.h   [License: LGPL (v2)]
 A             thumbnailsmap.cpp   [License: LGPL (v2)]
 A             thumbnailsmap.h   [License: LGPL (v2)]
 M  +5 -1      videobackendiface.h  
 M  +14 -57    videopreview.cpp  
 M  +2 -2      videopreview.h  


--- trunk/kdereview/mplayerthumbs/src/CMakeLists.txt #950516:950517
@@ -3,7 +3,7 @@
 
 ########### next target ###############
 
-set(videopreview_PART_SRCS videopreview.cpp  mplayervideobackend.cpp \
videobackendiface.cpp previewingfile.cpp) +set(videopreview_PART_SRCS \
videopreview.cpp  mplayervideobackend.cpp videobackendiface.cpp previewingfile.cpp \
thumbnail.cpp thumbnailsmap.cpp)  
 kde4_add_kcfg_files(videopreview_PART_SRCS mplayerthumbs.kcfgc)
 
--- trunk/kdereview/mplayerthumbs/src/constants.h #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
--- trunk/kdereview/mplayerthumbs/src/mplayerthumbscfg.h #950516:950517
@@ -1,6 +1,6 @@
 /***************************************************************************
-   Copyright (C) 2006-2008
-   by Marco Gulino <marco@kmobiletools.org>
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.cpp #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
@@ -25,6 +28,7 @@
 #include <kstandarddirs.h>
 #include <krandomsequence.h>
 #include "previewingfile.h"
+#include "thumbnail.h"
 
 MPlayerVideoBackend::MPlayerVideoBackend(PreviewingFile *previewingfile, \
MPlayerThumbsCfg* cfg)   : VideoBackendIFace(previewingfile, cfg)
@@ -73,7 +77,7 @@
 
 
 
-QPixmap MPlayerVideoBackend::getVideoFrame(int flags) {
+Thumbnail *MPlayerVideoBackend::preview(int flags) {
     QStringList args;
     kDebug(DBG_AREA) << "videopreview: using flags " << flags << endl;
 #define START ((previewingFile->getSecondsLength()*15)/100)
@@ -118,8 +122,8 @@
 
     QString lastframe=QDir(tmpDirPath ).entryList( QStringList("*.jpg") ).last();
     kDebug(DBG_AREA) << "videopreview: LastFrame==" << lastframe << endl;
-    QPixmap retpix(tmpDirPath.append( lastframe ));
-    return retpix;
+    QPixmap *retpix = new QPixmap(tmpDirPath.append( lastframe ));
+    return new Thumbnail(retpix, previewingFile);
 }
 
 
--- trunk/kdereview/mplayerthumbs/src/mplayervideobackend.h #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+	 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
@@ -27,7 +30,7 @@
 public:
 	MPlayerVideoBackend(PreviewingFile *previewingFile,  MPlayerThumbsCfg* cfg);
 	virtual ~MPlayerVideoBackend();
-  virtual QPixmap getVideoFrame(int flags);
+  virtual Thumbnail* preview(int flags);
 	virtual bool playerCannotPreview();
 	virtual bool readStreamInformation();
 
--- trunk/kdereview/mplayerthumbs/src/previewingfile.cpp #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
@@ -18,6 +21,9 @@
 #include "constants.h"
 #include <kdebug.h>
 #include <QStringList>
+#include "thumbnail.h"
+#include "thumbnailsmap.h"
+#include "videobackendiface.h"
 PreviewingFile::PreviewingFile(const QString& filePath, uint scalingWidth, uint \
scalingHeight, QObject* parent)  : QObject(parent), fileInfo(filePath)
 {
@@ -42,6 +48,17 @@
   this->secondsLength=secondsLength;
 }
 
+Thumbnail* PreviewingFile::getPreview(VideoBackendIFace* videoBackend, uint \
minVariance, unsigned int maxTries) { +  ThumbnailsMap thumbnailsMap;
+  Preview::frameflags flags;
+  while(thumbnailsMap.hasAGoodImageOrSurrenders(minVariance, maxTries)) {
+    flags=(thumbnailsMap.size()>=maxTries) ? Preview::framestart : \
Preview::framerandom; +    thumbnailsMap.addThumbnail(videoBackend->preview(flags) );
+  }
+  return thumbnailsMap.getBestThumbnail();
+}
+
+
 unsigned int PreviewingFile::getFPS() {
   return this->fps;
 }
@@ -66,6 +83,8 @@
   return this->scalingWidth;
 }
 
+#include "previewingfile.moc"
 
 
 
+
--- trunk/kdereview/mplayerthumbs/src/previewingfile.h #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
@@ -18,8 +21,11 @@
 #define PREVIEWINGFILE_H
 #include <QObject>
 #include <QFileInfo>
+class Thumbnail;
+class VideoBackendIFace;
 class PreviewingFile : public QObject
 {
+Q_OBJECT
 public:
   PreviewingFile(const QString &filePath, uint scalingWidth, uint scalingHeight, \
QObject *parent = 0);  bool isBlacklisted(const QStringList &blacklistedExtensions);
@@ -30,13 +36,14 @@
   bool isWide();
   uint getScalingWidth();
   uint getScalingHeight();
+  Thumbnail *getPreview(VideoBackendIFace *videoBackend, uint minVariance, uint \
maxTries); +
 private:
   QFileInfo fileInfo;
   uint fps;
   uint secondsLength;
   uint scalingWidth;
   uint scalingHeight;
-
 };
 
 #endif // PREVIEWINGFILE_H
--- trunk/kdereview/mplayerthumbs/src/videobackendiface.h #950516:950517
@@ -1,4 +1,7 @@
 /*
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
+
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License version 2 as published by the Free Software Foundation.
@@ -22,11 +25,12 @@
 
 class PreviewingFile;
 class MPlayerThumbsCfg;
+class Thumbnail;
 class VideoBackendIFace
 {
 public:
   VideoBackendIFace(PreviewingFile *previewingFile, MPlayerThumbsCfg* cfg);
-  virtual QPixmap getVideoFrame(int flags) = 0;
+  virtual Thumbnail *preview(int flags) = 0;
   bool cannotPreview();
   virtual bool readStreamInformation() = 0;
   virtual ~VideoBackendIFace();
--- trunk/kdereview/mplayerthumbs/src/videopreview.cpp #950516:950517
@@ -1,6 +1,6 @@
 /***************************************************************************
-   Copyright (C) 2006-2008
-   by Marco Gulino <marco@kmobiletools.org>
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -35,6 +35,7 @@
 #include "mplayervideobackend.h"
 #include "mplayerthumbs.h"
 #include "previewingfile.h"
+#include "thumbnail.h"
 
 extern "C"
 {
@@ -64,52 +65,35 @@
       delete videoBackend;
       return false;
     }
+    
+    Thumbnail *thumbnail=previewingFile->getPreview(videoBackend, 40, 3);
+    if(!thumbnail || ! thumbnail->pixmapIsValid() ) return false;
 
-    QPixmap pix;
-    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 : 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: " << previewingFile->getFilePath() << \
                " frame variance: " << variance << "; " << 
-                    ((variance<=40 && ( i!=LASTTRY-1))? "!!!DROPPING!!!" : "GOOD \
                :-)" ) << endl;
-            if(variance>40 || i==LASTTRY-1 ) break;
-        }
-    }
+    delete videoBackend;
 
-  delete videoBackend;
-
-    if(pix.isNull() )
-        return false;
-    /** From videocreator.cpp - xine_artsplugin
+    /* From videocreator.cpp - xine_artsplugin
     Copyright (C) 2002 Simon MacMullen
     Copyright (C) 2003 Ewald Snel <ewald@rambo.its.tudelft.nl>
      * */
-//     QPixmap pix( createThumbnail( &frame, width, height ) );
-//#ifdef STRIPS_SUPPORT
+    QPixmap *pix=thumbnail->getPixmap();
     if(cfg->createStrips() ) {
-        QPainter painter( &pix );
+        QPainter painter( pix );
         QPixmap sprocket;
 
         kDebug(DBG_AREA) << "videopreview: using strip image sprocket: " << \
                KStandardDirs::locate( "data", "videothumbnail/sprocket-small.png" ) \
                << endl;
-        if (pix.height() < 60)
+        if (pix->height() < 60)
             sprocket = QPixmap(KStandardDirs::locate( "data", \
                "videothumbnail/sprocket-small.png" ));
-        else if (pix.height() < 90)
+        else if (pix->height() < 90)
             sprocket = QPixmap(KStandardDirs::locate( "data", \
"videothumbnail/sprocket-medium.png" ));  else
             sprocket = QPixmap(KStandardDirs::locate( "data", \
"videothumbnail/sprocket-large.png" ));  
-        for (int y = 0; y < pix.height() + sprocket.height(); y += \
sprocket.height()) { +        for (int y = 0; y < pix->height() + sprocket.height(); \
y += sprocket.height()) {  painter.drawPixmap( 0, y, sprocket );
         }
 }
         // End of xine-artsplugin code
-//#endif
-    img = pix.toImage();
+    img = pix->toImage();
 
     return true;
 }
@@ -119,32 +103,5 @@
     return (Flags)(DrawFrame);
 }
 
-
-uint VideoPreview::imageVariance(QImage image )
-{
-    uint delta=0;
-    uint avg=0;
-    uint bytes=image.numBytes();
-    uint STEPS=bytes/2;
-    QVarLengthArray<uchar> pivot(STEPS);
-    kDebug(DBG_AREA) << "Using " << STEPS << " steps\n";
-    uchar *bits=image.bits();
-    // First pass: get pivots and taking average
-    for( uint i=0; i<STEPS ; i++ ){
-        pivot[i]=bits[i*(bytes/STEPS)];
-        avg+=pivot[i];
-    }
-    avg=avg/STEPS;
-    // Second Step: calculate delta (average?)
-    for (uint i=0; i<STEPS; i++)
-    {
-        int curdelta=abs(int(avg-pivot[i]));
-        delta+=curdelta;
-    }
-    return delta/STEPS;
-}
-
-
-
 #include "videopreview.moc"
 
--- trunk/kdereview/mplayerthumbs/src/videopreview.h #950516:950517
@@ -1,6 +1,6 @@
 /***************************************************************************
-   Copyright (C) 2006-2008
-   by Marco Gulino <marco@kmobiletools.org>
+   Copyright (C) 2006-2009
+   by Marco Gulino <marco.gulino@gmail.com>
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by


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

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