[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