[go: up one dir, main page]

Menu

Diff of /filecopier.cpp [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/filecopier.cpp
@@ -0,0 +1,80 @@
+#include "filecopier.h"
+#include "mainwindow.h"
+
+FileCopier::FileCopier()
+{
+    mFileIn = NULL;
+    mFileOut = NULL;
+}
+
+FileCopier::~FileCopier()
+{
+    Close();
+}
+
+bool FileCopier::Open(const QString &aFileIn, const QString &aFileOut)
+{
+    mFileIn = fopen(aFileIn.toAscii().data(),"rb");
+    if(!mFileIn) return false;
+
+    mFileOut = fopen(aFileOut.toAscii().data(),"wb");
+    if(!mFileOut) { fclose(mFileIn); mFileIn = NULL; return false; }
+
+    print_log(QString("Open :")+aFileIn+QString(" to ")+aFileOut);
+
+    return true;
+}
+
+bool FileCopier::Write(const VideoSegment &aSegment, QProgressDialog *aDial)
+{
+   size_t aBuffSize = 3000*188; // Packets MPEG
+   size_t aRestSize = aSegment.mEnd.mFilePos-aSegment.mBegin.mFilePos;
+   char *aBuff = new char[aBuffSize];
+   size_t aPosition = aSegment.mBegin.mFilePos;
+
+
+   fseek(mFileIn,aPosition,SEEK_SET);
+   bool aStatus = true;
+
+   while(aRestSize)
+   {
+       if(aDial)
+       {
+           aDial->setValue(aPosition);
+           MainWindow::FlushAll();
+       }
+
+       if(aBuffSize > aRestSize)
+           aBuffSize = aRestSize;
+       size_t aReadSize = fread(aBuff,1,aBuffSize,mFileIn);
+       if(aReadSize<aBuffSize)
+              {
+                  print_log(QString("Erreur entrée : %1/%2").arg(aReadSize).arg(aBuffSize));
+                  aStatus = false;
+                  break;
+              }
+
+       size_t aWrittenSize = fwrite(aBuff,1,aBuffSize,mFileOut);
+       if(aWrittenSize<aBuffSize)
+       {
+           print_log(QString("Erreur sortie : %1/%2").arg(aWrittenSize).arg(aBuffSize));
+           aStatus = false;
+           break;
+       }
+
+       aPosition += aWrittenSize;
+       aRestSize -= aWrittenSize;
+   }
+
+  delete aBuff;
+   return aStatus;
+}
+
+void FileCopier::Close()
+{
+    if(mFileIn) fclose(mFileIn);
+    if(mFileOut) fclose(mFileOut);
+
+    mFileIn = NULL;
+    mFileOut = NULL;
+}