[Avidemux-svn-commit] r5160 - in branches/avidemux_2.6_branch_mean: avidemux_core/ADM_coreMuxer/include avidemux_core/ADM_coreMuxer/src avidemux_plugins/ADM_muxers/muxerAvi avidemux_plugins/ADM_muxers/muxerFlv avidemux_plugins/ADM_muxers/muxerRaw

mean at BerliOS mean at mail.berlios.de
Sun Jul 26 20:38:46 CEST 2009


Author: mean
Date: 2009-07-26 20:38:44 +0200 (Sun, 26 Jul 2009)
New Revision: 5160

Modified:
   branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/include/ADM_muxer.h
   branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/src/ADM_muxerUtils.cpp
   branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerAvi/muxerAvi.cpp
   branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/CMakeLists.txt
   branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/muxerFlv.cpp
   branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerRaw/muxerRaw.cpp
Log:
[muxers] Add progress bar to base class, refs #4

Modified: branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/include/ADM_muxer.h
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/include/ADM_muxer.h	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/include/ADM_muxer.h	2009-07-26 18:38:44 UTC (rev 5160)
@@ -9,6 +9,9 @@
 #include "ADM_default.h"
 #include "ADM_audioStream.h"
 #include "DIA_working.h"
+#include "DIA_coreToolkit.h"
+#include "DIA_encoding.h"
+
 /**
     \class ADM_videoStream
 
@@ -19,6 +22,8 @@
             uint32_t width,height,averageFps1000;
             uint32_t fourCC;
             bool     isCFR;
+
+
             DIA_workingBase *encoding;
 public:
                       ADM_videoStream() {};
@@ -45,19 +50,25 @@
                 ADM_videoStream *vStream;       // Internal copy of the parameters
                 ADM_audioStream  **aStreams;
                 uint32_t         nbAStreams;
+
+
+                uint64_t videoIncrement; // Used/set by initUI
+                uint64_t videoDuration;
                 DIA_workingBase  *encoding;
                 
 public:
                           ADM_muxer() {vStream=NULL;aStreams=NULL;nbAStreams=0;encoding=NULL;};
-        virtual           ~ADM_muxer() {if(encoding) delete encoding;encoding=NULL;};
+        virtual           ~ADM_muxer() {closeUI();};
         virtual bool      open(const char *filename,   ADM_videoStream *videoStream,
                                 uint32_t nbAudioTrack, ADM_audioStream **audioStreams)=0;
 
         virtual  bool     save(void)=0;
         virtual  bool     close(void)=0; 
         
+        virtual  bool     initUI(const char *title);
+        virtual  bool     updateUI(uint64_t time);
+        virtual  bool     closeUI(void);
 
-
 };
 #endif
 

Modified: branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/src/ADM_muxerUtils.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/src/ADM_muxerUtils.cpp	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreMuxer/src/ADM_muxerUtils.cpp	2009-07-26 18:38:44 UTC (rev 5160)
@@ -61,3 +61,47 @@
     i*=scale->num;
     return i;
 }
+/**
+    \fn     initUI
+    \brief  initialize the progress bar
+*/
+bool     ADM_muxer::initUI(const char *title)
+{
+ float f=(float)vStream->getAvgFps1000();
+        f=1000./f;
+        f*=1000000;
+        videoIncrement=(uint64_t)f;  // Video increment in AVI-Tick
+        videoDuration=vStream->getVideoDuration();
+
+        encoding=createWorking(title);
+        return true;
+}
+/**
+        \fn updateUI
+        \brief Update the progress bar
+        @return false if abort request, true if keep going
+*/
+
+bool     ADM_muxer::updateUI(uint64_t time)
+{
+            ADM_assert(encoding);
+            uint32_t  percent=(100*time)/videoDuration;
+            if(percent>100) percent=100;
+            encoding->update(percent);
+            if(!encoding->isAlive()) 
+            {
+                return false;
+            }
+            return true;
+}
+/**
+        \fn closeUI
+*/
+
+bool     ADM_muxer::closeUI(void)
+{
+        if(encoding) delete encoding;
+        encoding=NULL;
+        return true;
+}
+// EOF

Modified: branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerAvi/muxerAvi.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerAvi/muxerAvi.cpp	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerAvi/muxerAvi.cpp	2009-07-26 18:38:44 UTC (rev 5160)
@@ -20,10 +20,8 @@
 #include "ADM_default.h"
 #include "fourcc.h"
 #include "muxerAvi.h"
-#include "DIA_coreToolkit.h"
-#include "DIA_encoding.h"
-//#include "DIA_encoding.h"
 
+
 #define ADM_NO_PTS 0xFFFFFFFFFFFFFFFFLL // FIXME
 #define AUDIO_BUFFER_SIZE 48000*6*sizeof(float)
 // Fwd ref
@@ -146,14 +144,9 @@
     uint32_t len,flags;
     uint64_t pts,dts,rawDts;
     uint64_t lastVideoDts=0;
-    uint64_t videoIncrement;
-    uint64_t videoDuration=vStream->getVideoDuration();
     int ret;
     int written=0;
-    float f=(float)vStream->getAvgFps1000();
-    f=1000./f;
-    f*=1000000;
-    videoIncrement=(uint64_t)f;  // Video increment in AVI-Tick
+   
 
     audioBuffer=new uint8_t[AUDIO_BUFFER_SIZE];
     videoBuffer=new uint8_t[bufSize];
@@ -165,7 +158,8 @@
     if(dts==ADM_NO_PTS) dts=0;
     lastVideoDts=dts;
 
-    encoding=createWorking("Saving avi");
+    initUI("Saving Avi");
+    
 
     while(1)
     {
@@ -190,28 +184,23 @@
 
             fillAudio(aviTime+videoIncrement);    // and matching audio
 
-
-            uint32_t  percent=(100*aviTime)/videoDuration;
-            if(percent>100) percent=100;
-            
-            encoding->update(percent);
-            if(!encoding->isAlive()) 
-            {
+            if(updateUI(aviTime)==false)
+            {  
                 result=false;
                 goto abt;
             }
-
+           
             written++;
             aviTime+=videoIncrement;
     }
 abt:
+    closeUI();
     writter.setEnd();
     delete [] videoBuffer;
     videoBuffer=NULL;
     delete [] audioBuffer;
     audioBuffer=NULL;
     printf("[AviMuxer] Wrote %d frames, nb audio streams %d\n",written,nbAStreams);
-    
     return result;
 }
 /**

Modified: branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/CMakeLists.txt
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/CMakeLists.txt	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/CMakeLists.txt	2009-07-26 18:38:44 UTC (rev 5160)
@@ -6,7 +6,7 @@
 )
 
 ADD_LIBRARY(ADM_mx_flv SHARED ${ADM_flv_SRCS})
-TARGET_LINK_LIBRARIES(ADM_mx_flv  ADM_libavutil6 ADM_libavformat6)
+TARGET_LINK_LIBRARIES(ADM_mx_flv  ADM_libavutil6 ADM_libavformat6 ADM_libavcodec6)
 INCLUDE_DIRECTORIES("${AVIDEMUX_SOURCE_DIR}/avidemux/ADM_libraries/ADM_ffmpeg")
 
 INIT_MUXER(ADM_mx_flv)

Modified: branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/muxerFlv.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/muxerFlv.cpp	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerFlv/muxerFlv.cpp	2009-07-26 18:38:44 UTC (rev 5160)
@@ -302,19 +302,16 @@
     uint32_t len,flags;
     uint64_t pts,dts,rawDts;
     uint64_t lastVideoDts=0;
-    uint64_t videoIncrement;
     int ret;
+    bool result=true;
     int written=0;
-    float f=(float)vStream->getAvgFps1000();
-    f=1000./f;
-    f*=1000000;
-    videoIncrement=(uint64_t)f;
 #define AUDIO_BUFFER_SIZE 48000*6*sizeof(float)
     uint8_t *audioBuffer=new uint8_t[AUDIO_BUFFER_SIZE];
 
 
     printf("[FLV]avg fps=%u\n",vStream->getAvgFps1000());
     AVRational *scale=&(video_st->codec->time_base);
+    initUI("Saving Flv file..");
     while(true==vStream->getPacket(&len, buffer, bufSize,&pts,&dts,&flags))
     {
 	AVPacket pkt;
@@ -327,6 +324,11 @@
             {
                 lastVideoDts=dts;
             }
+            if(false==updateUI(lastVideoDts))
+            {
+                result=false;
+                goto abt;
+             }
 #define RESCALE(x) x=rescaleLavPts(x,scale);
 
             dts=lastVideoDts/1000;
@@ -394,10 +396,12 @@
             }
 
     }
+abt:
+    closeUI();
     delete [] buffer;
     delete [] audioBuffer;
     printf("[FLV] Wrote %d frames, nb audio streams %d\n",written,nbAStreams);
-    return true;
+    return result;
 }
 /**
     \fn close

Modified: branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerRaw/muxerRaw.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerRaw/muxerRaw.cpp	2009-07-26 17:14:16 UTC (rev 5159)
+++ branches/avidemux_2.6_branch_mean/avidemux_plugins/ADM_muxers/muxerRaw/muxerRaw.cpp	2009-07-26 18:38:44 UTC (rev 5160)
@@ -78,29 +78,29 @@
     uint64_t pts,dts,rawDts;
     uint64_t lastVideoDts=0;
     int written=0;
-    uint64_t videoDuration=vStream->getVideoDuration();
+    bool result=true;
 
-    encoding=createWorking("Saving raw video");
+    initUI("Saving raw video");
     while(true==vStream->getPacket(&len, buffer, bufSize,&pts,&dts,&flags))
     {
-            float p=0.5;
-            if(videoDuration && dts!=ADM_NO_PTS)
-                    p=dts/videoDuration;
-            p=p*100;
-            encoding->update((uint32_t)p);
-            if(!encoding->isAlive()) 
-            {
-                break;
-            }
+        if(dts==ADM_NO_PTS)
+            dts=lastVideoDts+videoIncrement;
+        if(updateUI(dts)==false)
+        {
+            result=false;
+            goto abt;
+        }
         fwrite(buffer,len,1,file);
         written++;
 
     }
+abt:
+    closeUI();
     delete [] buffer;
     fclose(file);
     file=NULL;
     printf("[RAW] Wrote %d frames \n",written);
-    return true;
+    return result;
 }
 /**
     \fn close




More information about the Avidemux-svn-commit mailing list