Changes of Revision 46

avidemux3.changes Changed
x
 
1
@@ -1,4 +1,56 @@
2
 -------------------------------------------------------------------
3
+Sun Aug 18 22:41:51 UTC 2019 - enzokiel@kabelmail.de
4
+
5
+- Update to version 2.7.4
6
+  + New Feature:Detect and warn when cut points in H.264 video
7
+    streams may result in playback issues despite being on keyframes
8
+  + FFmpeg:Update to the 4.1.4 release
9
+  + Core:Fix MSVC++ builds do not run when the path to user
10
+    directory contains non-ASCII characters
11
+  + Decoder:Fix DXVA2 HW accelerated decoding on Windows 7
12
+  + Decoder:Fix DXVA2 HW accelerated decoding stops sometimes on
13
+    cuts
14
+  + Decoder:Enable HW accelerated decoding of 8-bit HEVC for recent
15
+    versions of Intel graphics driver on Windows
16
+  + Encoder:Fix regression with saved x264 and x265 profiles not
17
+    found (MSVC++ only)
18
+  + Demuxer:Dynamically load VapourSynth Script library to avoid
19
+    error messages on Windows if VapourSynth is not found
20
+  + Demuxer:Provide correct average audio bitrate in the Mp4
21
+    demuxer if the exact value for the particular codec is unknown
22
+  + Demuxer:Fix crash loading MP4 file with number of audio tracks
23
+    exceeding the max supported
24
+  + Demuxer:Support audio tracks in fragmented MP4 files (the
25
+    variety with empty moov only)
26
+  + Demuxer:Support E-AC3 audio tracks in MP4 files
27
+  + Demuxer:Fix ASF demuxer still broken by chance with MSVC++
28
+    only, the fix relevant for all platforms
29
+  + Demuxer:Support more varieties of BMP images
30
+  + Muxer:Optimize output of the Mp4 muxer for streaming on
31
+    Windows too
32
+  + Muxer:Add option to the Mp4 muxer to output fragmented MP4
33
+    files
34
+  + Muxer:Label HEVC video in Mp4 in a way compatible with
35
+    QuickTime on macOS
36
+  + Filter:Fix assembly in Yadif deinterlacer with MSVC++
37
+  + UI:Enable automatic application scaling on Windows for recent
38
+    Qt versions
39
+  + UI:Fix silent mode, automatically confirm dialogs instead of
40
+    choosing the default option
41
+  + Audio:Support WMAPRO audio codec for decoding
42
+  + Audio:Support AAC with signal band replication (SBR) in
43
+    external audio tracks
44
+  + Audio:Fix saving AAC audio tracks with SBR to a file
45
+  + Audio:Improve resilience to false positives when probing
46
+    external audio files for AAC
47
+  + Miscellaneous:Fix crash with OpenGL or DXVA2 video output in 32
48
+    bits Avidemux on Windows (better late than never)
49
+  + Miscellaneous:Fix regressed handling of empty frames in MPEG-4
50
+    and FRAPS video streams
51
+  + Miscellaneous:Numerous other fixes and polish
52
+- Removed avidemux-cmake-permissions.patch, fixed upstream.
53
+
54
+-------------------------------------------------------------------
55
 Fri Mar 22 22:41:51 UTC 2019 - enzokiel@kabelmail.de
56
 
57
 - Update to version 2.7.3
58
avidemux3.spec Changed
26
 
1
@@ -22,7 +22,7 @@
2
 
3
 Name:           avidemux3
4
 Summary:        Graphical video editing and transcoding tool
5
-Version:        2.7.3
6
+Version:        2.7.4
7
 Release:        1
8
 Url:            http://avidemux.sourceforge.net/
9
 ExclusiveArch:  %ix86 x86_64
10
@@ -33,7 +33,6 @@
11
 Patch3:         avidemux-x265_plugins.patch
12
 Patch4:         avidemux-package_version.patch
13
 Patch5:         avidemux-bootStrap.patch
14
-Patch6:         avidemux-cmake-permissions.patch
15
 Patch7:         avidemux-desktop-file.patch
16
 Patch8:         avidemux-backport_Fix_threads_setup.patch
17
 License:        GPL-2.0
18
@@ -192,7 +191,6 @@
19
 %patch3 -p0
20
 %patch4 -p1
21
 %patch5 -p0
22
-%patch6 -p0
23
 %patch7 -p0
24
 %patch8 -p0 -R
25
 chmod 755 bootStrap.bash
26
avidemux-cmake-permissions.patch Deleted
13
 
1
@@ -1,11 +0,0 @@
2
---- cmake/admInstallDir.cmake.orig 2016-08-18 21:32:46.913427074 +0200
3
-+++ cmake/admInstallDir.cmake  2016-08-18 21:32:46.689431102 +0200
4
-@@ -55,7 +55,7 @@
5
- MACRO (ADM_INSTALL_LIB_FILES files)
6
-         INSTALL(FILES ${files} 
7
-                         DESTINATION ${AVIDEMUX_LIB_DIR}
8
--                        PERMISSIONS WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE
9
-+                        PERMISSIONS WORLD_READ WORLD_EXECUTE GROUP_READ GROUP_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE
10
-                         COMPONENT  runtime
11
-                 )
12
- ENDMACRO (ADM_INSTALL_LIB_FILES)
13
avidemux-package_version.patch Changed
96
 
1
@@ -1,6 +1,6 @@
2
-diff -uNr avidemux_2.7.2/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp avidemux_2.7.2.new/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp
3
---- avidemux_2.7.2/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp 2019-03-16 11:52:17.881954253 +0100
4
-+++ avidemux_2.7.2.new/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp 2019-03-16 11:56:10.833191154 +0100
5
+diff -uNr avidemux_2.7.4/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp avidemux_2.7.4.new/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp
6
+--- avidemux_2.7.4/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp 2019-08-18 16:55:06.191443864 +0200
7
++++ avidemux_2.7.4.new/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp 2019-08-18 17:02:34.575044048 +0200
8
 @@ -143,7 +143,7 @@
9
      QString referenceFile = QCoreApplication::applicationDirPath() + "/help/" + ((FileAction*)sender())->filePath();
10
  #else
11
@@ -10,9 +10,9 @@
12
  #endif
13
  
14
      QDesktopServices::openUrl(QUrl("file:///" + referenceFile, QUrl::TolerantMode));
15
-diff -uNr avidemux_2.7.2/avidemux_core/ADM_core/src/ADM_folder_linux.cpp avidemux_2.7.2.new/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
16
---- avidemux_2.7.2/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2019-03-16 11:52:17.853954826 +0100
17
-+++ avidemux_2.7.2.new/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2019-03-16 11:56:07.877251594 +0100
18
+diff -uNr avidemux_2.7.4/avidemux_core/ADM_core/src/ADM_folder_linux.cpp avidemux_2.7.4.new/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
19
+--- avidemux_2.7.4/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2019-08-18 16:55:06.139443411 +0200
20
++++ avidemux_2.7.4.new/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2019-08-18 17:02:31.303019793 +0200
21
 @@ -103,14 +103,14 @@
22
      if(isPortable)
23
      {
24
@@ -30,7 +30,7 @@
25
          ADM_i18nDir=std::string(ppath);
26
          delete [] ppath;
27
          ppath=NULL;
28
-@@ -143,7 +143,7 @@
29
+@@ -142,7 +142,7 @@
30
      strcpy(ADM_basedir, homeEnv);
31
      AddSeparator(ADM_basedir);
32
  
33
@@ -39,9 +39,9 @@
34
  
35
      strcat(ADM_basedir, ADM_DIR_NAME);
36
      strcat(ADM_basedir, ADM_SEPARATOR);
37
-diff -uNr avidemux_2.7.2/avidemux_core/ADM_core/src/ADM_folder_mac.cpp avidemux_2.7.2.new/avidemux_core/ADM_core/src/ADM_folder_mac.cpp
38
---- avidemux_2.7.2/avidemux_core/ADM_core/src/ADM_folder_mac.cpp   2019-03-16 11:52:17.853954826 +0100
39
-+++ avidemux_2.7.2.new/avidemux_core/ADM_core/src/ADM_folder_mac.cpp   2019-03-16 11:56:07.877251594 +0100
40
+diff -uNr avidemux_2.7.4/avidemux_core/ADM_core/src/ADM_folder_mac.cpp avidemux_2.7.4.new/avidemux_core/ADM_core/src/ADM_folder_mac.cpp
41
+--- avidemux_2.7.4/avidemux_core/ADM_core/src/ADM_folder_mac.cpp   2019-08-18 16:55:06.139443411 +0200
42
++++ avidemux_2.7.4.new/avidemux_core/ADM_core/src/ADM_folder_mac.cpp   2019-08-18 17:02:31.307019824 +0200
43
 @@ -124,7 +124,7 @@
44
      strcpy(ADM_basedir, homeEnv);
45
      AddSeparator(ADM_basedir);
46
@@ -63,9 +63,9 @@
47
  #endif
48
      std::string r=std::string(ppath);
49
      delete [] ppath;
50
-diff -uNr avidemux_2.7.2/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp avidemux_2.7.2.new/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp
51
---- avidemux_2.7.2/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp  2019-03-16 11:52:17.737957198 +0100
52
-+++ avidemux_2.7.2.new/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp  2019-03-16 11:56:04.405322583 +0100
53
+diff -uNr avidemux_2.7.4/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp avidemux_2.7.4.new/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp
54
+--- avidemux_2.7.4/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp  2019-08-18 16:55:05.887441210 +0200
55
++++ avidemux_2.7.4.new/avidemux_plugins/ADM_scriptEngines/tinyPy/src/PythonEngine.cpp  2019-08-18 17:02:27.818993969 +0200
56
 @@ -265,7 +265,7 @@
57
        this->callEventHandlers(IScriptEngine::Information, NULL, -1,
58
            (string("Executing ") + string(name) + string("...")).c_str());
59
@@ -75,9 +75,9 @@
60
  
61
        this->callEventHandlers(IScriptEngine::Information, NULL, -1, "Done");
62
  
63
-diff -uNr avidemux_2.7.2/cmake/se_plugin.cmake avidemux_2.7.2.new/cmake/se_plugin.cmake
64
---- avidemux_2.7.2/cmake/se_plugin.cmake   2019-03-16 11:52:17.401964068 +0100
65
-+++ avidemux_2.7.2.new/cmake/se_plugin.cmake   2019-03-16 11:56:12.493157213 +0100
66
+diff -uNr avidemux_2.7.4/cmake/se_plugin.cmake avidemux_2.7.4.new/cmake/se_plugin.cmake
67
+--- avidemux_2.7.4/cmake/se_plugin.cmake   2019-08-18 16:55:05.295436042 +0200
68
++++ avidemux_2.7.4.new/cmake/se_plugin.cmake   2019-08-18 17:02:36.735060059 +0200
69
 @@ -16,7 +16,7 @@
70
  if (WIN32)
71
      set(helpDir "${CMAKE_INSTALL_PREFIX}/help/${_engineName}")
72
@@ -87,17 +87,17 @@
73
  endif (WIN32)
74
  
75
      install(DIRECTORY "${_sourceDirectory}" DESTINATION "${helpDir}" COMPONENT plugins)
76
-diff -uNr avidemux_2.7.2/cmake/sql/update.sh avidemux_2.7.2.new/cmake/sql/update.sh
77
---- avidemux_2.7.2/cmake/sql/update.sh 2019-03-16 11:52:17.921953435 +0100
78
-+++ avidemux_2.7.2.new/cmake/sql/update.sh 2019-03-16 11:56:12.229162611 +0100
79
+diff -uNr avidemux_2.7.4/cmake/sql/update.sh avidemux_2.7.4.new/cmake/sql/update.sh
80
+--- avidemux_2.7.4/cmake/sql/update.sh 2019-08-18 16:55:06.235444248 +0200
81
++++ avidemux_2.7.4.new/cmake/sql/update.sh 2019-08-18 17:02:36.499058309 +0200
82
 @@ -1,3 +1,3 @@
83
 -sqlite3 ~/.avidemux6/jobs.sql .d > dump
84
 +sqlite3 ~/.avidemux3/jobs.sql .d > dump
85
  #sql2class -sqlite -global -license -wrapped  -lib $PWD dump
86
  sql2class -sqlite -build -global -prefix $PWD -lib sqlJobs -namespace db -overwrite dump
87
-diff -uNr avidemux_2.7.2/cmake/Ts.cmake avidemux_2.7.2.new/cmake/Ts.cmake
88
---- avidemux_2.7.2/cmake/Ts.cmake  2019-03-16 11:52:17.393964231 +0100
89
-+++ avidemux_2.7.2.new/cmake/Ts.cmake  2019-03-16 11:56:12.265161875 +0100
90
+diff -uNr avidemux_2.7.4/cmake/Ts.cmake avidemux_2.7.4.new/cmake/Ts.cmake
91
+--- avidemux_2.7.4/cmake/Ts.cmake  2019-08-18 16:55:05.283435938 +0200
92
++++ avidemux_2.7.4.new/cmake/Ts.cmake  2019-08-18 17:02:36.523058487 +0200
93
 @@ -28,7 +28,7 @@
94
          IF(WIN32)
95
                  SET(i18dir "${CMAKE_INSTALL_PREFIX}/${BIN_DIR}/${QT_EXTENSION}/i18n")
96
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/ffmpeg-4.1.1.tar.bz2 Deleted
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif_asm.c Deleted
201
 
1
@@ -1,232 +0,0 @@
2
-#include <stdlib.h>
3
-#include <inttypes.h>
4
-
5
-#include "ADM_default.h"
6
-
7
-
8
-#if defined( ADM_CPU_X86) && !defined(_MSC_VER)
9
-        #define CAN_DO_INLINE_X86_ASM
10
-#endif
11
-
12
-
13
-#ifdef CAN_DO_INLINE_X86_ASM
14
-#ifdef ADM_CPU_64BIT
15
-typedef int64_t x86_reg;
16
-#else
17
-typedef int32_t x86_reg;
18
-#endif
19
-
20
-#define LOAD4(mem,dst) \
21
-            "movd      "mem", "#dst" \n\t"\
22
-            "punpcklbw %%mm7, "#dst" \n\t"
23
-
24
-#define PABS(tmp,dst) \
25
-            "pxor     "#tmp", "#tmp" \n\t"\
26
-            "psubw    "#dst", "#tmp" \n\t"\
27
-            "pmaxsw   "#tmp", "#dst" \n\t"
28
-
29
-#define CHECK(pj,mj) \
30
-            "movq "#pj"(%[cur],%[mrefs]), %%mm2 \n\t" /* cur[x-refs-1+j] */\
31
-            "movq "#mj"(%[cur],%[prefs]), %%mm3 \n\t" /* cur[x+refs-1-j] */\
32
-            "movq      %%mm2, %%mm4 \n\t"\
33
-            "movq      %%mm2, %%mm5 \n\t"\
34
-            "pxor      %%mm3, %%mm4 \n\t"\
35
-            "pavgb     %%mm3, %%mm5 \n\t"\
36
-            "pand     %[pb1], %%mm4 \n\t"\
37
-            "psubusb   %%mm4, %%mm5 \n\t"\
38
-            "psrlq     $8,    %%mm5 \n\t"\
39
-            "punpcklbw %%mm7, %%mm5 \n\t" /* (cur[x-refs+j] + cur[x+refs-j])>>1 */\
40
-            "movq      %%mm2, %%mm4 \n\t"\
41
-            "psubusb   %%mm3, %%mm2 \n\t"\
42
-            "psubusb   %%mm4, %%mm3 \n\t"\
43
-            "pmaxub    %%mm3, %%mm2 \n\t"\
44
-            "movq      %%mm2, %%mm3 \n\t"\
45
-            "movq      %%mm2, %%mm4 \n\t" /* ABS(cur[x-refs-1+j] - cur[x+refs-1-j]) */\
46
-            "psrlq      $8,   %%mm3 \n\t" /* ABS(cur[x-refs  +j] - cur[x+refs  -j]) */\
47
-            "psrlq     $16,   %%mm4 \n\t" /* ABS(cur[x-refs+1+j] - cur[x+refs+1-j]) */\
48
-            "punpcklbw %%mm7, %%mm2 \n\t"\
49
-            "punpcklbw %%mm7, %%mm3 \n\t"\
50
-            "punpcklbw %%mm7, %%mm4 \n\t"\
51
-            "paddw     %%mm3, %%mm2 \n\t"\
52
-            "paddw     %%mm4, %%mm2 \n\t" /* score */
53
-
54
-#define CHECK1 \
55
-            "movq      %%mm0, %%mm3 \n\t"\
56
-            "pcmpgtw   %%mm2, %%mm3 \n\t" /* if(score < spatial_score) */\
57
-            "pminsw    %%mm2, %%mm0 \n\t" /* spatial_score= score; */\
58
-            "movq      %%mm3, %%mm6 \n\t"\
59
-            "pand      %%mm3, %%mm5 \n\t"\
60
-            "pandn     %%mm1, %%mm3 \n\t"\
61
-            "por       %%mm5, %%mm3 \n\t"\
62
-            "movq      %%mm3, %%mm1 \n\t" /* spatial_pred= (cur[x-refs+j] + cur[x+refs-j])>>1; */
63
-
64
-#define CHECK2 /* pretend not to have checked dir=2 if dir=1 was bad.\
65
-                  hurts both quality and speed, but matches the C version. */\
66
-            "paddw    %[pw1], %%mm6 \n\t"\
67
-            "psllw     $14,   %%mm6 \n\t"\
68
-            "paddsw    %%mm6, %%mm2 \n\t"\
69
-            "movq      %%mm0, %%mm3 \n\t"\
70
-            "pcmpgtw   %%mm2, %%mm3 \n\t"\
71
-            "pminsw    %%mm2, %%mm0 \n\t"\
72
-            "pand      %%mm3, %%mm5 \n\t"\
73
-            "pandn     %%mm1, %%mm3 \n\t"\
74
-            "por       %%mm5, %%mm3 \n\t"\
75
-            "movq      %%mm3, %%mm1 \n\t"
76
-
77
-void filter_line_mmx2(int mode, uint8_t *dst, const uint8_t *prev, const uint8_t *cur, const uint8_t *next, int w, int refs, int parity){
78
-    static const uint64_t pw_1 = 0x0001000100010001ULL;
79
-    static const uint64_t pb_1 = 0x0101010101010101ULL;
80
-//    const int mode = p->mode;
81
-    uint64_t tmp0, tmp1, tmp2, tmp3;
82
-    int x;
83
-
84
-#define FILTER\
85
-    for(x=0; x<w; x+=4){\
86
-        asm volatile(\
87
-            "pxor      %%mm7, %%mm7 \n\t"\
88
-            LOAD4("(%[cur],%[mrefs])", %%mm0) /* c = cur[x-refs] */\
89
-            LOAD4("(%[cur],%[prefs])", %%mm1) /* e = cur[x+refs] */\
90
-            LOAD4("(%["prev2"])", %%mm2) /* prev2[x] */\
91
-            LOAD4("(%["next2"])", %%mm3) /* next2[x] */\
92
-            "movq      %%mm3, %%mm4 \n\t"\
93
-            "paddw     %%mm2, %%mm3 \n\t"\
94
-            "psraw     $1,    %%mm3 \n\t" /* d = (prev2[x] + next2[x])>>1 */\
95
-            "movq      %%mm0, %[tmp0] \n\t" /* c */\
96
-            "movq      %%mm3, %[tmp1] \n\t" /* d */\
97
-            "movq      %%mm1, %[tmp2] \n\t" /* e */\
98
-            "psubw     %%mm4, %%mm2 \n\t"\
99
-            PABS(      %%mm4, %%mm2) /* temporal_diff0 */\
100
-            LOAD4("(%[prev],%[mrefs])", %%mm3) /* prev[x-refs] */\
101
-            LOAD4("(%[prev],%[prefs])", %%mm4) /* prev[x+refs] */\
102
-            "psubw     %%mm0, %%mm3 \n\t"\
103
-            "psubw     %%mm1, %%mm4 \n\t"\
104
-            PABS(      %%mm5, %%mm3)\
105
-            PABS(      %%mm5, %%mm4)\
106
-            "paddw     %%mm4, %%mm3 \n\t" /* temporal_diff1 */\
107
-            "psrlw     $1,    %%mm2 \n\t"\
108
-            "psrlw     $1,    %%mm3 \n\t"\
109
-            "pmaxsw    %%mm3, %%mm2 \n\t"\
110
-            LOAD4("(%[next],%[mrefs])", %%mm3) /* next[x-refs] */\
111
-            LOAD4("(%[next],%[prefs])", %%mm4) /* next[x+refs] */\
112
-            "psubw     %%mm0, %%mm3 \n\t"\
113
-            "psubw     %%mm1, %%mm4 \n\t"\
114
-            PABS(      %%mm5, %%mm3)\
115
-            PABS(      %%mm5, %%mm4)\
116
-            "paddw     %%mm4, %%mm3 \n\t" /* temporal_diff2 */\
117
-            "psrlw     $1,    %%mm3 \n\t"\
118
-            "pmaxsw    %%mm3, %%mm2 \n\t"\
119
-            "movq      %%mm2, %[tmp3] \n\t" /* diff */\
120
-\
121
-            "paddw     %%mm0, %%mm1 \n\t"\
122
-            "paddw     %%mm0, %%mm0 \n\t"\
123
-            "psubw     %%mm1, %%mm0 \n\t"\
124
-            "psrlw     $1,    %%mm1 \n\t" /* spatial_pred */\
125
-            PABS(      %%mm2, %%mm0)      /* ABS(c-e) */\
126
-\
127
-            "movq -1(%[cur],%[mrefs]), %%mm2 \n\t" /* cur[x-refs-1] */\
128
-            "movq -1(%[cur],%[prefs]), %%mm3 \n\t" /* cur[x+refs-1] */\
129
-            "movq      %%mm2, %%mm4 \n\t"\
130
-            "psubusb   %%mm3, %%mm2 \n\t"\
131
-            "psubusb   %%mm4, %%mm3 \n\t"\
132
-            "pmaxub    %%mm3, %%mm2 \n\t"\
133
-            "pshufw $9,%%mm2, %%mm3 \n\t"\
134
-            "punpcklbw %%mm7, %%mm2 \n\t" /* ABS(cur[x-refs-1] - cur[x+refs-1]) */\
135
-            "punpcklbw %%mm7, %%mm3 \n\t" /* ABS(cur[x-refs+1] - cur[x+refs+1]) */\
136
-            "paddw     %%mm2, %%mm0 \n\t"\
137
-            "paddw     %%mm3, %%mm0 \n\t"\
138
-            "psubw    %[pw1], %%mm0 \n\t" /* spatial_score */\
139
-\
140
-            CHECK(-2,0)\
141
-            CHECK1\
142
-            CHECK(-3,1)\
143
-            CHECK2\
144
-            CHECK(0,-2)\
145
-            CHECK1\
146
-            CHECK(1,-3)\
147
-            CHECK2\
148
-\
149
-            /* if(p->mode<2) ... */\
150
-            "movq    %[tmp3], %%mm6 \n\t" /* diff */\
151
-            "cmpl      $2, %[mode] \n\t"\
152
-            "jge       1f \n\t"\
153
-            LOAD4("(%["prev2"],%[mrefs],2)", %%mm2) /* prev2[x-2*refs] */\
154
-            LOAD4("(%["next2"],%[mrefs],2)", %%mm4) /* next2[x-2*refs] */\
155
-            LOAD4("(%["prev2"],%[prefs],2)", %%mm3) /* prev2[x+2*refs] */\
156
-            LOAD4("(%["next2"],%[prefs],2)", %%mm5) /* next2[x+2*refs] */\
157
-            "paddw     %%mm4, %%mm2 \n\t"\
158
-            "paddw     %%mm5, %%mm3 \n\t"\
159
-            "psrlw     $1,    %%mm2 \n\t" /* b */\
160
-            "psrlw     $1,    %%mm3 \n\t" /* f */\
161
-            "movq    %[tmp0], %%mm4 \n\t" /* c */\
162
-            "movq    %[tmp1], %%mm5 \n\t" /* d */\
163
-            "movq    %[tmp2], %%mm7 \n\t" /* e */\
164
-            "psubw     %%mm4, %%mm2 \n\t" /* b-c */\
165
-            "psubw     %%mm7, %%mm3 \n\t" /* f-e */\
166
-            "movq      %%mm5, %%mm0 \n\t"\
167
-            "psubw     %%mm4, %%mm5 \n\t" /* d-c */\
168
-            "psubw     %%mm7, %%mm0 \n\t" /* d-e */\
169
-            "movq      %%mm2, %%mm4 \n\t"\
170
-            "pminsw    %%mm3, %%mm2 \n\t"\
171
-            "pmaxsw    %%mm4, %%mm3 \n\t"\
172
-            "pmaxsw    %%mm5, %%mm2 \n\t"\
173
-            "pminsw    %%mm5, %%mm3 \n\t"\
174
-            "pmaxsw    %%mm0, %%mm2 \n\t" /* max */\
175
-            "pminsw    %%mm0, %%mm3 \n\t" /* min */\
176
-            "pxor      %%mm4, %%mm4 \n\t"\
177
-            "pmaxsw    %%mm3, %%mm6 \n\t"\
178
-            "psubw     %%mm2, %%mm4 \n\t" /* -max */\
179
-            "pmaxsw    %%mm4, %%mm6 \n\t" /* diff= MAX3(diff, min, -max); */\
180
-            "1: \n\t"\
181
-\
182
-            "movq    %[tmp1], %%mm2 \n\t" /* d */\
183
-            "movq      %%mm2, %%mm3 \n\t"\
184
-            "psubw     %%mm6, %%mm2 \n\t" /* d-diff */\
185
-            "paddw     %%mm6, %%mm3 \n\t" /* d+diff */\
186
-            "pmaxsw    %%mm2, %%mm1 \n\t"\
187
-            "pminsw    %%mm3, %%mm1 \n\t" /* d = clip(spatial_pred, d-diff, d+diff); */\
188
-            "packuswb  %%mm1, %%mm1 \n\t"\
189
-\
190
-            :[tmp0]"=m"(tmp0),\
191
-             [tmp1]"=m"(tmp1),\
192
-             [tmp2]"=m"(tmp2),\
193
-             [tmp3]"=m"(tmp3)\
194
-            :[prev] "r"(prev),\
195
-             [cur]  "r"(cur),\
196
-             [next] "r"(next),\
197
-             [prefs]"r"((x86_reg)refs),\
198
-             [mrefs]"r"((x86_reg)-refs),\
199
-             [pw1]  "m"(pw_1),\
200
-             [pb1]  "m"(pb_1),\
201
avidemux_2.7.3.tar.gz/appImage/avidemux.desktop -> avidemux_2.7.4.tar.gz/appImage/avidemux.desktop Changed
6
 
1
@@ -2,3 +2,4 @@
2
 Name=AVIDEMUX
3
 Exec=avidemux3_portable
4
 Icon=avidemux.png
5
+Type=Application
6
avidemux_2.7.3.tar.gz/avidemux/cli/ADM_userInterfaces/ADM_dialog/alert_none.cpp -> avidemux_2.7.4.tar.gz/avidemux/cli/ADM_userInterfaces/ADM_dialog/alert_none.cpp Changed
201
 
1
@@ -3,7 +3,6 @@
2
 #include "config.h"
3
 
4
 #include "ADM_default.h"
5
-#include "prefs.h"
6
 #include "DIA_coreToolkit.h"
7
 #include "DIA_coreUI_internal.h"
8
 
9
@@ -11,24 +10,24 @@
10
 static int beQuiet=0;
11
 static void boxStart(void)
12
 {
13
-  for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"*");
14
-  fprintf(stderr,"\n"); 
15
+    for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"*");
16
+    fprintf(stderr,"\n");
17
 }
18
 static void boxEnd(void)
19
 {
20
-  for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"*");
21
-  fprintf(stderr,"\n"); 
22
+    for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"*");
23
+    fprintf(stderr,"\n");
24
 }
25
 static void boxAdd(const char *str)
26
 {
27
-  int l=strlen(str);
28
-  fprintf(stderr, "* %s",str);
29
-  if(l+4<BOX_SIZE)
30
-  {
31
-    l=BOX_SIZE-l-4;
32
-      for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"");
33
-  }
34
-  fprintf(stderr," *\n"); 
35
+    int l=strlen(str);
36
+    fprintf(stderr, "* %s",str);
37
+    if(l+4<BOX_SIZE)
38
+    {
39
+        l=BOX_SIZE-l-4;
40
+        for(int i=0;i<BOX_SIZE;i++) fprintf(stderr,"");
41
+    }
42
+    fprintf(stderr," *\n");
43
 }
44
 
45
 
46
@@ -37,167 +36,147 @@
47
 extern DIA_workingBase    *createWorking(const char *title);
48
 extern DIA_encodingBase   *createEncoding(uint64_t duration);
49
 extern DIA_audioTrackBase *createAudioTrack( PoolOfAudioTracks *pool, ActiveAudioTracks *active );
50
-void            GUI_Info_HIG(const ADM_LOG_LEVEL level,const char *primary, const char *secondary_format)
51
+
52
+void GUI_Info_HIG(const ADM_LOG_LEVEL level,const char *primary, const char *secondary_format)
53
 {
54
-  uint32_t msglvl=2;
55
+    boxStart();
56
+    boxAdd("Info");
57
+    boxAdd(primary);
58
 
59
-        prefs->get(MESSAGE_LEVEL,&msglvl);
60
+    if(!secondary_format)
61
+    {
62
+        boxEnd();
63
+        return;
64
+    }
65
 
66
-        boxStart();
67
-        boxAdd("Info");
68
-        boxAdd(primary);   
69
-        
70
-        if(! secondary_format)
71
-        {
72
-                boxEnd();
73
-                return;
74
-        }
75
+    boxAdd(secondary_format);
76
+    boxEnd();
77
+}
78
 
79
+void GUI_Error_HIG(const char *primary, const char *secondary_format)
80
+{
81
+    boxStart();
82
+    boxAdd("Error");
83
+    boxAdd(primary);
84
+    if(!secondary_format)
85
+    {
86
+        boxEnd();
87
+        return;
88
+    }else
89
+    {
90
         boxAdd(secondary_format);
91
         boxEnd();
92
-        
93
+    }
94
 }
95
 
96
-void            GUI_Error_HIG(const char *primary, const char *secondary_format)
97
-{
98
-        boxStart();
99
-        boxAdd("Error");
100
-        boxAdd(primary);   
101
-        if(!secondary_format)
102
-        {
103
-                boxEnd();
104
-                return;
105
-        }else
106
-        {
107
-          boxAdd(secondary_format);
108
-          boxEnd();
109
-        }
110
-}
111
-int             GUI_Confirmation_HIG(const char *button_confirm, const char *primary, const char *secondary_format)
112
+int GUI_Confirmation_HIG(const char *button_confirm, const char *primary, const char *secondary_format)
113
 {
114
-   uint32_t msglvl=2;
115
-
116
-        prefs->get(MESSAGE_LEVEL,&msglvl);
117
-
118
-        boxStart();
119
-        boxAdd("Question");
120
+    boxStart();
121
+    boxAdd("Question");
122
 
123
-        boxAdd(button_confirm);
124
-        if(! secondary_format)
125
-        {
126
-                
127
-                boxEnd();
128
-        }
129
-        else
130
-        {
131
-            boxAdd(secondary_format);
132
-            boxEnd();
133
-        }
134
-        if (beQuiet)
135
-        {
136
-          boxAdd("--> First one\n");
137
-          return 0;
138
-        }
139
-        else
140
+    boxAdd(button_confirm);
141
+    if(!secondary_format)
142
+    {
143
+        boxEnd();
144
+    }else
145
+    {
146
+        boxAdd(secondary_format);
147
+        boxEnd();
148
+    }
149
+    if (beQuiet)
150
+    {
151
+        boxAdd("--> Automatically confirmed\n");
152
+        return 1;
153
+    }else
154
+    {
155
+        int x;
156
+        while(1)
157
         {
158
-          int x;
159
-          while(1)
160
-          {
161
             printf("Are you sure (Y/y or N/n ):\n");
162
             x=tolower(getchar());
163
             if(x=='y') return 1;
164
             if(x=='n') return 0;
165
-          }
166
         }
167
-        return 0; 
168
+    }
169
+    return 0;
170
 }
171
 
172
-int             GUI_YesNo(const char *primary, const char *secondary_format)
173
+int GUI_YesNo(const char *primary, const char *secondary_format)
174
 {
175
-   uint32_t msglvl=2;
176
+    boxStart();
177
+    boxAdd("Question");
178
+    boxAdd(primary);
179
 
180
-        prefs->get(MESSAGE_LEVEL,&msglvl);
181
-
182
-        boxStart();
183
-        boxAdd("Question");
184
-        boxAdd(primary);
185
-
186
-        
187
-        if(! secondary_format)
188
-        {
189
-                boxEnd();
190
-        }
191
-        else
192
-        {
193
-            boxAdd(secondary_format);
194
-            boxEnd();
195
-        }
196
-        if (beQuiet)
197
-        {
198
-          boxAdd("--> First one\n");
199
-          return 0;
200
-        }
201
avidemux_2.7.3.tar.gz/avidemux/common/ADM_audioCodec/src/ADM_codecpcm16.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_audioCodec/src/ADM_codecpcm16.cpp Changed
14
 
1
@@ -20,6 +20,12 @@
2
 
3
 ADM_AudiocodecWav::ADM_AudiocodecWav( uint32_t fourcc,const WAVHeader &info ) : ADM_Audiocodec(fourcc,info)
4
 {
5
+    channelMapping[0] = ADM_CH_FRONT_LEFT;
6
+    channelMapping[1] = ADM_CH_FRONT_RIGHT;
7
+    channelMapping[2] = ADM_CH_FRONT_CENTER;
8
+    channelMapping[3] = ADM_CH_REAR_LEFT;
9
+    channelMapping[4] = ADM_CH_REAR_RIGHT;
10
+    channelMapping[5] = ADM_CH_LFE;
11
     ADM_info("Creating not swapped wav decoder (PCM)\n");
12
 }
13
 ADM_AudiocodecWav::~ADM_AudiocodecWav()
14
avidemux_2.7.3.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_bridge.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_bridge.cpp Changed
10
 
1
@@ -78,8 +78,6 @@
2
       _startTimeUs-=_shiftUs;
3
     }else
4
     {
5
-      double nbSample;
6
-      
7
       _shiftUs-=_startTimeUs;
8
       _startTimeUs=0;
9
       double dNbSample=_shiftUs;
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_film2pal.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_film2pal.cpp Changed
10
 
1
@@ -55,7 +55,7 @@
2
 //___________________________________________
3
 uint32_t AUDMAudioFilterFilmChange::fill( uint32_t max, float * buffer,AUD_Status *status)
4
 {
5
-  uint32_t len,i,rendered;
6
+  uint32_t len;
7
   uint32_t chan=_wavHeader.channels;
8
   
9
   
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_normalize.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_audioFilter/src/audiofilter_normalize.cpp Changed
32
 
1
@@ -89,20 +89,15 @@
2
 {
3
 
4
 
5
-    uint32_t scanned = 0, ch = 0;
6
+    uint32_t scanned = 0;
7
     AUD_Status status;
8
     _ratio = 0;
9
 
10
-    uint32_t percent=0;
11
-    uint32_t current=0,llength=0;
12
     float *max=new float[_wavHeader.channels];
13
     _previous->rewind();
14
     ADMDolbyContext::DolbySkip(1); 
15
     ADM_info("Seeking for maximum value, that can take a while\n");
16
 
17
-    llength=_length ;
18
-    
19
-
20
       for(int i=0;i<_wavHeader.channels;i++) max[i]=0;
21
       while (1)
22
       {
23
@@ -175,7 +170,7 @@
24
 */
25
 uint32_t AUDMAudioFilterNormalize::fill( uint32_t max, float * buffer,AUD_Status *status)
26
 {
27
-    uint32_t rd, i, j,rd2;
28
+    uint32_t rd, i;
29
 
30
     *status=AUD_OK;
31
     if(!_scanned) preprocess();
32
avidemux_2.7.3.tar.gz/avidemux/common/ADM_commonUI/CMakeLists.txt -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_commonUI/CMakeLists.txt Changed
10
 
1
@@ -4,7 +4,7 @@
2
 DIA_audioFilter.cpp   
3
 DIA_gototime.cpp    
4
 DIA_postproc.cpp  
5
-DIA_bitrateHisto.cpp  
6
+#DIA_bitrateHisto.cpp
7
 DIA_prefs.cpp     
8
 DIA_builtin.cpp       
9
 DIA_jobs_save.cpp
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_commonUI/DIA_prefs.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_commonUI/DIA_prefs.cpp Changed
201
 
1
@@ -31,7 +31,9 @@
2
 extern void        AVDM_audioPref( void );
3
 extern const char* getNativeRendererDesc(int type);
4
 
5
-
6
+#if defined(USE_DXVA2) || defined(USE_VDPAU) || defined(USE_LIBVA) || defined(USE_VIDEOTOOLBOX)
7
+    #define HW_ACCELERATED_DECODING
8
+#endif
9
 
10
 uint8_t DIA_Preferences(void);
11
 
12
@@ -60,7 +62,6 @@
13
 bool     loadDefault=false;
14
 char     *alsaDevice=NULL;
15
 
16
-bool     balternate_mp3_tag=true;
17
 bool     lastReadDirAsTarget=false;
18
 bool     copyModeSanitizeDts=false;
19
 bool     altKeyboardShortcuts=false;
20
@@ -69,11 +70,18 @@
21
 uint32_t pp_type=3;
22
 uint32_t pp_value=5;
23
 
24
+uint32_t editor_cache_size=16;
25
+
26
+#ifdef USE_DXVA2
27
 bool     bdxva2=false;
28
+bool     bdxva2_override_version=false;
29
+bool     bdxva2_override_profile=false;
30
+#endif
31
 bool     bvdpau=false;
32
-bool     bxvba=false;
33
 bool     blibva=false;
34
+#ifdef USE_VIDEOTOOLBOX
35
 bool     bvideotoolbox=false;
36
+#endif
37
 bool     hzd,vzd,dring;
38
 bool     capsMMX,capsMMXEXT,caps3DNOW,caps3DNOWEXT,capsSSE,capsSSE2,capsSSE3,capsSSSE3,capsAll;
39
 bool     hasOpenGl=false;
40
@@ -140,22 +148,26 @@
41
         if( prefs->get(DEVICE_AUDIO_ALSA_DEVICE, &alsaDevice) != RC_OK )
42
                 alsaDevice = ADM_strdup("plughw:0,0");
43
 #endif
44
+        // Video cache
45
+        prefs->get(FEATURES_CACHE_SIZE,&editor_cache_size);
46
+#ifdef USE_DXVA2
47
         // dxva2
48
-        
49
-        prefs->get(FEATURES_DXVA2,&bdxva2);                
50
+        prefs->get(FEATURES_DXVA2,&bdxva2);
51
+        prefs->get(FEATURES_DXVA2_OVERRIDE_BLACKLIST_VERSION,&bdxva2_override_version);
52
+        prefs->get(FEATURES_DXVA2_OVERRIDE_BLACKLIST_PROFILE,&bdxva2_override_profile);
53
+#endif
54
+#ifdef USE_VDPAU
55
         // vdpau
56
         prefs->get(FEATURES_VDPAU,&bvdpau);
57
-        // xvba
58
-        prefs->get(FEATURES_XVBA,&bxvba);
59
+#endif
60
+#ifdef USE_LIBVA
61
         // libva
62
         prefs->get(FEATURES_LIBVA,&blibva);
63
-        // VideoToolbox
64
+#endif
65
 #ifdef USE_VIDEOTOOLBOX
66
+        // VideoToolbox
67
         prefs->get(FEATURES_VIDEOTOOLBOX,&bvideotoolbox);
68
 #endif
69
-        // Alternate mp3 tag (haali)
70
-        prefs->get(FEATURES_ALTERNATE_MP3_TAG,&balternate_mp3_tag);
71
-
72
         // Video renderer
73
         if(prefs->get(VIDEODEVICE,&render)!=RC_OK)
74
         {
75
@@ -215,18 +227,22 @@
76
         olddevice=newdevice=AVDM_getCurrentDevice();
77
         // Audio device
78
         /************************ Build diaelems ****************************************/
79
+#ifdef HW_ACCELERATED_DECODING
80
+    #if defined(USE_DXVA2)
81
         diaElemToggle useDxva2(&bdxva2,QT_TRANSLATE_NOOP("adm","Decode video using DXVA2 (windows)"));
82
+        diaElemToggle dxva2OverrideVersion(&bdxva2_override_version,QT_TRANSLATE_NOOP("adm","Ignore driver blacklist (Intel)"));
83
+        diaElemToggle dxva2OverrideProfile(&bdxva2_override_profile,QT_TRANSLATE_NOOP("adm","Ignore codec blacklist (Intel, HEVC 10bit)"));
84
+    #elif defined(USE_VIDEOTOOLBOX)
85
+        diaElemToggle useVideoToolbox(&bvideotoolbox,QT_TRANSLATE_NOOP("adm","Decode video using VideoToolbox (macOS)"));
86
+    #else
87
         diaElemToggle useVdpau(&bvdpau,QT_TRANSLATE_NOOP("adm","Decode video using VDPAU (NVIDIA)"));
88
-        diaElemToggle useXvba(&bxvba,QT_TRANSLATE_NOOP("adm","Decode video using XVBA (AMD)"));
89
         diaElemToggle useLibVA(&blibva,QT_TRANSLATE_NOOP("adm","Decode video using LIBVA (INTEL)"));
90
-#ifdef USE_VIDEOTOOLBOX
91
-        diaElemToggle useVideoToolbox(&bvideotoolbox,QT_TRANSLATE_NOOP("adm","Decode video using VideoToolbox (macOS)"));
92
-#endif
93
-        diaElemToggle useOpenGl(&hasOpenGl,QT_TRANSLATE_NOOP("adm","Enable openGl support"));
94
-#ifndef USE_VIDEOTOOLBOX
95
+    #endif
96
+    #ifndef USE_VIDEOTOOLBOX
97
         diaElemReadOnlyText hwAccelText(NULL,QT_TRANSLATE_NOOP("adm","If you use Hw decoding, it is better to use the matching display driver"),NULL);
98
+    #endif
99
 #endif
100
-
101
+        diaElemToggle useOpenGl(&hasOpenGl,QT_TRANSLATE_NOOP("adm","Enable openGl support"));
102
         diaElemToggle allowAnyMpeg(&mpeg_no_limit,QT_TRANSLATE_NOOP("adm","_Accept non-standard audio frequency for DVD"));
103
         diaElemToggle resetEncoder(&loadDefault,QT_TRANSLATE_NOOP("adm","_Revert to saved default output settings on video load"));
104
         diaElemToggle enableAltShortcuts(&altKeyboardShortcuts,QT_TRANSLATE_NOOP("adm","_Enable alternative keyboard shortcuts"));
105
@@ -286,10 +302,13 @@
106
         framePriority.swallow(&menuIndexPriority);
107
         framePriority.swallow(&menuPlaybackPriority);
108
 
109
-        diaElemToggle togTagMp3(&balternate_mp3_tag,QT_TRANSLATE_NOOP("adm","_Use alternative tag for MP3 in .mp4"));
110
         diaElemToggle useLastReadAsTarget(&lastReadDirAsTarget,QT_TRANSLATE_NOOP("adm","_Default to the directory of the last read file for saving"));
111
         diaElemToggle sanitizeDtsInCopyMode(&copyModeSanitizeDts,QT_TRANSLATE_NOOP("adm","_Sanitize decode time stamps (DTS) in copy mode"));
112
 
113
+        diaElemFrame frameCache(QT_TRANSLATE_NOOP("adm","Caching of decoded pictures"));
114
+        diaElemUInteger cacheSize(&editor_cache_size,QT_TRANSLATE_NOOP("adm","_Cache size:"),8,16);
115
+        frameCache.swallow(&cacheSize);
116
+
117
         diaMenuEntry videoMode[]={
118
                              {RENDER_GTK, getNativeRendererDesc(0), NULL}
119
 #ifdef USE_XV
120
@@ -301,10 +320,6 @@
121
 #ifdef USE_DXVA2
122
                              ,{RENDER_DXVA2,   QT_TRANSLATE_NOOP("adm","DXVA2 (best)"),NULL}
123
 #endif
124
-#ifdef USE_XVBA
125
-                             //,{RENDER_XVBA,   QT_TRANSLATE_NOOP("adm","XVBA (best)"),NULL}
126
-#endif
127
-
128
 #ifdef USE_OPENGL
129
                              ,{RENDER_QTOPENGL,   QT_TRANSLATE_NOOP("adm","OpenGL (best)"),NULL}
130
 #endif
131
@@ -439,7 +454,7 @@
132
 
133
 
134
         /* Output */
135
-        diaElem *diaOutput[]={&allowAnyMpeg,&togTagMp3,&sanitizeDtsInCopyMode,&useLastReadAsTarget};
136
+        diaElem *diaOutput[]={&allowAnyMpeg,&sanitizeDtsInCopyMode,&useLastReadAsTarget,&frameCache};
137
         diaElemTabs tabOutput(QT_TRANSLATE_NOOP("adm","Output"),4,(diaElem **)diaOutput);
138
 
139
         /* Audio */
140
@@ -479,12 +494,15 @@
141
 #endif
142
         diaElemTabs tabVideo(QT_TRANSLATE_NOOP("adm","Display"),sizeof(diaVideo)/sizeof(diaElem *),(diaElem **)diaVideo);
143
         /* HW accel */
144
-#ifdef USE_VIDEOTOOLBOX
145
+#ifdef USE_DXVA2
146
+        diaElem *diaHwDecoding[]={&useDxva2,&dxva2OverrideVersion,&dxva2OverrideProfile,&hwAccelText};
147
+        diaElemTabs tabHwDecoding(QT_TRANSLATE_NOOP("adm","HW Accel"),4,(diaElem **)diaHwDecoding);
148
+#elif defined(USE_VIDEOTOOLBOX)
149
         diaElem *diaHwDecoding[]={&useVideoToolbox};
150
         diaElemTabs tabHwDecoding(QT_TRANSLATE_NOOP("adm","HW Accel"),1,(diaElem **)diaHwDecoding);
151
-#else
152
-        diaElem *diaHwDecoding[]={&useVdpau,&useXvba,&useLibVA,&useDxva2,&hwAccelText};
153
-        diaElemTabs tabHwDecoding(QT_TRANSLATE_NOOP("adm","HW Accel"),5,(diaElem **)diaHwDecoding);
154
+#elif defined(HW_ACCELERATED_DECODING)
155
+        diaElem *diaHwDecoding[]={&useVdpau,&useLibVA,&hwAccelText};
156
+        diaElemTabs tabHwDecoding(QT_TRANSLATE_NOOP("adm","HW Accel"),3,(diaElem **)diaHwDecoding);
157
 #endif
158
 
159
         /* CPU tab */
160
@@ -502,24 +520,18 @@
161
         diaElemTabs tabAvisynth("Avisynth",2,(diaElem **)diaAvisynth);
162
 
163
         /* Global Glyph tab */
164
-
165
-
166
-                diaElemTabs *tabs[]={&tabUser,&tabOutput,&tabAudio,&tabVideo,
167
-                                &tabHwDecoding,  &tabCpu,&tabThreading, &tabAvisynth};
168
-                
169
-       void *factoryCookiez=diaFactoryRunTabsPrepare(QT_TRANSLATE_NOOP("adm","Preferences"),8,tabs);
170
-
171
+#ifdef HW_ACCELERATED_DECODING
172
+        diaElemTabs *tabs[]={&tabUser, &tabOutput, &tabAudio, &tabVideo, &tabHwDecoding, &tabCpu, &tabThreading, &tabAvisynth};
173
+        void *factoryCookiez=diaFactoryRunTabsPrepare(QT_TRANSLATE_NOOP("adm","Preferences"),8,tabs);
174
+#else
175
+        diaElemTabs *tabs[]={&tabUser, &tabOutput, &tabAudio, &tabVideo, &tabCpu, &tabThreading, &tabAvisynth};
176
+        void *factoryCookiez=diaFactoryRunTabsPrepare(QT_TRANSLATE_NOOP("adm","Preferences"),7,tabs);
177
+#endif
178
 // Now we can disable stuff if needed
179
-#ifndef USE_VIDEOTOOLBOX
180
-    #ifndef USE_DXVA2
181
-       useDxva2.enable(false);
182
-    #endif
183
+#if defined(HW_ACCELERATED_DECODING) && !defined(USE_VIDEOTOOLBOX) && !defined(USE_DXVA2)
184
     #ifndef USE_VDPAU
185
         useVdpau.enable(false);
186
     #endif
187
-    #ifndef USE_XVBA
188
-        useXvba.enable(false);
189
-    #endif
190
     #ifndef USE_LIBVA
191
         useLibVA.enable(false);
192
     #endif
193
@@ -600,7 +612,8 @@
194
             prefs->set(UPDATE_ENABLED,doAutoUpdate);
195
             // Video render
196
             prefs->set(VIDEODEVICE,render);
197
-
198
+            // Video cache
199
+            prefs->set(FEATURES_CACHE_SIZE, editor_cache_size);
200
             // number of threads
201
avidemux_2.7.3.tar.gz/avidemux/common/ADM_commonUI/myOwnMenu.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_commonUI/myOwnMenu.h Changed
196
 
1
@@ -27,123 +27,125 @@
2
     Action     event;
3
     const char *icon;
4
     const char *shortCut;
5
+    bool       translated; // If true, circumvent translator in buildMenu, the string is already translated.
6
+
7
 }MenuEntry;
8
 
9
 #ifdef MENU_DECLARE
10
 static const MenuEntry _myMenuFile[] = {
11
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Open"),               NULL,ACT_OPEN_VIDEO,       MKICON(fileopen), "Ctrl+O"},
12
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Append"),             NULL,ACT_APPEND_VIDEO     ,NULL,             "Ctrl+A"},
13
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save"),               NULL,ACT_SAVE_VIDEO       ,MKICON(filesaveas),"Ctrl+S"},
14
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Queue"),              NULL,ACT_SAVE_QUEUE       ,NULL              ,"Ctrl+U"},
15
-            {MENU_SUBMENU,QT_TRANSLATE_NOOP("adm","Save as Image"),     NULL,ACT_DUMMY    ,NULL,NULL},
16
-            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as BMP"),     NULL,ACT_SAVE_BMP ,NULL,"Ctrl+M"},
17
-            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as PNG"),     NULL,ACT_SAVE_PNG ,NULL,"Ctrl+P"},
18
-            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as JPEG"),    NULL,ACT_SAVE_JPG ,NULL,"Ctrl+E"},
19
-            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save Selection as JPEG"),NULL,ACT_SAVE_BUNCH_OF_JPG,NULL,NULL},
20
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Close"),              NULL,ACT_CLOSE          ,NULL,                "Ctrl+W"},
21
-            {MENU_SEPARATOR,QT_TRANSLATE_NOOP("adm","-"),               NULL,ACT_DUMMY             ,NULL,NULL},
22
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Information"),        NULL,ACT_VIDEO_PROPERTIES,                 MKICON(info),NULL},
23
-            {MENU_SEPARATOR,QT_TRANSLATE_NOOP("adm","-"),               NULL,ACT_DUMMY             ,NULL,NULL},
24
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Connect to avsproxy"),NULL,ACT_AVS_PROXY,NULL},
25
-            {MENU_SEPARATOR,QT_TRANSLATE_NOOP("adm","-"),               NULL,ACT_DUMMY             ,NULL,NULL},
26
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Quit"),               NULL,ACT_EXIT           ,NULL,"Ctrl+Q"}
27
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Open"),               NULL,ACT_OPEN_VIDEO,    MKICON(fileopen),"Ctrl+O",0},
28
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Append"),             NULL,ACT_APPEND_VIDEO,  NULL,"Ctrl+A",0},
29
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save"),               NULL,ACT_SAVE_VIDEO,    MKICON(filesaveas),"Ctrl+S",0},
30
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Queue"),              NULL,ACT_SAVE_QUEUE,    NULL,"Ctrl+U",0},
31
+            {MENU_SUBMENU,QT_TRANSLATE_NOOP("adm","Save as Image"),     NULL,ACT_DUMMY,         NULL,NULL,0},
32
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as BMP"),     NULL,ACT_SAVE_BMP,      NULL,"Ctrl+M",0},
33
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as PNG"),     NULL,ACT_SAVE_PNG,      NULL,"Ctrl+P",0},
34
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save as JPEG"),    NULL,ACT_SAVE_JPG,      NULL,"Ctrl+E",0},
35
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Save Selection as JPEG"),NULL,ACT_SAVE_BUNCH_OF_JPG,NULL,NULL,0},
36
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Close"),              NULL,ACT_CLOSE,         NULL,"Ctrl+W",0},
37
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
38
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Information"),        NULL,ACT_VIDEO_PROPERTIES, MKICON(info),NULL,0},
39
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
40
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Connect to avsproxy"),NULL,ACT_AVS_PROXY,NULL,0},
41
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
42
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Quit"),               NULL,ACT_EXIT,           NULL,"Ctrl+Q",0}
43
         };
44
 
45
 std::vector<MenuEntry> myMenuFile(_myMenuFile, _myMenuFile + sizeof(_myMenuFile) / sizeof(_myMenuFile[0]));
46
 
47
 static const MenuEntry _myMenuRecent[] = {
48
-            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL},
49
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
50
 #ifdef __APPLE__
51
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Clear recent items"), NULL,ACT_CLEAR_RECENT,NULL,"Ctrl+Shift+Backspace"}
52
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Clear recent items"), NULL,ACT_CLEAR_RECENT,  NULL,"Ctrl+Shift+Backspace",0}
53
 #else
54
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Clear recent items"), NULL,ACT_CLEAR_RECENT,NULL,"Ctrl+Shift+Delete"}
55
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Clear recent items"), NULL,ACT_CLEAR_RECENT,  NULL,"Ctrl+Shift+Delete",0}
56
 #endif
57
         };
58
 
59
 std::vector<MenuEntry> myMenuRecent(_myMenuRecent, _myMenuRecent + sizeof(_myMenuRecent) / sizeof(_myMenuRecent[0]));
60
 
61
 static const MenuEntry _myMenuEdit[] = {
62
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"),               NULL,ACT_Undo       ,NULL,"Ctrl+Z"},
63
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"),               NULL,ACT_Redo       ,NULL,"Ctrl+Y"},
64
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"),         NULL,ACT_ResetSegments,NULL,NULL},
65
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"),                NULL,ACT_Cut        ,NULL,"Ctrl+X"},
66
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"),               NULL,ACT_Copy       ,NULL,"Ctrl+C"},
67
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"),              NULL,ACT_Paste      ,NULL,"Ctrl+V"},
68
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Undo"),               NULL,ACT_Undo,          NULL,"Ctrl+Z",0},
69
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Redo"),               NULL,ACT_Redo,          NULL,"Ctrl+Y",0},
70
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Edit"),         NULL,ACT_ResetSegments, NULL,NULL,0},
71
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Cut"),                NULL,ACT_Cut,           NULL,"Ctrl+X",0},
72
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Copy"),               NULL,ACT_Copy,          NULL,"Ctrl+C",0},
73
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Paste"),              NULL,ACT_Paste,         NULL,"Ctrl+V",0},
74
 #ifdef __APPLE__
75
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"),             NULL,ACT_Delete     ,NULL,"Backspace"},
76
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"),             NULL,ACT_Delete,        NULL,"Backspace",0},
77
 #else
78
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"),             NULL,ACT_Delete     ,NULL,"Delete"},
79
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Delete"),             NULL,ACT_Delete,        NULL,"Delete",0},
80
 #endif
81
-            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY             ,NULL,       NULL},
82
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker A"),       NULL,ACT_MarkA      ,NULL,"Ctrl+PgUp"},
83
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker B"),       NULL,ACT_MarkB      ,NULL,"Ctrl+PgDown"},
84
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Markers"),      NULL,ACT_ResetMarkers,NULL,"Ctrl+Home"},
85
-            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY             ,NULL,       NULL},
86
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Pr&eferences"),       NULL,ACT_PREFERENCES,NULL,NULL},
87
-            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY             ,NULL,NULL},
88
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save current settings as default"), NULL,ACT_SaveAsDefault,NULL,"Ctrl+Alt+D"},
89
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Load saved settings"),              NULL,ACT_LoadDefault,  NULL,"Ctrl+R"}
90
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
91
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker A"),       NULL,ACT_MarkA,         NULL,"Ctrl+PgUp",0},
92
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Set Marker B"),       NULL,ACT_MarkB,         NULL,"Ctrl+PgDown",0},
93
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Reset Markers"),      NULL,ACT_ResetMarkers,  NULL,"Ctrl+Home",0},
94
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
95
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Pr&eferences"),       NULL,ACT_PREFERENCES,   NULL,NULL,0},
96
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
97
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save current settings as default"), NULL,ACT_SaveAsDefault,NULL,"Ctrl+Alt+D",0},
98
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Load saved settings"),              NULL,ACT_LoadDefault,  NULL,"Ctrl+R",0}
99
         };
100
 
101
 std::vector<MenuEntry> myMenuEdit(_myMenuEdit, _myMenuEdit + sizeof(_myMenuEdit) / sizeof(_myMenuEdit[0]));
102
 
103
 static const MenuEntry _myMenuVideo[] = {
104
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Decoder Option"),     NULL,ACT_DecoderOption      ,NULL,NULL},
105
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","PostProcessing"),     NULL,ACT_SetPostProcessing  ,NULL,NULL},
106
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Filters"),            NULL,ACT_VIDEO_FILTERS      ,NULL,"Ctrl+Alt+F"},
107
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Play filtered"),      NULL,ACT_PreviewChanged     ,NULL,NULL}
108
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Decoder Option"),     NULL,ACT_DecoderOption,     NULL,NULL,0},
109
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","PostProcessing"),     NULL,ACT_SetPostProcessing, NULL,NULL,0},
110
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Filters"),            NULL,ACT_VIDEO_FILTERS,     NULL,"Ctrl+Alt+F",0},
111
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Play filtered"),      NULL,ACT_PreviewChanged,    NULL,NULL,0}
112
         };
113
 
114
 std::vector<MenuEntry> myMenuVideo(_myMenuVideo, _myMenuVideo + sizeof(_myMenuVideo) / sizeof(_myMenuVideo[0]));
115
 
116
 static const MenuEntry _myMenuAudio[] = {
117
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Select Track"),       NULL,ACT_AUDIO_SELECT_TRACK ,NULL,NULL},
118
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save audio"),         NULL,ACT_SAVE_AUDIO         ,NULL,NULL},
119
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Filters"),            NULL,ACT_AUDIO_FILTERS      ,NULL,NULL},
120
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Select Track"),       NULL,ACT_AUDIO_SELECT_TRACK,NULL,NULL,0},
121
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Save audio"),         NULL,ACT_SAVE_AUDIO,        NULL,NULL,0},
122
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Filters"),            NULL,ACT_AUDIO_FILTERS,     NULL,NULL,0},
123
         };
124
 
125
 std::vector<MenuEntry> myMenuAudio(_myMenuAudio, _myMenuAudio + sizeof(_myMenuAudio) / sizeof(_myMenuAudio[0]));
126
 
127
 static const MenuEntry _myMenuHelp[] = {
128
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Build Option"),       NULL,ACT_BUILT_IN           ,NULL,NULL},
129
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Plugins"),            NULL,ACT_PLUGIN_INFO        ,NULL,NULL},
130
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Build Option"),       NULL,ACT_BUILT_IN,          NULL,NULL,0},
131
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Plugins"),            NULL,ACT_PLUGIN_INFO,       NULL,NULL,0},
132
 #ifdef _WIN32
133
-           {MENU_SEPARATOR,"-",NULL,ACT_DUMMY             ,NULL,NULL},
134
-           {MENU_SUBMENU, QT_TRANSLATE_NOOP("adm","&Advanced"), NULL, ACT_DUMMY, NULL, NULL},
135
-           {MENU_SUBACTION, QT_TRANSLATE_NOOP("adm","Open Application &Log"), NULL, ACT_OPEN_APP_LOG, NULL, NULL},
136
-           {MENU_SUBACTION, QT_TRANSLATE_NOOP("adm","Open Application Data &Folder"), NULL, ACT_OPEN_APP_FOLDER, NULL, NULL},
137
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
138
+            {MENU_SUBMENU,QT_TRANSLATE_NOOP("adm","&Advanced"),         NULL,ACT_DUMMY,             NULL,NULL,0},
139
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Open Application &Log"),NULL,ACT_OPEN_APP_LOG, NULL, NULL,0},
140
+            {MENU_SUBACTION,QT_TRANSLATE_NOOP("adm","Open Application Data &Folder"),NULL,ACT_OPEN_APP_FOLDER,NULL,NULL,0},
141
 #endif
142
-            {MENU_SEPARATOR,"-",                                        NULL,ACT_DUMMY             ,NULL,NULL},
143
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","About"),              NULL,ACT_ABOUT              ,NULL,NULL},
144
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
145
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","About"),              NULL,ACT_ABOUT,             NULL,NULL,0}
146
         };
147
 
148
 std::vector<MenuEntry> myMenuHelp(_myMenuHelp, _myMenuHelp + sizeof(_myMenuHelp) / sizeof(_myMenuHelp[0]));
149
 std::vector<MenuEntry> myMenuTool;
150
 
151
 static const MenuEntry _myMenuGo[] = {
152
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Play/Stop"),           NULL,ACT_PlayAvi        ,MKICON(player_play),   "Space"},
153
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Frame"),      NULL,ACT_PreviousFrame  ,MKICON(back),          "Left"},
154
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Frame"),          NULL,ACT_NextFrame      ,MKICON(forward),       "Right"},
155
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Intra Frame"),NULL,ACT_PreviousKFrame ,MKICON(player_rew),    "Down"},
156
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Intra Frame"),    NULL,ACT_NextKFrame     ,MKICON(player_fwd),    "Up"},
157
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Black Frame"),NULL,ACT_PrevBlackFrame ,MKICON(prev_black),    NULL},
158
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Black Frame"),    NULL,ACT_NextBlackFrame ,MKICON(next_black),    NULL},
159
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","First Frame"),         NULL,ACT_Begin          ,MKICON(player_start),  "Home"},
160
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Last Frame"),          NULL,ACT_End            ,MKICON(player_end),    "End"},
161
-            {MENU_SEPARATOR,"-",               NULL,ACT_DUMMY          , NULL,NULL},
162
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker A"),      NULL,ACT_GotoMarkA      ,MKICON(markA)         ,"PgUp"},
163
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker B"),      NULL,ACT_GotoMarkB      ,MKICON(markB)         ,"PgDown"},
164
-            {MENU_SEPARATOR,"-",               NULL,ACT_DUMMY          , NULL,NULL},
165
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Time"),          NULL,ACT_GotoTime       ,NULL,                 "Ctrl+T" },
166
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Play/Stop"),           NULL,ACT_PlayAvi,         MKICON(player_play),   "Space",0},
167
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Frame"),      NULL,ACT_PreviousFrame,   MKICON(back),          "Left",0},
168
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Frame"),          NULL,ACT_NextFrame,       MKICON(forward),       "Right",0},
169
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Intra Frame"),NULL,ACT_PreviousKFrame,  MKICON(player_rew),    "Down",0},
170
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Intra Frame"),    NULL,ACT_NextKFrame,      MKICON(player_fwd),    "Up",0},
171
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Previous Black Frame"),NULL,ACT_PrevBlackFrame,  MKICON(prev_black),    NULL,0},
172
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Next Black Frame"),    NULL,ACT_NextBlackFrame,  MKICON(next_black),    NULL,0},
173
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","First Frame"),         NULL,ACT_Begin,           MKICON(player_start),  "Home",0},
174
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Last Frame"),          NULL,ACT_End,             MKICON(player_end),    "End",0},
175
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY,NULL,NULL,1},
176
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker A"),      NULL,ACT_GotoMarkA,       MKICON(markA),         "PgUp",0},
177
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Marker B"),      NULL,ACT_GotoMarkB,       MKICON(markB),         "PgDown",0},
178
+            {MENU_SEPARATOR,"-",NULL,ACT_DUMMY, NULL,NULL,1},
179
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Go To Time"),          NULL,ACT_GotoTime,        NULL,                  "Ctrl+T",0}
180
         };
181
 
182
 std::vector<MenuEntry> myMenuGo(_myMenuGo, _myMenuGo + sizeof(_myMenuGo) / sizeof(_myMenuGo[0]));
183
 
184
 static const MenuEntry _myMenuView[] = {
185
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:4"),      NULL,ACT_ZOOM_1_4 ,NULL,"4"},
186
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:2"),      NULL,ACT_ZOOM_1_2 ,NULL,"3"},
187
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:1"),      NULL,ACT_ZOOM_1_1 ,NULL,"2"},
188
-            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 2:1"),      NULL,ACT_ZOOM_2_1 ,NULL,"1"},
189
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:4"),   NULL,ACT_ZOOM_1_4,    NULL,"4",0},
190
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:2"),   NULL,ACT_ZOOM_1_2,    NULL,"3",0},
191
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 1:1"),   NULL,ACT_ZOOM_1_1,    NULL,"2",0},
192
+            {MENU_ACTION,QT_TRANSLATE_NOOP("adm","Zoom 2:1"),   NULL,ACT_ZOOM_2_1,    NULL,"1",0}
193
         };
194
 
195
 std::vector<MenuEntry> myMenuView(_myMenuView, _myMenuView + sizeof(_myMenuView) / sizeof(_myMenuView[0]));
196
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/include/ADM_edCache.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/include/ADM_edCache.h Changed
12
 
1
@@ -14,6 +14,10 @@
2
 #include "ADM_image.h"
3
 #define ADM_INVALID_CACHE 0xffff
4
 #define ADM_IN_USE_CACHE  0xfffe
5
+
6
+#define EDITOR_CACHE_MIN_SIZE 8
7
+#define EDITOR_CACHE_MAX_SIZE 16
8
+
9
 typedef struct cacheElem
10
 {
11
    ADMImage *image;
12
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/include/ADM_edit.hxx -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/include/ADM_edit.hxx Changed
91
 
1
@@ -63,6 +63,19 @@
2
         ENV_EDITOR_LAST=   0x8000
3
 }_ENV_EDITOR_FLAGS;
4
 
5
+/**
6
+    \enum ADM_cutPointType
7
+    \brief keep track of potential problems when in copy mode
8
+*/
9
+typedef enum
10
+{
11
+    ADM_EDITOR_CUT_POINT_IDR,
12
+    ADM_EDITOR_CUT_POINT_NON_IDR,
13
+    ADM_EDITOR_CUT_POINT_RECOVERY,
14
+    ADM_EDITOR_CUT_POINT_MISMATCH,
15
+    ADM_EDITOR_CUT_POINT_UNCHECKED
16
+}ADM_cutPointType;
17
+
18
 class ADM_edAudioTrackFromVideo;
19
 class ADM_edAudioTrack;
20
 
21
@@ -116,7 +129,7 @@
22
                     void        recalibrateSigned(int64_t *time,_SEGMENT *seg);
23
                     bool        updateImageTiming(_SEGMENT *seg,ADMImage *image);
24
                     // Need to get the image just before targetPts
25
-                    bool        decodeTillPictureAtPts(uint64_t targetPts,ADMImage *image);
26
+                    uint8_t     decodeTillPictureAtPts(uint64_t targetPts,ADMImage *image);
27
                     bool        getFrameNumFromPtsOrBefore(_VIDEOS *v,uint64_t refTime,int &frameNumber);
28
 
29
 protected:
30
@@ -149,7 +162,7 @@
31
                     uint32_t    _currentSegment;    // Current video segment
32
                     int64_t     _nextFrameDts;      // COPYMODE Used in copy mode to fill the missing timestamp
33
                                                     // Warning, it is actually the DTS of the NEXT frame to fetch
34
-                    uint8_t     compBuffer[MAXIMUM_SIZE * MAXIMUM_SIZE * 3]; // Buffer used for decoding
35
+                    uint8_t     compBuffer[ADM_COMPRESSED_MAX_DATA_LENGTH]; // Buffer used for decoding
36
                     bool        endOfStream; // The decoder has been flushed and no more compressed images from demuxer
37
 //****************************** Audio **********************************
38
                     // _audiooffset points to the offset / the total segment
39
@@ -164,9 +177,7 @@
40
                     bool        checkSamplingFrequency(ADM_audioStreamTrack *trk); // detect implicit SBR in AAC
41
 
42
 //****************************** Audio **********************************
43
-                    void        deleteAllVideos(void );
44
                     uint8_t     getMagic(const char *name,uint32_t *magic);
45
-                    uint32_t    searchForwardSeg(uint32_t startframe);
46
                     bool        rederiveFrameType(vidHeader *demuxer);
47
 
48
   public:
49
@@ -211,7 +222,6 @@
50
                    int         saveImageJpg(const char *filename);
51
                     int         saveImagePng(const char *filename);
52
                     uint8_t    cleanup( void);
53
-                    bool        isMultiSeg( void);
54
 /************************************* Markers *****************************/
55
 private:
56
                     uint64_t    markerAPts,markerBPts;
57
@@ -233,7 +243,7 @@
58
 protected:
59
                     ListOfUndoQueueElements undoQueue;
60
                     static const uint8_t maxUndoSteps=50;
61
-                    uint32_t    _cnt; // track the nb of performed undo steps for redo
62
+                    uint32_t    _undo_counter; // track the nb of performed undo steps for redo
63
 public:
64
                     bool        addToUndoQueue(void);
65
                     bool        undo(void);
66
@@ -249,18 +259,20 @@
67
                     bool        goToTimeVideo(uint64_t time);
68
                     void       getCurrentFrameFlags(uint32_t *flags, uint32_t *quantiser);
69
                     bool        goToIntraTimeVideo(uint64_t time);
70
-                    bool        nextPicture(ADMImage *image,bool dontcross=false);
71
+                    bool        nextPicture(ADMImage *image, int flags=0); // 1 = don't cross segment, 2 = don't skip to next keyframe
72
                     bool        samePicture(ADMImage *image);
73
                     bool        previousPicture(ADMImage *image);
74
                     bool        rewind(void);
75
 // Used for stream copy
76
                     bool        GoToIntraTime_noDecoding(uint64_t time,uint32_t *toframe=NULL);
77
-                    bool        getCompressedPicture(uint64_t delay,bool sanitizeDts,ADMCompressedImage *img);     //COPYMODE
78
+                    bool        getCompressedPicture(uint64_t start,uint64_t delay,bool sanitizeDts,ADMCompressedImage *img); //COPYMODE
79
                     // Use only for debug purpose !!!
80
                     bool        getDirectImageForDebug(uint32_t frameNum,ADMCompressedImage *img);
81
-                    bool        checkCutsAreOnIntra(void);
82
-                    bool        checkCutIsOnIntra(uint64_t time);
83
+                    ADM_cutPointType checkCutsAreOnIntra(void);
84
+                    ADM_cutPointType checkCutsAreOnIntra(uint64_t start,uint64_t end);
85
+                    ADM_cutPointType checkCutIsOnIntra(uint64_t time);
86
 private:
87
+                    ADM_cutPointType checkSegmentStartsOnIntra(uint32_t seg);
88
                     uint64_t    totalExtraDelay;
89
                     int64_t     desyncScore;
90
 public:
91
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/include/ADM_segment.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/include/ADM_segment.h Changed
36
 
1
@@ -67,6 +67,8 @@
2
       
3
 
4
       uint32_t _nb_video_frames; /// Really needed ?
5
+      uint32_t paramCacheSize;
6
+      uint8_t *paramCache; /// Reuse decoded SPS and friends
7
       EditorCache *_videoCache; /// Decoded video cache
8
 
9
       /* Timeing info */
10
@@ -77,6 +79,7 @@
11
       uint64_t timeIncrementInUs; /// in case the video has no PTS, time increment (us)
12
 
13
       uint64_t firstFramePts; /// Pts of firstFrame
14
+      uint32_t decoderDelay; /// Nb of frames passed to decoder before the first picture pops out
15
 
16
     _VIDEOS()
17
     {
18
@@ -85,14 +88,16 @@
19
         decoder=NULL;
20
         color=NULL;
21
         _nb_video_frames=0;
22
+        paramCacheSize=0;
23
+        paramCache=NULL;
24
         _videoCache=NULL;
25
         lastSentFrame=0;
26
         lastDecodedPts=0;
27
         lastReadPts=0;
28
         timeIncrementInUs=0;
29
         firstFramePts=0;
30
+        decoderDelay=0;
31
     }
32
-
33
 };
34
 
35
 /**
36
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/include/IEditor.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/include/IEditor.h Changed
10
 
1
@@ -66,7 +66,7 @@
2
     virtual bool goToIntraTimeVideo(uint64_t time) = 0;
3
     virtual bool goToTimeVideo(uint64_t time) = 0;
4
     virtual bool isFileOpen(void) = 0;
5
-    virtual bool nextPicture(ADMImage *image, bool dontcross = false) = 0;
6
+    virtual bool nextPicture(ADMImage *image, int flags = 0) = 0;
7
     virtual bool samePicture(ADMImage *image) = 0;
8
     virtual int openFile(const char *name) = 0;
9
     virtual bool rewind(void) = 0;
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edRender.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edRender.cpp Changed
139
 
1
@@ -209,7 +209,7 @@
2
     \fn NextPicture
3
     \brief decode & returns the next picture
4
 */
5
-bool        ADM_Composer::nextPicture(ADMImage *image,bool dontcross)
6
+bool ADM_Composer::nextPicture(ADMImage *image, int flags)
7
 {
8
 uint64_t pts;
9
 uint64_t tail;
10
@@ -240,6 +240,10 @@
11
                 maxPts=seg->_refStartTimeUs+seg->_durationUs;
12
             if(false== nextPictureInternal(seg->_reference,image,maxPts))
13
             {
14
+                if(flags & 2)
15
+                {
16
+                    goto np_nextSeg;
17
+                }
18
                 uint64_t nkfPts=maxPts;
19
                 uint32_t frame=0;
20
                 if(searchNextKeyFrameInRef(seg->_reference,refPts,&nkfPts) && nkfPts<maxPts)
21
@@ -278,7 +282,7 @@
22
 
23
 // Try to get an image for the following segment....
24
 np_nextSeg:
25
-        if(true==dontcross)
26
+        if(flags & 1)
27
         {
28
             ADM_warning("Not allowed to cross segment\n");
29
             return false;
30
@@ -306,7 +310,7 @@
31
                 dont want to decode the targetPts if it is a keyframe
32
                 but have the frame before
33
 */
34
-bool ADM_Composer::decodeTillPictureAtPts(uint64_t targetPts,ADMImage *image)
35
+uint8_t ADM_Composer::decodeTillPictureAtPts(uint64_t targetPts,ADMImage *image)
36
 {
37
  // Go to the previous keyframe and decode forward...
38
                 uint32_t thisSeg=_currentSegment;
39
@@ -328,22 +332,22 @@
40
                 uint64_t previousKf;
41
                 if(false==searchPreviousKeyFrameInRef(ref,refTime,&previousKf))
42
                 {
43
-                    ADM_warning("Cannot find previous keyframe in ref %d, time=%" PRIu64" \n",ref,refTime);
44
+                    ADM_warning("Cannot find previous keyframe in ref %d for ref time %s\n",ref,ADM_us2plain(refTime));
45
                     return false;
46
                 }
47
                 // go to it...
48
                 if(false==seektoTime(ref,previousKf,false))
49
                 {
50
-                    ADM_warning("Cannot seek to time=%" PRIu64" \n",previousKf);
51
+                    ADM_warning("Cannot seek to ref time %s\n",ADM_us2plain(previousKf));
52
                     return false;            
53
                 }
54
                 // Now forward till we reach out frame
55
                 while(1)
56
                 {
57
-                    if(false==nextPicture(image,true))
58
+                    if(false==nextPicture(image,3))
59
                     {
60
                             ADM_warning("Error in decoding forward\n");
61
-                            return false;
62
+                            return ADM_IGN;
63
                     }
64
                     if(image->Pts>=targetPts)
65
                             break;
66
@@ -352,10 +356,10 @@
67
                 }
68
                 if(image->Pts!=targetPts)
69
                 {
70
-                    ADM_error("Could not retrieve our own frame at PTS=%" PRIu64" ms\n",targetPts/1000);
71
-                    return false;
72
+                    ADM_warning("Could not retrieve our own frame at %s\n",ADM_us2plain(targetPts));
73
+                    return ADM_IGN;
74
                 }
75
-                return true;
76
+                return 1;
77
 }
78
 /**
79
     \fn previousPicture
80
@@ -388,7 +392,7 @@
81
         }
82
         ADMImage *cached=vid->_videoCache->getBefore(refPts);
83
        
84
-        if(cached)
85
+        if(cached && cached->Pts<refPts)
86
         {
87
             if(cached->Pts>=seg->_refStartTimeUs) // It might be in the cache but belonging to the previous seg
88
             {
89
@@ -419,12 +423,18 @@
90
         seg=_segments.getSegment(segNo);
91
         if(segNo==_currentSegment) // Still in the same segment..
92
         {
93
-                if(false==decodeTillPictureAtPts(targetPts,image))
94
+                switch(decodeTillPictureAtPts(targetPts,image))
95
                 {
96
-                    ADM_error("Cannot decode till our current pts\n");
97
-                    return false;
98
+                    case 1:
99
+                        cached=vid->_videoCache->getBefore(refPts);
100
+                        break;
101
+                    case ADM_IGN:
102
+                        ADM_warning("Cannot decode till our current pts\n");
103
+                        cached=vid->_videoCache->getLast();
104
+                        break;
105
+                    default:
106
+                        return false;
107
                 }
108
-                cached=vid->_videoCache->getBefore(refPts);
109
                 if(cached)
110
                 {
111
                     if(cached->Pts>=seg->_refStartTimeUs)
112
@@ -455,10 +465,13 @@
113
         vid=_segments.getRefVideo(seg->_reference);
114
         
115
 
116
-        decodeTillPictureAtPts(targetPts,image);
117
+        if(false==decodeTillPictureAtPts(targetPts,image))
118
+        {
119
+            ADM_error("Cannot decode to get a candidate.\n");
120
+            return false;
121
+        }
122
         _currentSegment=segNo;
123
         // We may have overshot...
124
-        uint64_t last=vid->lastDecodedPts;
125
         _segments.LinearToRefTime(_currentSegment,targetPts,&refPts);
126
         ADMImage *candidate=vid->_videoCache->getLast();
127
         if(!candidate)
128
@@ -639,10 +652,8 @@
129
         // If the refStartTime is 0, it is the first image
130
         // But the fist image might not be = 0
131
       _VIDEOS *vid=_segments.getRefVideo(seg->_reference);
132
-      vidHeader    *demuxer=vid->_aviheader;  
133
       ADM_assert(vid);
134
       uint64_t from=seg->_refStartTimeUs;
135
-      uint64_t pts,dts;
136
 
137
       if(!from) from=vid->firstFramePts;
138
 
139
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edRenderInternal.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edRenderInternal.cpp Changed
201
 
1
@@ -37,10 +37,9 @@
2
 */
3
 bool ADM_Composer::seektoTime(uint32_t ref,uint64_t timeToSeek,bool dontdecode)
4
 {
5
-   _VIDEOS *vid=_segments.getRefVideo(ref);
6
-    vidHeader *demuxer=vid->_aviheader;
7
-   EditorCache   *cache =vid->_videoCache;
8
-   ADM_assert(cache);
9
+    _VIDEOS *vid=_segments.getRefVideo(ref);
10
+    EditorCache   *cache =vid->_videoCache;
11
+    ADM_assert(cache);
12
     bool found=false;
13
     if(timeToSeek>vid->firstFramePts && !dontdecode)
14
     {
15
@@ -48,7 +47,7 @@
16
         if(image)
17
         {
18
             vid->lastDecodedPts=vid->lastReadPts=timeToSeek;
19
-            ADM_info("Image found in cache, pts=%" PRIu64" ms\n",timeToSeek/1000);
20
+            ADM_info("Image found in cache, pts=%" PRIu64" ms, last sent frame: %" PRIu32"\n",timeToSeek/1000,vid->lastSentFrame);
21
             endOfStream=false;
22
             return true;
23
         }
24
@@ -96,7 +95,7 @@
25
         vid->lastReadPts=pts;
26
         if(pts==timeToSeek)
27
         {
28
-            ADM_info("Image found, pts=%" PRIu64" ms\n",pts/1000);
29
+            ADM_info("Image found, pts=%" PRIu64" ms, last sent frame: %" PRIu32"\n",pts/1000,vid->lastSentFrame);
30
             return true;
31
         }
32
         if(pts>timeToSeek)
33
@@ -119,9 +118,8 @@
34
 bool ADM_Composer::samePictureInternal(uint32_t ref,ADMImage *out)
35
 {
36
     _VIDEOS *vid=_segments.getRefVideo(ref);
37
-    vidHeader *demuxer=vid->_aviheader;
38
-   EditorCache   *cache =vid->_videoCache;
39
-   ADM_assert(cache);
40
+    EditorCache   *cache =vid->_videoCache;
41
+    ADM_assert(cache);
42
 
43
   ADMImage *in=cache->getByPts(vid->lastDecodedPts);
44
   if(!in)
45
@@ -177,7 +175,7 @@
46
             // Duplicate
47
             if(out)
48
             {
49
-                aprintf("[getNextPicture] Looking for after> %" PRIu64", got %" PRIu64" delta=%" PRIi32" ms\n",vid->lastReadPts,img->Pts,(img->Pts-vid->lastReadPts)/1000);
50
+                aprintf("[getNextPicture] Looking for after> %" PRIu64", got %" PRIu64" delta=%" PRId64" ms\n",vid->lastReadPts,img->Pts,((int64_t)img->Pts-(int64_t)vid->lastReadPts)/1000);
51
                 out->duplicate(img);
52
                 vid->lastReadPts=img->Pts;
53
                 currentFrame++;
54
@@ -209,11 +207,11 @@
55
 */
56
 bool ADM_Composer::DecodeNextPicture(uint32_t ref)
57
 {
58
-  EditorCache   *cache;
59
-  ADMImage *result;
60
-  bool drain=false;
61
-  uint32_t  flags;
62
-   _VIDEOS *vid=_segments.getRefVideo(ref);
63
+    EditorCache *cache;
64
+    ADMImage *result,*last;
65
+    bool drain=false;
66
+
67
+    _VIDEOS *vid=_segments.getRefVideo(ref);
68
     vidHeader *demuxer=vid->_aviheader;
69
     ADM_assert(vid->decoder);
70
     if(vid->decoder->endOfStreamReached())
71
@@ -236,7 +234,7 @@
72
     {
73
         if(!demuxer->getFrame(frame,&img))
74
         {
75
-            ADM_warning("getFrame failed for frame %" PRIu32"\n",vid->lastSentFrame);
76
+            ADM_warning("getFrame failed for frame %" PRIu32"\n",frame);
77
             drain=true;
78
             vid->decoder->setDrainingState(true);
79
         }else
80
@@ -244,11 +242,14 @@
81
             endOfStream=false;
82
         }
83
     }
84
+    // Be prepared for the case that the decoder doesn't output a picture
85
+    // but tells us to repeat the previous one.
86
+    last=cache->getLast();
87
     // Now uncompress it...
88
     result=cache->getFreeImage();
89
     if(!result)
90
     {
91
-        ADM_warning(" Cache full for frame %" PRIu32"\n",vid->lastSentFrame);
92
+        ADM_warning(" Cache full for frame %" PRIu32"\n",frame);
93
         return false;
94
     }
95
     if(!drain)
96
@@ -260,41 +261,59 @@
97
     }
98
     if(!decompressImage(result,&img,ref))
99
     {
100
-        ADM_info("Decoding error for frame %" PRIu32", not necessarily a problem\n",vid->lastSentFrame);
101
+        if(false==vid->decoder->keepFeeding())
102
+            ADM_info("Error decoding frame %" PRIu32"\n",frame);
103
         stats.nbNoImage++;
104
         cache->invalidate(result);
105
         if(drain)
106
             endOfStream=true;
107
          return true; // Not an error in itself
108
     }
109
-        aprintf("Got image with PTS=%s\n",ADM_us2plain(result->Pts));
110
-     uint64_t pts=result->Pts;
111
-     uint64_t old=vid->lastDecodedPts;
112
-        if(pts==ADM_COMPRESSED_NO_PTS || vid->dontTrustBFramePts) // No PTS available ?
113
+    if(result->_noPicture) // Handle N-VOP in mpeg4
114
+    {
115
+        if(last && !last->_noPicture)
116
+            result->duplicate(last);
117
+        else if(result->isWrittable())
118
+            result->blacken();
119
+        result->_noPicture=0;
120
+        result->flags=AVI_P_FRAME;
121
+        result->Pts=ADM_NO_PTS;
122
+    }
123
+    // else aprintf("Got a fresh image with PTS=%s\n",ADM_us2plain(result->Pts));
124
+    uint64_t pts=result->Pts;
125
+    uint64_t old=vid->lastDecodedPts;
126
+    if(pts==ADM_COMPRESSED_NO_PTS || vid->dontTrustBFramePts) // No PTS available ?
127
+    {
128
+        aprintf("[Editor] No PTS, guessing value\n");
129
+        aprintf("Image Pts : %s\n",ADM_us2plain(img.demuxerPts));
130
+        aprintf("Image Dts : %s\n",ADM_us2plain(img.demuxerDts));
131
+        vid->lastDecodedPts+=vid->timeIncrementInUs;
132
+        uint64_t pts=img.demuxerPts;
133
+        uint64_t dts=img.demuxerDts;
134
+        uint32_t origin=0;
135
+        if(frame>=vid->decoderDelay)
136
+            origin=frame-vid->decoderDelay;
137
+        demuxer->getPtsDts(origin,&pts,&dts);
138
+        if(dts!=ADM_NO_PTS && (vid->dontTrustBFramePts || vid->_aviheader->providePts()==false))
139
         {
140
-                aprintf("[Editor] No PTS, guessing value\n");
141
-                aprintf("Image Pts : %s\n",ADM_us2plain(img.demuxerPts));
142
-                aprintf("Image Dts : %s\n",ADM_us2plain(img.demuxerDts));
143
-                vid->lastDecodedPts+=vid->timeIncrementInUs;
144
-                if(img.demuxerDts!=ADM_NO_PTS && (vid->dontTrustBFramePts || vid->_aviheader->providePts()==false))
145
-                {
146
-                    if(img.demuxerDts>vid->lastDecodedPts)
147
-                    {
148
-                        aprintf("Dts > Guessed Pts, cranking pts\n");
149
-                        vid->lastDecodedPts=img.demuxerDts;
150
-                    }
151
-                }
152
-                result->Pts=vid->lastDecodedPts;
153
-        }else
154
-           {
155
-                aprintf("[Editor] got PTS\n");
156
-                vid->lastDecodedPts=pts;
157
+            aprintf("Checking guessed PTS against DTS from frame %u, decoder delay: %u frames.\n",origin,vid->decoderDelay);
158
+            if(dts>vid->lastDecodedPts)
159
+            {
160
+                ADM_warning("Dts > Guessed Pts, cranking pts by %" PRIu64" us.\n",dts-vid->lastDecodedPts);
161
+                vid->lastDecodedPts=dts;
162
             }
163
+        }
164
+        result->Pts=vid->lastDecodedPts;
165
+    }else
166
+    {
167
+        aprintf("[Editor] got PTS\n");
168
+        vid->lastDecodedPts=pts;
169
+    }
170
     aprintf(">>Decoded frame %" PRIu32" with pts=%" PRId64" us, %" PRId64" ms, ptsdelta=%" PRId64" ms \n",
171
         frame,
172
         vid->lastDecodedPts,
173
         vid->lastDecodedPts/1000,
174
-        (vid->lastDecodedPts-old)/1000);
175
+        ((int64_t)vid->lastDecodedPts-(int64_t)old)/1000);
176
 
177
     if(old>vid->lastDecodedPts) 
178
     {
179
@@ -320,89 +339,84 @@
180
 
181
 bool ADM_Composer::decompressImage(ADMImage *out,ADMCompressedImage *in,uint32_t ref)
182
 {
183
- ADMImage *tmpImage=NULL;
184
- _VIDEOS  *v=_segments.getRefVideo(ref);
185
- uint32_t refOnly=v->decoder->dontcopy(); // can we skip one memcpy ?
186
- // get settings from pref...
187
- 
188
-// This is only an empty Shell
189
+    ADMImage *tmpImage=NULL;
190
+    _VIDEOS  *v=_segments.getRefVideo(ref);
191
+    bool refOnly=v->decoder->dontcopy(); // can we skip one memcpy ?
192
+    // This is only an empty Shell
193
     if(refOnly)
194
     {
195
-                uint32_t w,h;
196
-                if(_scratch) // Can we reuse the old scratch memory ?
197
-                {
198
-                    _scratch->getWidthHeight(&w,&h);
199
-                    if(w!=_imageBuffer->_width || _imageBuffer->_height!=h)
200
-                    {
201
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edSearch.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edSearch.cpp Changed
201
 
1
@@ -21,7 +21,11 @@
2
 #include "ADM_edit.hxx"
3
 #include "ADM_vidMisc.h"
4
 
5
+#if 1
6
 #define pivotPrintf(...) {}
7
+#else
8
+#define pivotPrintf printf
9
+#endif
10
 
11
 /**
12
     \fn getNKFramePTS
13
@@ -96,7 +100,6 @@
14
 bool           ADM_Composer::getPKFramePTS(uint64_t *frameTime)
15
 {
16
 uint64_t refTime,nkTime,segTime;
17
-int lastSeg=_segments.getNbSegments();
18
 uint32_t seg;
19
 bool r;
20
     // 1- Convert frameTime to segments
21
@@ -164,10 +167,8 @@
22
 
23
 bool           ADM_Composer::getPtsDtsDelta(uint64_t frameTime, uint64_t *outDelta)
24
 {
25
-uint64_t refTime,nkTime,segTime;
26
-int lastSeg=_segments.getNbSegments();
27
+uint64_t refTime,segTime;
28
 uint32_t seg;
29
-bool r;
30
     // 1- Convert frameTime to segments
31
     if(false== _segments.convertLinearTimeToSeg(  frameTime, &seg, &segTime))
32
     {
33
@@ -208,13 +209,19 @@
34
 */
35
 bool ADM_Composer::searchNextKeyFrameInRef(int ref,uint64_t refTime,uint64_t *nkTime)
36
 {
37
-    // Search from the end till we get a keyframe
38
+    int curFrame=0;
39
     _VIDEOS *v=_segments.getRefVideo(ref);
40
+    // look up the frame we are starting from...
41
+    if(!getFrameNumFromPtsOrBefore(v,refTime,curFrame))
42
+    {
43
+        ADM_warning("Cannot identify the frame for time %s in reference.\n",ADM_us2plain(refTime));
44
+    }
45
     uint32_t nbFrame=v->_nb_video_frames;
46
     uint64_t pts,dts;
47
-    for(int i=0;i<nbFrame;i++)
48
+    curFrame -= 16; // safety margin to deal with early B-frames
49
+    if(curFrame < 0) curFrame = 0;
50
+    for(int i=curFrame;i<nbFrame;i++)
51
     {
52
-        uint64_t p;
53
         uint32_t flags;
54
         v->_aviheader->getFlags(i,&flags);
55
         if(!(flags & AVI_KEY_FRAME)) continue;
56
@@ -243,18 +250,27 @@
57
  */
58
 bool ADM_Composer::getFrameNumFromPtsOrBefore(_VIDEOS *v,uint64_t refTime,int &frameNumber)
59
 {
60
+    if(refTime == ADM_NO_PTS)
61
+        return false;
62
+    if(refTime <= v->firstFramePts)
63
+    {
64
+        frameNumber = 0;
65
+        return true;
66
+    }
67
+
68
     uint32_t nbFrame = v->_nb_video_frames;
69
-    uint64_t pts, dts;
70
+    uint64_t pts, dts, margin = v->timeIncrementInUs * 16;
71
+    const uint64_t rangeBegin = (refTime < margin)? 0 : (refTime - margin);
72
+    const uint64_t rangeEnd = refTime + margin;
73
     uint32_t curFrame = nbFrame >> 1;
74
     uint32_t splitMoval = (curFrame + 1) >> 1;
75
     uint32_t minFrame = 0;
76
+    bool worked = false;
77
     pivotPrintf("Looking for frame with pts %" PRIu64" us (%s)\n",refTime,ADM_us2plain(refTime));
78
     // Try to find the frame that as the timestamp close enough to refTime, while being smaller
79
     do 
80
     {
81
         // seems like the pts determination, not always works -> retry if necessary
82
-        bool worked;
83
-        uint32_t skipped = 0;
84
         uint32_t tmpFrame = curFrame;
85
         do
86
         {
87
@@ -262,54 +278,47 @@
88
             worked = v->_aviheader->getPtsDts(tmpFrame,&pts,&dts);
89
             if(worked && pts != ADM_NO_PTS)
90
                 break; // found
91
-            if(!tmpFrame)
92
+            if(tmpFrame <= minFrame)
93
             {
94
-                ADM_warning("The whole segment is corrupted. Aborting the search\n");
95
-                return false;
96
+                ADM_warning("Frames between %" PRIu32" and %" PRIu32" have no PTS.\n",minFrame,curFrame);
97
+                break;
98
             }
99
             tmpFrame--;
100
-            skipped++;
101
         } while(true);
102
-        if(pts == refTime)
103
-            break;
104
-        if(skipped && pts < refTime)
105
-        { // if we slid past the target frame...
106
-            pivotPrintf("skipped %" PRIu32" frames seeking back\n",skipped);
107
-            skipped = 0;
108
-            tmpFrame = curFrame + 1; // ...go back to the frame where we first encountered corrupted video...
109
+        if(pts == ADM_NO_PTS)
110
+        {
111
+            tmpFrame = curFrame + 1;
112
             do
113
-            { // ...and seek forward until we get a valid pts
114
-                pts = ADM_NO_PTS;
115
-                worked = v->_aviheader->getPtsDts(tmpFrame,&pts,&dts);
116
-                if(worked && pts != ADM_NO_PTS)
117
-                    break; // found                
118
-                tmpFrame++;
119
-                if(tmpFrame == nbFrame)
120
-                {
121
-                    ADM_warning("The whole segment is corrupted. Aborting the search\n");
122
-                    return false;
123
-                }
124
-                skipped++;
125
-            } while(true);
126
-            if(skipped)
127
             {
128
-                pivotPrintf("skipped %" PRIu32" frames seeking forward\n",skipped);
129
-                if(pts > refTime)
130
+                if(tmpFrame >= nbFrame)
131
                 {
132
-                    ADM_warning("The video at the specified time in ref is corrupted. Aborting seek\n");
133
+                    ADM_warning("The whole segment is corrupted, aborting seek.\n");
134
                     return false;
135
-                }else
136
-                {
137
-                    minFrame = tmpFrame;
138
                 }
139
-            }
140
-            curFrame = tmpFrame;
141
+                minFrame = tmpFrame;
142
+                worked = v->_aviheader->getPtsDts(tmpFrame,&pts,&dts);
143
+                if(worked && pts != ADM_NO_PTS)
144
+                    break; // found
145
+                tmpFrame++;
146
+            } while(true);
147
+        }
148
+        curFrame = tmpFrame; // resync
149
+        // are we lucky?
150
+        if(pts == refTime)
151
+        {
152
+            pivotPrintf("Perfect match for frame %" PRIu32"\n",curFrame);
153
+            frameNumber = curFrame;
154
+            return true;
155
         }
156
+        // nope, are we at least close enough?
157
+        if(pts != ADM_NO_PTS && pts >= rangeBegin && pts <= rangeEnd)
158
+            break; // switch to linear search
159
+        // nope, continue to bisect
160
         pivotPrintf("SplitMoval=%d\n",splitMoval);
161
-        if(!splitMoval)
162
-            break;        
163
+        if(splitMoval < 16)
164
+            break;
165
         pivotPrintf("Pivot frame is %" PRIu32" at %s\n",curFrame,ADM_us2plain(pts));
166
-        if (pts >= refTime)
167
+        if (pts > refTime)
168
         {
169
             if (curFrame <= splitMoval + minFrame)
170
             {
171
@@ -324,18 +333,47 @@
172
             if(curFrame >= nbFrame)
173
                 curFrame = nbFrame - 1;
174
         }
175
-        if(splitMoval > 1)
176
-            splitMoval++;
177
+        splitMoval++;
178
         splitMoval >>= 1;
179
-        pivotPrintf("Split=%d\n",splitMoval);        
180
     } while(refTime != pts);
181
 
182
-    pivotPrintf("Matching frame is %" PRIu32" at %s\n",curFrame,ADM_us2plain(pts));
183
-    if(pts > refTime && curFrame)
184
-        curFrame--;
185
-    pivotPrintf("Our target frame is %" PRIu32"\n",curFrame);
186
-    frameNumber = curFrame;
187
-    return true;
188
+    // linear search with a generous safety margin
189
+    curFrame = (curFrame < 32)? 0 : curFrame - 32;
190
+    pivotPrintf("Starting linear search at frame %" PRIu32", total frames: %" PRIu32"\n",curFrame,nbFrame);
191
+    int candidate = -1;
192
+    uint64_t last = 0;
193
+    for(int i = 0; i < 65; i++)
194
+    {
195
+        if(curFrame >= nbFrame) break;
196
+        pts = ADM_NO_PTS;
197
+        worked = v->_aviheader->getPtsDts(curFrame,&pts,&dts);
198
+        if(!worked || pts == ADM_NO_PTS)
199
+        {
200
+            pivotPrintf("Linear search, skipping frame %" PRIu32"\n",curFrame);
201
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edStub.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edStub.cpp Changed
21
 
1
@@ -56,18 +56,12 @@
2
   info->nb_frames = _segments.getNbFrames();
3
   if (info->fps1000)
4
     {
5
-      uint32_t     r,  s,  d;
6
+      uint32_t r, s;
7
       // we got 1000 * image /s
8
       // we want rate, scale and duration
9
       //
10
       s = 1000;
11
       r = info->fps1000;
12
-      double   u;
13
-      u = (double) info->fps1000;
14
-      if (u < 10.)
15
-            u = 10.;
16
-      u = 1000000. / u;
17
-      d = (uint32_t) floor (u);;   // 25 fps hard coded
18
       AVIStreamHeader *ily =   _segments.getRefVideo(0)->_aviheader->  getVideoStreamHeader ();
19
       ily->dwRate = r;
20
       ily->dwScale = s;
21
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edVideoCopy.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edVideoCopy.cpp Changed
201
 
1
@@ -20,6 +20,9 @@
2
 #include "ADM_default.h"
3
 #include "ADM_edit.hxx"
4
 #include "ADM_vidMisc.h"
5
+#include "ADM_videoInfoExtractor.h"
6
+#include "ADM_h264_tag.h"
7
+
8
 #if 0
9
 #define aprintf printf
10
 #else
11
@@ -28,132 +31,471 @@
12
 
13
 static int warn_cnt=0;
14
 
15
+static bool checkCodec(aviInfo *first,aviInfo *second)
16
+{
17
+    bool match=false;
18
+#define XCHECK(x) if(!match && x(first->fcc) && x(second->fcc)) { ADM_info("Codecs identified by %s() as matching\n",#x); match=true; }
19
+    XCHECK(isH264Compatible)
20
+    XCHECK(isH265Compatible)
21
+    XCHECK(isMpeg4Compatible)
22
+    XCHECK(isMpeg12Compatible)
23
+    XCHECK(isVC1Compatible)
24
+    XCHECK(isVP9Compatible)
25
+    XCHECK(isVP6Compatible)
26
+    XCHECK(isMSMpeg4Compatible)
27
+    XCHECK(isDVCompatible)
28
+    // catch fourcc values not covered by above
29
+    if(!match && first->fcc == second->fcc)
30
+        match=true;
31
+    return match;
32
+}
33
+
34
 /**
35
-    \fn checkCutsAreOnIntra
36
+    \fn checkSegmentStartsOnIntra
37
     \brief In copy mode, if the cuts are not on intra we will run into trouble :
38
             * We include skipped ref frames: we will have DTS going back error
39
-            * We skip them, we have borked video at cut points due to missing ref framesz
40
-    \return true if everything ok
41
+            * We skip them, we have borked video at cut points due to missing ref frames
42
 */
43
-bool ADM_Composer::checkCutsAreOnIntra(void)
44
+ADM_cutPointType ADM_Composer::checkSegmentStartsOnIntra(uint32_t segNo)
45
 {
46
-    bool fail=false;
47
-    int nbSeg=_segments.getNbSegments();
48
+    if(segNo>=_segments.getNbSegments())
49
+    {
50
+        ADM_error("Requested segment number %d out of range!\n",segNo);
51
+        return ADM_EDITOR_CUT_POINT_IDR;
52
+    }
53
 
54
-    ADMCompressedImage img;
55
-    uint8_t *buffer=new uint8_t[1920*1080*3];
56
-    img.data=buffer;
57
-    ADM_info("Checking cuts start on keyframe..\n");
58
-    for(int i=0;i<nbSeg;i++)
59
+    _SEGMENT *seg=_segments.getSegment(segNo);
60
+    _VIDEOS *vid=_segments.getRefVideo(seg->_reference);
61
+    vidHeader *demuxer=vid->_aviheader;
62
+
63
+    uint32_t oldSeg=_currentSegment;
64
+    uint32_t oldFrame=vid->lastSentFrame;
65
+    uint32_t refNo=seg->_reference;
66
+    uint64_t refstart=(seg->_refStartTimeUs > vid->firstFramePts)? seg->_refStartTimeUs : vid->firstFramePts;
67
+    int frame=0;
68
+    uint8_t *buffer=NULL;
69
+    ADM_cutPointType cut=ADM_EDITOR_CUT_POINT_UNCHECKED;
70
+
71
+#define BOWOUT if(buffer) { delete [] buffer; buffer=NULL; } \
72
+    _currentSegment=oldSeg; vid->lastSentFrame=oldFrame; return cut;
73
+
74
+    if(false==switchToSegment(segNo,true))
75
     {
76
-        _SEGMENT *seg=_segments.getSegment(i);
77
-        _VIDEOS *vid=_segments.getRefVideo(seg->_reference);
78
-        vidHeader *demuxer=vid->_aviheader;
79
+        BOWOUT
80
+    }
81
+    if(false==getFrameNumFromPtsOrBefore(vid,refstart,frame))
82
+    {
83
+        BOWOUT
84
+    }
85
+    // Cursorily check that codec matches if the ref video is not the first one.
86
+    aviInfo info;
87
+    demuxer->getVideoInfo(&info);
88
+    if(refNo)
89
+    {
90
+        aviInfo inf0;
91
+        getVideoInfo(&inf0);
92
+        if(!checkCodec(&info,&inf0))
93
+        {
94
+            ADM_error("Codec doesn't match the one of the first ref video. This is currently unsupported.\n");
95
+            cut=ADM_EDITOR_CUT_POINT_MISMATCH;
96
+            BOWOUT
97
+        }
98
+    }
99
 
100
-        if(false==switchToSegment(i,true))
101
+    uint32_t flags=0;
102
+    uint64_t pts,dts;
103
+    demuxer->getPtsDts(frame,&pts,&dts);
104
+
105
+    // After a seg switch we are at the keyframe before or equal to where we want to go
106
+    // if the dts do not match, it means we went back too much
107
+    // When re-encoding, it's not a problem, it is when copying.
108
+    ADM_info("seg %d: ref %d, refDTS=%" PRIu64"\n",segNo,seg->_reference,seg->_refStartDts);
109
+    ADM_info("seg %d: ref %d, imgDTS=%" PRIu64"\n",segNo,seg->_reference,dts);
110
+    if(!seg->_refStartDts && !seg->_reference)
111
+    {
112
+        ADM_info("Ignoring first seg (unreliable DTS)\n");
113
+    }else if(dts!=ADM_NO_PTS && seg->_refStartDts!=ADM_NO_PTS && dts!=seg->_refStartDts)
114
+    {
115
+        ADM_warning("Segment %d does not start on a known DTS (%" PRIu64" us = %s)\n",segNo,dts,ADM_us2plain(dts));
116
+        ADM_warning("expected: %" PRIu64" us = %s\n",seg->_refStartDts,ADM_us2plain(seg->_refStartDts));
117
+        cut=ADM_EDITOR_CUT_POINT_NON_IDR; // ??
118
+        BOWOUT
119
+    }
120
+    // DTS check passed, now check flags
121
+    demuxer->getFlags(frame,&flags);
122
+    if(!(flags & AVI_KEY_FRAME))
123
+    {
124
+        ADM_warning("Segment %d does not start on a keyframe (time in ref %s)\n",segNo,ADM_us2plain(pts));
125
+        cut=ADM_EDITOR_CUT_POINT_NON_IDR;
126
+        BOWOUT
127
+    }
128
+    // The frame is marked as keyframe
129
+    if(!segNo) // Not a cut point
130
+    {
131
+        cut=ADM_EDITOR_CUT_POINT_IDR;
132
+        BOWOUT
133
+    }
134
+
135
+    // It is a cut, perform codec-specific checks
136
+
137
+#define MAX_NALU_TO_CHECK 4
138
+    static NALU_descriptor desc[MAX_NALU_TO_CHECK];
139
+
140
+    if(isH264Compatible(info.fcc))
141
+    {
142
+        // It is H.264, check deeper. The keyframe may be a non-IDR random access point.
143
+        // If picture order count after a cut is going back, at least FFmpeg-based players
144
+        // like VLC and mpv may get stuck until the next recovery point is reached.
145
+        // First determine stream type
146
+        bool AnnexB=false;
147
+        uint8_t *extra;
148
+        uint32_t extraLen=0;
149
+        demuxer->getExtraHeaderData(&extraLen,&extra);
150
+        if(!extraLen)
151
+            AnnexB=true;
152
+        // Allocate memory to hold compressed frame
153
+        ADMCompressedImage img;
154
+#define MAX_FRAME_LENGTH (1920*1080*3) // ~7 MiB, should be enough even for 4K
155
+        buffer=new uint8_t[MAX_FRAME_LENGTH];
156
+        img.data=buffer;
157
+        // Get SPS to be able to decode the slice header
158
+        ADM_SPSInfo sps;
159
+        bool gotSps=false;
160
+        // Do we have a cached copy?
161
+        if(vid->paramCacheSize==sizeof(ADM_SPSInfo) && vid->paramCache)
162
         {
163
-            fail=true;
164
-            break;
165
+            memcpy(&sps,vid->paramCache,sizeof(ADM_SPSInfo));
166
+            gotSps=true;
167
+        }else
168
+        {
169
+            if(AnnexB)
170
+            {
171
+                if(!demuxer->getFrame(0,&img))
172
+                {
173
+                    ADM_warning("Unable to get the first frame in ref %d, segment %d\n",seg->_reference,segNo);
174
+                    BOWOUT
175
+                }
176
+                int nbNalu=ADM_splitNalu(img.data, img.data+img.dataLength, MAX_NALU_TO_CHECK, desc);
177
+                int spsIndex=ADM_findNalu(NAL_SPS,nbNalu,desc);
178
+                if(spsIndex!=-1)
179
+                    gotSps=extractSPSInfo(desc[spsIndex].start, desc[spsIndex].size, &sps);
180
+            }else
181
+            {
182
+                gotSps=extractSPSInfo(extra,extraLen,&sps);
183
+            }
184
+            if(!gotSps)
185
+            {
186
+                ADM_warning("Cannot retrieve SPS info.\n");
187
+                BOWOUT
188
+            }
189
+            // Store the decoded SPS info in the cache
190
+            vid->paramCacheSize=sizeof(ADM_SPSInfo);
191
+            vid->paramCache=new uint8_t[vid->paramCacheSize]; // will be destroyed with the video
192
+            memcpy(vid->paramCache,&sps,sizeof(ADM_SPSInfo));
193
         }
194
-        if(false==demuxer->getFrame (vid->lastSentFrame,&img))
195
+        // We have SPS, now get the frame we are interested in.
196
+        if(!demuxer->getFrame(frame,&img))
197
         {
198
-            ADM_info("Cannot get 1st frame of segment %d\n",i);
199
-            fail=true;
200
-            break;
201
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_edit.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_edit.cpp Changed
36
 
1
@@ -50,14 +50,12 @@
2
 */
3
 ADM_Composer::ADM_Composer (void)
4
 {
5
-uint32_t type,value;
6
-
7
-
8
   _pp=NULL;
9
   _imageBuffer=NULL;
10
   _internalFlags=0;
11
   _currentSegment=0;
12
   _scratch=NULL;
13
+  _undo_counter=0;
14
   currentProjectName=std::string("");
15
 
16
   _currentPts = 0;
17
@@ -337,7 +335,6 @@
18
   else
19
     {
20
         // Read and construct the audio tracks for that videos
21
-      audioInfo *info;
22
       uint32_t extraLen;
23
       uint8_t  *extraData;
24
       ADM_audioStream *stream;
25
@@ -688,10 +685,6 @@
26
 */
27
 bool ADM_Composer::changeAudioStream(uint64_t xtime,uint32_t newstream)
28
 {
29
-double     duration;
30
-WAVHeader *wav;
31
-aviInfo    info;
32
-uint32_t ref;
33
         int n=_segments.getNbRefVideos();
34
         for(int i=0;i<n;i++)
35
         {
36
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/ADM_segment.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/ADM_segment.cpp Changed
53
 
1
@@ -27,6 +27,7 @@
2
 #include "ADM_codec.h"
3
 #include "DIA_coreToolkit.h"
4
 #include "ADM_vidMisc.h"
5
+#include "prefs.h"
6
 
7
 #if 1
8
 #define aprintf printf
9
@@ -101,12 +102,18 @@
10
   uint8_t      *d;
11
   aviInfo       info;
12
   _SEGMENT      seg;
13
+  uint32_t      cacheSize;
14
+
15
+  if(false==prefs->get(FEATURES_CACHE_SIZE,&cacheSize))
16
+      cacheSize = EDITOR_CACHE_MAX_SIZE;
17
+  if(cacheSize > EDITOR_CACHE_MAX_SIZE) cacheSize = EDITOR_CACHE_MAX_SIZE;
18
+  if(cacheSize < EDITOR_CACHE_MIN_SIZE) cacheSize = EDITOR_CACHE_MIN_SIZE;
19
 
20
   ref->dontTrustBFramePts=ref->_aviheader->unreliableBFramePts();
21
   ref->_aviheader->getVideoInfo (&info);
22
   ref->_aviheader->getExtraHeaderData (&l, &d);
23
   ref->decoder = ADM_getDecoder (info.fcc,  info.width, info.height, l, d,info.bpp);
24
-  ref->_videoCache = new EditorCache(16,info.width,info.height);
25
+  ref->_videoCache = new EditorCache(cacheSize,info.width,info.height);
26
 
27
   // discard implausibly high fps, hardcode the value to 25 fps
28
   if (info.fps1000 > 2000 * 1000)
29
@@ -242,11 +249,13 @@
30
           v->_aviheader->close ();
31
           delete v->_aviheader;
32
       }
33
-    
34
+      if(v->paramCache)
35
+          delete [] v->paramCache;
36
       v->_videoCache=NULL;
37
       v->color=NULL;
38
       v->decoder=NULL;
39
       v->_aviheader=NULL;
40
+      v->paramCache=NULL;
41
      // Delete audio codec too
42
      // audioStream will be deleted by the demuxer
43
 
44
@@ -481,7 +490,7 @@
45
 {
46
     if(!frameTime && segments.size()) // pick the first one
47
     {
48
-        ADM_info("Frame time=0, taking first segment \n");
49
+        //ADM_info("Frame time=0, taking first segment \n");
50
         *seg=0;
51
         *segTime=0; // ??
52
         return true;
53
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioPcm.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioPcm.cpp Changed
9
 
1
@@ -88,7 +88,6 @@
2
 bool ADM_edAudioTrackFromVideo::getPCMPacket(float  *dest, uint32_t sizeMax, uint32_t *samples,uint64_t *odts)
3
 {
4
 uint32_t fillerSample=0;   // FIXME : Store & fix the DTS error correctly!!!!
5
-uint32_t inSize;
6
 bool drop=false;
7
 bool checkDts;
8
 static bool fail=false;
9
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioTrackExternal.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioTrackExternal.cpp Changed
65
 
1
@@ -71,7 +71,36 @@
2
 bool ADM_edAudioTrackExternal::create(uint32_t extraLen, uint8_t *extraData)
3
 {
4
     ADM_info("Initializing audio track from external %s \n",sourceFile.c_str());
5
-    codec=getAudioCodec(wavHeader.encoding,&wavHeader,extraLen,extraData);;
6
+    codec=getAudioCodec(wavHeader.encoding,&wavHeader,extraLen,extraData);
7
+    if(!codec || codec->isDummy())
8
+    {
9
+        ADM_warning("No decoder for %s.\n",getStrFromAudioCodec(wavHeader.encoding));
10
+        return false;
11
+    }
12
+    // Check AAC for SBR
13
+    if(wavHeader.encoding==WAV_AAC)
14
+    {
15
+        uint32_t inlen,max=ADM_EDITOR_PACKET_BUFFER_SIZE;
16
+        notStackAllocator inbuf(max);
17
+        uint8_t *in=inbuf.data;
18
+        uint64_t dts;
19
+        if(false==internalAccess->getPacket(in,&inlen,max,&dts))
20
+        {
21
+            ADM_warning("Cannot get packets.\n");
22
+            return false;
23
+        }
24
+
25
+        notStackAllocator outbuf(wavHeader.frequency*wavHeader.channels*sizeof(float));
26
+        float *out=(float *)outbuf.data;
27
+        uint32_t nbOut,fq=0;
28
+        if(codec->run(in,inlen,out,&nbOut))
29
+            fq=codec->getOutputFrequency();
30
+        if(fq && fq!=wavHeader.frequency)
31
+        {
32
+            ADM_warning("Updating sampling frequency from %u to %u\n",wavHeader.frequency,fq);
33
+            wavHeader.frequency=fq;
34
+        }
35
+    }
36
     size=internalAccess->getLength();
37
     internalAudioStream=ADM_audioCreateStream(&wavHeader,internalAccess,true);
38
     return true;
39
@@ -143,9 +172,14 @@
40
         ADM_warning("Cannot identify external audio track\n");
41
         return NULL;
42
     }
43
-    if(!hdr.channels)
44
+    if(!hdr.channels || hdr.channels > MAX_CHANNELS)
45
+    {
46
+        ADM_error("Number of channels out of bounds, the audio file must have been misidentified!\n");
47
+        return NULL;
48
+    }
49
+    if(hdr.frequency < MIN_SAMPLING_RATE || hdr.frequency > MAX_SAMPLING_RATE)
50
     {
51
-        ADM_error("Got zero channels, the audio file must have been misidentified!\n");
52
+        ADM_error("Sampling frequency out of bounds, the audio file must have been misidentified!\n");
53
         return NULL;
54
     }
55
     // Try to create an access for the file...
56
@@ -197,8 +231,6 @@
57
 bool         ADM_edAudioTrackExternal::getPCMPacket(float  *dest, uint32_t sizeMax, uint32_t *samples,uint64_t *odts)
58
 {
59
 uint32_t fillerSample=0;   // FIXME : Store & fix the DTS error correctly!!!!
60
-uint32_t inSize;
61
-bool      drop=false;
62
 uint32_t outFrequency=getOutputFrequency();
63
 uint32_t outChannels=getOutputChannels();
64
 
65
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edCache.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edCache.cpp Changed
169
 
1
@@ -32,13 +32,14 @@
2
 
3
 EditorCache::EditorCache(uint32_t size,uint32_t w, uint32_t h)
4
 {
5
-   _elem=new cacheElem[size];
6
-   for(uint32_t i=0;i<size;i++)
7
-   {
8
-       _elem[i].image=new ADMImageDefault(w,h);
9
-       _elem[i].pts=ADM_NO_PTS;
10
-   }
11
-   _nbImage=size;
12
+    _elem=new cacheElem[size];
13
+    for(uint32_t i=0;i<size;i++)
14
+    {
15
+        _elem[i].image=new ADMImageDefault(w,h);
16
+        _elem[i].pts=ADM_NO_PTS;
17
+    }
18
+    _nbImage=size;
19
+    ADM_info("Video cache created for %u decoded images.\n",_nbImage);
20
 }
21
 /**
22
     \fn EditorCache
23
@@ -46,11 +47,11 @@
24
 */
25
 EditorCache::~EditorCache(void)
26
 {
27
-   for(uint32_t i=0;i<_nbImage;i++)
28
-   {
29
-       delete _elem[i].image;
30
-   }
31
-   delete[] _elem;
32
+    for(uint32_t i=0;i<_nbImage;i++)
33
+    {
34
+        delete _elem[i].image;
35
+    }
36
+    delete[] _elem;
37
 }
38
 /**
39
 
40
@@ -78,10 +79,8 @@
41
                 the cache is big enough to be immune
42
                 to reuse in the same go
43
 */
44
-ADMImage   *EditorCache::getFreeImage(void)
45
+ADMImage *EditorCache::getFreeImage(void)
46
 {
47
-   uint32_t min=0;
48
-   uint64_t  delta=0;
49
     int found=-1;
50
     check();
51
     // next!
52
@@ -98,10 +97,10 @@
53
     
54
     // Mark it as used
55
     if(found==-1) ADM_assert(0);
56
-   _elem[found].pts=ADM_NO_PTS;;
57
+    _elem[found].pts=ADM_NO_PTS;;
58
     writeIndex++;
59
     aprintf("Using free image at index %d\n",found);
60
-   return _elem[found].image;
61
+    return _elem[found].image;
62
 
63
 }
64
 /**
65
@@ -115,6 +114,7 @@
66
     for(int i=0;i<_nbImage;i++)
67
     {
68
         _elem[i].pts=ADM_NO_PTS;
69
+        _elem[i].image->hwDecRefCount();
70
     }
71
     writeIndex=readIndex=0;
72
 }
73
@@ -127,14 +127,14 @@
74
     for(int i=0;i<_nbImage;i++)
75
     {
76
         if(_elem[i].image==image)
77
-            {
78
-                uint32_t prev=(writeIndex+_nbImage-1)%_nbImage;
79
-                 ADM_assert(i==prev);
80
-                 ADM_assert(_elem[i].pts==ADM_NO_PTS);
81
-                 aprintf("Invalidate writeIndex %" PRIu32"\n",writeIndex);
82
-                 writeIndex--;
83
-                 return;
84
-            }
85
+        {
86
+            uint32_t prev=(writeIndex+_nbImage-1)%_nbImage;
87
+            ADM_assert(i==prev);
88
+            ADM_assert(_elem[i].pts==ADM_NO_PTS);
89
+            aprintf("Invalidate writeIndex %" PRIu32"\n",writeIndex);
90
+            writeIndex--;
91
+            return;
92
+        }
93
     }
94
     printf("[edCache]Image not in cache\n");
95
     ADM_assert(0);
96
@@ -144,20 +144,19 @@
97
         \brief update the frameNo associated to a cache line (obsolete)
98
                Only used to mark it as valid
99
 */
100
-bool       EditorCache::validate(ADMImage *image)
101
+bool EditorCache::validate(ADMImage *image)
102
 {
103
-   for(uint32_t i=0;i<_nbImage;i++)
104
-   {
105
-       if(_elem[i].image==image)
106
-       {
107
+    for(uint32_t i=0;i<_nbImage;i++)
108
+    {
109
+        if(_elem[i].image==image)
110
+        {
111
             ADM_assert(_elem[i].pts==ADM_NO_PTS);
112
-           _elem[i].pts=image->Pts;
113
+            _elem[i].pts=image->Pts;
114
             aprintf("validate Index %" PRIu32" with pts=%" PRIu64"ms\n",i,image->Pts);
115
-           return true;
116
-       }
117
-
118
-   }
119
-   ADM_assert(0);
120
+            return true;
121
+        }
122
+    }
123
+    ADM_assert(0);
124
     return false;
125
 }
126
 /**
127
@@ -172,9 +171,9 @@
128
       cacheElem *e=&(_elem[i]);
129
       switch(e->pts)
130
         {
131
-            case ADM_NO_PTS:  printf("Not used %d\n",i);break;
132
+            case ADM_NO_PTS:  printf("Not used %02d\n",i);break;
133
             default:
134
-                printf("Edcache content[%d]: PTS : %s %" PRIu64" ms\n",i,
135
+                printf("Edcache content[%02d]: PTS : %s %" PRIu64" ms\n",i,
136
                                                                     ADM_us2plain(e->image->Pts),e->image->Pts/1000);
137
                 break;
138
         }
139
@@ -189,7 +188,7 @@
140
 {
141
     if(!writeIndex) return NULL;
142
     for(uint32_t i=readIndex;i<writeIndex-1;i++)
143
-   {
144
+    {
145
         int index=i%_nbImage;
146
         ADM_assert(_elem[index].pts!=ADM_NO_PTS);
147
         if(_elem[index].pts==pts)
148
@@ -227,7 +226,7 @@
149
 ADMImage    *EditorCache::getBefore(uint64_t pts)
150
 {
151
     for(int i=readIndex+1;i<writeIndex;i++)
152
-   {
153
+    {
154
         int index=i%_nbImage;
155
         ADM_assert(_elem[index].pts!=ADM_NO_PTS);
156
         if(_elem[index].pts==pts)
157
@@ -249,9 +248,9 @@
158
 ADMImage *EditorCache::getByPts(uint64_t Pts)
159
 {
160
     for(int i=readIndex;i<writeIndex;i++)
161
-   {
162
+    {
163
         int index=i%_nbImage;
164
-       if(_elem[index].image->Pts==Pts)
165
+        if(_elem[index].image->Pts==Pts)
166
         {
167
             return _elem[index].image;
168
         }
169
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp Changed
9
 
1
@@ -316,7 +316,6 @@
2
 bool ADM_Composer::checkForDoubledFps(vidHeader *hdr,uint64_t timeIncrementUs)
3
 {       
4
     int totalFrames=hdr->getVideoStreamHeader()->dwLength;
5
-    int good=0,bad=0;
6
     uint64_t dtsCeil= (timeIncrementUs*18)/10;
7
     std::vector<uint64_t> dtsList,ptsList;
8
     std::vector<int> validDtsList,validPtsList;
9
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edPtsDts.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edPtsDts.cpp Changed
58
 
1
@@ -35,7 +35,6 @@
2
 */
3
 bool ADM_verifyDts(vidHeader *hdr,uint64_t timeIncrementUs)
4
 {
5
-        int nbMissing=0;
6
         aviInfo info;
7
         hdr->getVideoInfo(&info);
8
         uint32_t nbFrames=0;
9
@@ -556,10 +555,7 @@
10
     *delay=0;
11
     int last=0;
12
     int nbFrames;
13
-    int nbBframe=0;
14
-    int maxBframe=0;
15
     uint32_t flags;
16
-    int nbB=0;
17
     uint64_t pts,dts;
18
 
19
     ADM_info("computing dts...\n");
20
@@ -577,19 +573,15 @@
21
         }
22
         if(flags & AVI_B_FRAME)
23
         {
24
-                
25
-                nbB++;
26
                 dts=pts;
27
                 hdr->setPtsDts(i,pts,dts);
28
                 continue;
29
         }
30
    
31
         uint64_t oldPts,oldDts;
32
-        uint64_t fwdPts,fwdDts;
33
           hdr->getPtsDts(last,&oldPts,&oldDts);
34
           dts=oldPts;
35
           hdr->setPtsDts(i,pts,dts);
36
-        nbBframe=0;
37
         last=i;
38
     }
39
     return 1;
40
@@ -602,7 +594,7 @@
41
 bool updatePtsAndDts(vidHeader *hdr,uint64_t timeIncrementUs,uint64_t *delay)
42
 {
43
     aviInfo info;
44
-    uint64_t offset,pts,dts;
45
+    uint64_t pts,dts;
46
     uint32_t nbFrames;
47
     uint64_t myDelay=0;
48
     *delay=0;
49
@@ -655,7 +647,7 @@
50
                     {
51
                         double deltaTime=dts-backDts;
52
                         deltaTime=deltaTime/(deltaFrame);
53
-                        if(deltaTime>41700 & deltaTime<41800)
54
+                        if(deltaTime>41700 && deltaTime<41800)
55
                         {
56
                             for(int j=backIndex+1;j<i;j++)
57
                             {
58
avidemux_2.7.3.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edUndoQueue.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_editor/src/utils/ADM_edUndoQueue.cpp Changed
88
 
1
@@ -24,14 +24,14 @@
2
 
3
 bool ADM_Composer::addToUndoQueue(void)
4
 {
5
-    // truncate the dead branch first if we add a new element to the undo queue after _cnt-1 undo steps
6
-    if(_cnt>1 && undoQueue.size()>1)
7
+    // truncate the dead branch first if we add a new element to the undo queue after _undo_counter-1 undo steps
8
+    if(_undo_counter>1 && undoQueue.size()>1)
9
     {
10
-        for(uint32_t i=0;i<_cnt;i++)
11
+        for(uint32_t i=0;i<_undo_counter;i++)
12
         {
13
             undoQueue.pop_back();
14
         }
15
-        ADM_info("Deleted last %d elements from the undo queue\n",_cnt);
16
+        ADM_info("Deleted last %d elements from the undo queue\n",_undo_counter);
17
     }
18
     // now populate the new element...
19
     undoQueueElem rec;
20
@@ -52,7 +52,7 @@
21
     // ...and store the new element in the queue
22
     undoQueue.push_back(rec);
23
     ADM_info("The undo queue has now %d element(s)\n",undoQueue.size());
24
-    _cnt=0; // redo should not be available after a new undo-able action has been performed
25
+    _undo_counter=0; // redo should not be available after a new undo-able action has been performed
26
     return true;
27
 }
28
 
29
@@ -68,19 +68,19 @@
30
         ADM_info("The undo queue is empty, nothing to do\n");
31
         return false;
32
     }
33
-    if(!_cnt) // no undo steps performed yet, thus we don't have the current state in the undo queue
34
+    if(!_undo_counter) // no undo steps performed yet, thus we don't have the current state in the undo queue
35
     {
36
         // store the current state in the queue and bump the tracker
37
         // to account for the queue becoming one element longer
38
         addToUndoQueue();
39
-        _cnt=1;
40
+        _undo_counter=1;
41
     }
42
-    undoQueueElem rec=undoQueue.at(undoQueue.size()-_cnt-1);
43
-    ADM_info("Restoring the state recorded in the element %d starting with 1 of %d\n",undoQueue.size()-_cnt,undoQueue.size());
44
+    undoQueueElem rec=undoQueue.at(undoQueue.size()-_undo_counter-1);
45
+    ADM_info("Restoring the state recorded in the element %d starting with 1 of %d\n",undoQueue.size()-_undo_counter,undoQueue.size());
46
     _segments.setSegments(rec.segm);
47
     setMarkerAPts(rec.markerA);
48
     setMarkerBPts(rec.markerB);
49
-    _cnt++;
50
+    _undo_counter++;
51
     return true;
52
 }
53
 
54
@@ -96,12 +96,12 @@
55
         ADM_info("The redo queue is empty, cannot perform redo\n");
56
         return false;
57
     }
58
-    undoQueueElem rec=undoQueue.at(undoQueue.size()-_cnt+1);
59
-    ADM_info("Restoring the state recorded in the element %d starting with 1 of %d\n",undoQueue.size()-_cnt+2,undoQueue.size());
60
+    undoQueueElem rec=undoQueue.at(undoQueue.size()-_undo_counter+1);
61
+    ADM_info("Restoring the state recorded in the element %d starting with 1 of %d\n",undoQueue.size()-_undo_counter+2,undoQueue.size());
62
     _segments.setSegments(rec.segm);
63
     setMarkerAPts(rec.markerA);
64
     setMarkerBPts(rec.markerB);
65
-    _cnt--;
66
+    _undo_counter--;
67
     return true;
68
 }
69
 
70
@@ -121,7 +121,7 @@
71
 
72
 bool ADM_Composer::canUndo(void)
73
 {
74
-    if(undoQueue.empty() || undoQueue.size()<_cnt+1)
75
+    if(undoQueue.empty() || undoQueue.size()<_undo_counter+1)
76
         return false;
77
     return true;
78
 }
79
@@ -132,7 +132,7 @@
80
 
81
 bool ADM_Composer::canRedo(void)
82
 {
83
-    if(_cnt<2 || undoQueue.size()<_cnt) // _cnt=2 once the first undo operation has been performed
84
+    if(_undo_counter<2 || undoQueue.size()<_undo_counter) // _undo_counter=2 once the first undo operation has been performed
85
         return false;
86
     return true;
87
 }
88
avidemux_2.7.3.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopy.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopy.cpp Changed
10
 
1
@@ -150,7 +150,7 @@
2
     if(true==eofMet) return false;
3
 again:
4
     image.data=out->data;
5
-    if(false==video_body->getCompressedPicture(videoDelay,sanitizeDts,&image))
6
+    if(false==video_body->getCompressedPicture(rewindTime,videoDelay,sanitizeDts,&image))
7
     {
8
             ADM_warning("Get packet failed\n");
9
             return false;
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopyFromAnnexB.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopyFromAnnexB.cpp Changed
17
 
1
@@ -98,7 +98,6 @@
2
     //mixDump(img.data,img.dataLength);
3
     int nbNalu=ADM_splitNalu(myBitstream->data,myBitstream->data+myBitstream->len,MAX_NALU_PER_CHUNK,desc);
4
     // search sps
5
-    uint8_t *spsStart,*ppsStart;
6
     uint32_t spsLen=0, ppsLen=0;
7
     int indexSps,indexPps;
8
 
9
@@ -449,7 +448,6 @@
10
 bool ADM_videoStreamCopyToAnnexB::getPacket(ADMBitstream *out)
11
 {
12
     AVPacket pktOut;
13
-    int size;
14
     bool keyFrame=false;
15
 
16
     aprintf("-------%d--------\n",(int)currentFrame);
17
avidemux_2.7.3.tar.gz/avidemux/common/ADM_osSupport/ADM_crashHook.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_osSupport/ADM_crashHook.cpp Changed
11
 
1
@@ -88,7 +88,8 @@
2
                 A_Resync();
3
             }
4
      }
5
-        unlink(where);
6
+        if(!ADM_eraseFile(where))
7
+            ADM_warning("Could not delete %s\n",where);
8
   }else
9
   {
10
     printf("No crash file (%s)\n",where);
11
avidemux_2.7.3.tar.gz/avidemux/common/ADM_preview.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_preview.cpp Changed
51
 
1
@@ -39,21 +39,14 @@
2
 #include "ADM_render/GUI_render.h"
3
 #include "ADM_commonUI/GUI_ui.h"
4
 #include "ADM_preview.h"
5
-#include "ADM_imageResizer.h"
6
 #include "DIA_coreToolkit.h"
7
 
8
 extern uint8_t              UI_getPhysicalScreenSize(void* window, uint32_t *w,uint32_t *h);
9
-static void                 previewBlit(ADMImage *from,ADMImage *to,uint32_t startx,uint32_t starty);
10
+//static void                 previewBlit(ADMImage *from,ADMImage *to,uint32_t startx,uint32_t starty);
11
 static ADM_PREVIEW_MODE     previewMode=ADM_PREVIEW_NONE;
12
 
13
 static bool                 defered_display=false;  /* When 1, it means we are in playback mode */
14
 static float                zoom=ZOOM_1_1;
15
-static ADMImage             *resized=NULL;
16
-static ADMImageResizer      *resizer=NULL;
17
-
18
-
19
-extern bool GUI_GoToTime(uint64_t time); // hack, might be a circular dep
20
-
21
 
22
 /*************************************/
23
 ADMImage *admPreview::rdrImage=NULL; /* Unprocessed image */
24
@@ -105,7 +98,7 @@
25
       UI_getPhysicalScreenSize(NULL, &phyW,&phyH);
26
       if(3*phyW<4*w || 3*phyH<4*h)
27
       {
28
-          if(phyW<w/2 || phyH<h/2)
29
+          if(5*phyW<4*w || 5*phyH<4*h)
30
           {
31
                     nzoom=ZOOM_1_4;
32
           }else
33
@@ -215,7 +208,6 @@
34
 /**
35
       \fn previewBlit(ADMImage *from,ADMImage *to,uint32_t startx,uint32_t starty)
36
       \brief Blit "from" to "to" at position startx,starty
37
-*/
38
 
39
 void previewBlit(ADMImage *from,ADMImage *to,uint32_t startx,uint32_t starty)
40
 {
41
@@ -230,9 +222,6 @@
42
 
43
 void admPreview::displayNow(void)
44
 {
45
-
46
-    uint32_t fl,len;   
47
-    
48
     switch(previewMode)
49
     {
50
       case ADM_PREVIEW_NONE:
51
avidemux_2.7.3.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/include/ADM_coreD3D.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/include/ADM_coreD3D.h Changed
7
 
1
@@ -47,4 +47,5 @@
2
         static IDirect3D9       *getHandle();
3
         static bool              isDirect9Ex();
4
         static ADM_vendorID      getVendorID();
5
+        static int64_t           getDriverVersion();
6
 };
7
avidemux_2.7.3.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/src/ADM_coreD3D.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/src/ADM_coreD3D.cpp Changed
38
 
1
@@ -51,6 +51,7 @@
2
 static IDirect3DDevice9      *d3d9device   = NULL;
3
 static IDirect3DDevice9Ex    *d3d9deviceex = NULL;
4
 static admD3D::ADM_vendorID  d3dVendorId  =  admD3D::VENDOR_UNKNOWN;
5
+static int64_t               d3dDriverVersion = 0;
6
 
7
 static bool isD3D9Ex=false;
8
 
9
@@ -125,9 +126,12 @@
10
     {
11
         ADM_warning("GetAdapterIdentifier failed\n");
12
         d3dVendorId=admD3D::VENDOR_UNKNOWN;
13
+        d3dDriverVersion=0;
14
     }else
15
     {
16
-        ADM_info("D3D Device: %s Vendor: %x Device:%x Rev:%x\n", id.Description,id.VendorId, id.DeviceId, id.Revision );
17
+        ADM_info("D3D Device: %s, Vendor: %x, Device: %x, Rev: %x, Driver Version: %" PRId64"\n",
18
+                id.Description, id.VendorId, id.DeviceId, id.Revision, id.DriverVersion.QuadPart);
19
+        d3dDriverVersion=id.DriverVersion.QuadPart;
20
         switch(id.VendorId)
21
         {
22
         case  0x1002: d3dVendorId=admD3D::VENDOR_AMD;break;
23
@@ -269,6 +273,14 @@
24
 }
25
 
26
 /**
27
+    \fn getDriverVersion
28
+*/
29
+int64_t admD3D::getDriverVersion(void)
30
+{
31
+    return d3dDriverVersion;
32
+}
33
+
34
+/**
35
  */
36
 bool admD3D::cleanup(void)
37
 {
38
avidemux_2.7.3.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/src/ADM_coreDxva2.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_render/ADM_coreDxva2/src/ADM_coreDxva2.cpp Changed
78
 
1
@@ -20,9 +20,9 @@
2
 #include "ADM_coreD3D.h"
3
 #ifdef USE_DXVA2
4
 
5
-#if 1
6
-#define aprintf printf
7
 #define DUMP_GUID
8
+#if 0
9
+#define aprintf printf
10
 #else
11
 #define aprintf(...) {}
12
 #endif
13
@@ -73,10 +73,11 @@
14
 } dxva2_mode;
15
 /**
16
  */
17
-static int ALIGN(int x,int align)
18
+static int ALIGN(int x,int align,bool verbose=false)
19
 {
20
     int y= ((x+(align-1)) &(~(align-1)));
21
-    aprintf("Align %d,%d => %d\n",x,align,y);
22
+    if(verbose)
23
+        printf("Align %d,%d => %d\n",x,align,y);
24
     return y;
25
 }
26
 
27
@@ -423,17 +424,25 @@
28
     D3DFORMAT fmt;
29
     fmt=dxvaBitsToFormat(bits);
30
 
31
-    if(!admD3D::isDirect9Ex())
32
+    bool share=admD3D::isDirect9Ex();
33
+    if(share)
34
     {
35
-    
36
      hr = D3DCall(IDirectXVideoDecoderService,CreateSurface,decoder_service,
37
                                                    width,
38
                                                    height,
39
                                                    num-1,
40
                                                    fmt, D3DPOOL_DEFAULT, 0,
41
                                                    DXVA2_VideoDecoderRenderTarget,
42
-                                                   surfaces, NULL);
43
-    }else
44
+                                                   surfaces, &sh);
45
+        if(ADM_FAILED(hr))
46
+        {
47
+            // Requesting resource sharing on Windows 7 may result in a failure to allocate surfaces.
48
+            // On Windows 10, not requesting a shared handle seems to impact energy efficiency.
49
+            ADM_warning("Cannot allocate D3D9 surfaces with resource sharing, retrying without.\n");
50
+            share=false;
51
+        }
52
+    }
53
+    if(!share)
54
     {
55
      hr = D3DCall(IDirectXVideoDecoderService,CreateSurface,decoder_service,
56
                                                    width,
57
@@ -441,8 +450,7 @@
58
                                                    num-1,
59
                                                    fmt, D3DPOOL_DEFAULT, 0,
60
                                                    DXVA2_VideoDecoderRenderTarget,
61
-                                                   surfaces, &sh);
62
-        
63
+                                                   surfaces, NULL);
64
     }
65
      if(ADM_FAILED(hr))
66
      {
67
@@ -566,8 +574,8 @@
68
 IDirectXVideoDecoder  *admDxva2::createDecoder(AVCodecID codec, int with, int height, int numSurface, LPDIRECT3DSURFACE9 *surface,int align,int bits)
69
 {
70
     Dxv2SupportMap *cmap;
71
-    int paddedWidth=ALIGN(with,align);
72
-    int paddedHeight=ALIGN(height,align);
73
+    int paddedWidth=ALIGN(with,align,true);
74
+    int paddedHeight=ALIGN(height,align,true);
75
     switch(codec)
76
     {
77
         case AV_CODEC_ID_H264:
78
avidemux_2.7.3.tar.gz/avidemux/common/ADM_render/CMakeLists.txt -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_render/CMakeLists.txt Changed
10
 
1
@@ -74,7 +74,7 @@
2
 ENDIF (USE_DXVA2)
3
 
4
 IF (USE_XV)
5
-   TARGET_LINK_LIBRARIES(${ADM_LIB} ${XVIDEO_LIBRARY_DIR})
6
+   TARGET_LINK_LIBRARIES(${ADM_LIB} ${XVIDEO_LIBRARY_DIR} ${XEXT_LIBRARY_DIR})
7
 ENDIF (USE_XV)
8
 TARGET_LINK_LIBRARIES(${ADM_LIB}  ADM_coreUtils6)
9
 
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_render/GUI_dxva2Render.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_render/GUI_dxva2Render.cpp Changed
117
 
1
@@ -30,7 +30,7 @@
2
 
3
 
4
 
5
-#if 1
6
+#if 0
7
 #define aprintf printf
8
 #else
9
 #define aprintf(...) {}
10
@@ -77,6 +77,7 @@
11
 
12
   protected:
13
                         admMutex        lock;
14
+                        bool            failure;
15
                         GUI_WindowInfo  info;
16
                         IDirect3DSurface9 *mySurface;
17
                         IDirect3DSurface9 *myYV12Surface;
18
@@ -115,7 +116,7 @@
19
     videoBuffer=NULL;
20
     videoWidget=NULL;
21
     d3dHandle=admD3D::getHandle();
22
-
23
+    failure=false;
24
 }
25
 /**
26
     \fn dxvaRender
27
@@ -571,47 +572,52 @@
28
 {
29
   // this does not work, both surfaces are coming from different device
30
 
31
-  IDirect3DSurface9 *bBuffer;
32
-  POINT point={0,0};
33
-  // OK
34
-  ADM_info("surface duplicated\n");
35
-  if( ADM_FAILED(D3DCall(IDirect3DDevice9,GetBackBuffer,d3dDevice, 0, 0,
36
-                                              D3DBACKBUFFER_TYPE_MONO,
37
-                                              &bBuffer)))
38
-  {
39
-      ADM_warning("D3D Cannot create backBuffer\n");
40
-      return false;
41
-  }
42
-
43
-  // can we directly use the surface from dxva ? (can we at all ?)
44
-  if (ADM_FAILED(D3DCall(IDirect3DDevice9,StretchRect,d3dDevice,
45
-                  surface->surface,
46
-                  NULL,
47
-                  bBuffer,
48
-                  NULL,
49
-                  D3DTEXF_LINEAR)))
50
-  {
51
-    ADM_warning("StretchRec yv12 failed\n");
52
-    // go to indirect route
53
-    if(!pic->hwDownloadFromRef())
54
+    if(!failure)
55
     {
56
-        ADM_warning("Failed to download yv12 from dxva\n");
57
-        return false;
58
+        IDirect3DSurface9 *bBuffer;
59
+        if( ADM_FAILED(D3DCall(IDirect3DDevice9,GetBackBuffer,d3dDevice, 0, 0,
60
+                               D3DBACKBUFFER_TYPE_MONO,
61
+                               &bBuffer)))
62
+        {
63
+            ADM_warning("D3D Cannot create backBuffer\n");
64
+            return false;
65
+        }
66
+        // OK
67
+        ADM_info("surface duplicated\n");
68
+
69
+        // can we directly use the surface from dxva ? (can we at all ?)
70
+        if (ADM_FAILED(D3DCall(IDirect3DDevice9,StretchRect,d3dDevice,
71
+                               surface->surface,
72
+                               NULL,
73
+                               bBuffer,
74
+                               NULL,
75
+                               D3DTEXF_LINEAR)))
76
+        {
77
+            ADM_warning("StretchRec yv12 failed\n");
78
+            failure=true;
79
+        }
80
+    }else
81
+    {
82
+        // go to indirect route
83
+        if(!pic->hwDownloadFromRef())
84
+        {
85
+            ADM_warning("Failed to download yv12 from dxva\n");
86
+            return false;
87
+        }
88
+        // workaround : use default non bridged path
89
+        if(useYV12)
90
+        {
91
+            return displayImage_yv12(pic);
92
+        }
93
+        return displayImage_argb(pic);
94
     }
95
-    // workaround : use default non bridged path
96
-    if(useYV12)
97
+    IDirect3DDevice9_BeginScene(d3dDevice);
98
+    IDirect3DDevice9_EndScene(d3dDevice);
99
+    if( ADM_FAILED(IDirect3DDevice9_Present(d3dDevice, &targetRect, 0, 0, 0)))
100
     {
101
-         return displayImage_yv12(pic);
102
+        ADM_warning("D3D Present failed\n");
103
     }
104
-    return displayImage_argb(pic);
105
-  }
106
-  IDirect3DDevice9_BeginScene(d3dDevice);
107
-  IDirect3DDevice9_EndScene(d3dDevice);
108
-  if( ADM_FAILED(IDirect3DDevice9_Present(d3dDevice, &targetRect, 0, 0, 0)))
109
-  {
110
-    ADM_warning("D3D Present failed\n");
111
-  }
112
-  return true;
113
+    return true;
114
 }
115
 
116
 /**
117
avidemux_2.7.3.tar.gz/avidemux/common/ADM_toolkit/automation.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_toolkit/automation.cpp Changed
71
 
1
@@ -49,7 +49,6 @@
2
 static void saveCB(char*name);
3
 static void loadCB(char *name);
4
 static int set_output_format(const char *str);
5
-static void set_reuse_2pass_log(char *p);
6
 static void setVar(char *in);
7
 extern void UI_closeGui();
8
 //_________________________________________________________________________
9
@@ -77,27 +76,25 @@
10
 #define avs_port_change "avisynth-port"
11
 AUTOMATON reaction_table[]=
12
 {
13
-    
14
     {"append",                 1, "append video",                                                              (one_arg_type)A_appendVideo},
15
-    {"audio-codec",            1, "set audio codec (MP2/MP3/AC3/NONE (WAV PCM)/TWOLAME/COPY)",                 (one_arg_type)call_audiocodec},
16
-    {avs_port_change,          1, "set avsproxy port accordingly",                                             (one_arg_type)A_set_avisynth_port},    
17
-    {"help",                   0, "print this",                                                                (one_arg_type)call_help},    
18
-    {"info",                   0, "show information about loaded video and audio streams",                     (one_arg_type)show_info},    
19
-    {"list-audio-languages",   0, "list all available audio langues",                                          (one_arg_type)list_audio_languages},        
20
+    {"audio-codec",            1, "set audio codec (copy|Lame|FDK_AAC|LavAC3|Opus|TwoLame|...)",               (one_arg_type)call_audiocodec},
21
+    {avs_port_change,          1, "set avsproxy port accordingly",                                             (one_arg_type)A_set_avisynth_port},
22
+    {"help",                   0, "print this",                                                                (one_arg_type)call_help},
23
+    {"info",                   0, "show information about loaded video and audio streams",                     (one_arg_type)show_info},
24
+    {"list-audio-languages",   0, "list all available audio langues",                                          (one_arg_type)list_audio_languages},
25
     {"load",                   1, "load video or workbench",                                                   (one_arg_type)loadCB},
26
     {"nogui",                  0, "Run in silent mode",                                                        (one_arg_type)GUI_Quiet},
27
-    {"output-format",          1, "set output format (AVI|OGM|ES|PS|AVI_DUAL|AVI_UNP|...)",                    (one_arg_type)set_output_format},
28
+    {"output-format",          1, "set output format (MKV|MP4|ffTS|ffPS|AVI|RAW|...)",                         (one_arg_type)set_output_format},
29
     {"quit",                   0, "exit avidemux",                                                             (one_arg_type)call_quit},
30
-    {"slave",                  1, "run as slave, master is on port arg",                                       (one_arg_type)call_slave},    
31
-    {"reuse-2pass-log",        0, "reuse 2pass logfile if it exists",                                          (one_arg_type)set_reuse_2pass_log},        
32
+    {"slave",                  1, "run as slave, master is on port arg",                                       (one_arg_type)call_slave},
33
     {"run",                    1, "load and run a script",                                                     (one_arg_type)call_scriptEngine},
34
     {"save",                   1, "save video",                                                                (one_arg_type)saveCB},
35
     {"save-jpg",               1, "save a jpeg",                                                               (one_arg_type)A_saveJpg},
36
     {"save-raw-audio",         1, "save audio as-is ",                                                         (one_arg_type)A_saveAudioCopy},
37
     {"save-uncompressed-audio",1, "save uncompressed audio",                                                   (one_arg_type)A_saveAudioProcessed},
38
-    {"set-audio-language",     2, "Set language of an active audio track {track_index} {language_short_name}", (one_arg_type)A_setAudioLang},    
39
-    {"var",                    1, "set var (--var myvar=3)",                                                   (one_arg_type)setVar},    
40
-    {"video-codec",            1, "set video codec (x264/...)",                                                (one_arg_type)call_videocodec},    
41
+    {"set-audio-language",     2, "Set language of an active audio track {track_index} {language_short_name}", (one_arg_type)A_setAudioLang},
42
+    {"var",                    1, "set var (--var myvar=3)",                                                   (one_arg_type)setVar},
43
+    {"video-codec",            1, "set video codec (Copy|x264|x265|xvid4|ffMpeg2|ffNvEnc|...)",                (one_arg_type)call_videocodec},
44
 };
45
 #define NB_AUTO (sizeof(reaction_table)/sizeof(AUTOMATON))
46
 
47
@@ -204,7 +201,6 @@
48
                     myargc-=1+reaction_table[index].have_arg;
49
                 }
50
     } // end while
51
-    GUI_Verbose();
52
     printf("\n ********** Automation ended***********\n");
53
     return 0; // Do not call me anymore
54
 }
55
@@ -498,15 +494,6 @@
56
 
57
 /**
58
  * 
59
- * @param p
60
- */
61
-void set_reuse_2pass_log(char *p)
62
-{
63
-   prefs->set(FEATURES_REUSE_2PASS_LOG,true);
64
-}
65
-
66
-/**
67
- * 
68
  * @param name
69
  */
70
 void  loadCB(char *name)
71
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoCodec/private_inc/ADM_codecDxva2.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoCodec/private_inc/ADM_codecDxva2.h Changed
16
 
1
@@ -4,11 +4,11 @@
2
  */
3
 
4
 
5
-#include <BVector.h>
6
 #include "ADM_threads.h"
7
+#include "ADM_edCache.h"
8
+#include "ADM_filterThread.h"
9
 
10
-#define ADM_DXVA2_BUFFER 24
11
-#define ADM_MAX_SURFACE 24
12
+#define ADM_MAX_SURFACE (EDITOR_CACHE_MAX_SIZE + ADM_THREAD_QUEUE_SIZE + 16)
13
 /**
14
       \struct surface_info
15
 */
16
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp Changed
150
 
1
@@ -37,11 +37,10 @@
2
 #include "prefs.h"
3
 #include "ADM_coreDxva2.h"
4
 #include "../private_inc/ADM_codecDxva2.h"
5
-#include "ADM_threads.h"
6
 #include "ADM_vidMisc.h"
7
-#include "prefs.h"
8
 
9
 static bool         dxva2Working=false;
10
+static int          totalSurfaces=0;
11
 static int  ADM_DXVA2getBuffer(AVCodecContext *avctx, AVFrame *pic,int flags);
12
 static void ADM_DXVA2releaseBuffer(void *s, uint8_t *d);
13
 static admMutex     imageMutex;
14
@@ -194,9 +193,13 @@
15
 }
16
 
17
 
18
-
19
-
20
-
21
+static const char *humanReadable(int64_t version)
22
+{
23
+    char str[49];
24
+    snprintf(str,48,"%u.%u.%u.%u", (version>>48) & 0xFFFF, (version>>32) & 0xFFFF, (version>>16) & 0xFFFF, version & 0xFFFF);
25
+    str[48]=0;
26
+    return ADM_strdup(str);
27
+}
28
 
29
 extern "C"
30
 {
31
@@ -204,10 +207,12 @@
32
 static enum AVPixelFormat ADM_DXVA2_getFormat(struct AVCodecContext *avctx,  const enum AVPixelFormat *fmt)
33
 {
34
     int i;
35
+    bool ignore_version, ignore_profile;
36
     ADM_info("[DXVA2]: GetFormat\n");
37
     AVCodecID id=AV_CODEC_ID_NONE;
38
     AVPixelFormat c;
39
     AVPixelFormat outPix;
40
+    ignore_version=ignore_profile=false;
41
     for(i=0;fmt[i]!=AV_PIX_FMT_NONE;i++)
42
     {
43
         c=fmt[i];
44
@@ -219,25 +224,39 @@
45
 
46
         if(c!=AV_PIX_FMT_DXVA2_VLD) continue;
47
 #define FMT_V_CHECK(x,y)      case AV_CODEC_ID_##x:   outPix=AV_PIX_FMT_DXVA2_VLD;id=avctx->codec_id;break;
48
-
49
+#define INTEL_MIN_DRIVER_VERSION_FOR_HEVC 7036960323672538 // 25.20.100.6618
50
 
51
         switch(avctx->codec_id)  //AV_CODEC_ID_H265
52
         {
53
             FMT_V_CHECK(H264,H264)
54
             case AV_CODEC_ID_H265:
55
-              {
56
-                    admD3D::ADM_vendorID vid=admD3D::getVendorID();
57
-                    if(vid==admD3D::VENDOR_INTEL)
58
+            {
59
+                admD3D::ADM_vendorID vid=admD3D::getVendorID();
60
+                int64_t drv=admD3D::getDriverVersion();
61
+                if(vid==admD3D::VENDOR_INTEL && drv<INTEL_MIN_DRIVER_VERSION_FOR_HEVC)
62
+                {
63
+                    prefs->get(FEATURES_DXVA2_OVERRIDE_BLACKLIST_VERSION,&ignore_version);
64
+                    const char *minversion=humanReadable(INTEL_MIN_DRIVER_VERSION_FOR_HEVC);
65
+                    if(!ignore_version)
66
                     {
67
-                        ADM_warning("Intel blacklisted for H265 decoding \n");
68
+                        ADM_warning("Intel driver version %s < %s is blacklisted for HEVC decoding.\n",humanReadable(drv),minversion);
69
+                        continue;
70
                     }
71
-                    else
72
+                    ADM_warning("Overriding Intel driver version blacklist for %s\n",humanReadable(drv));
73
+                }else if(vid==admD3D::VENDOR_INTEL && dxvaBitDepthFromContext(avctx)==10)
74
+                {
75
+                    prefs->get(FEATURES_DXVA2_OVERRIDE_BLACKLIST_PROFILE,&ignore_profile);
76
+                    if(!ignore_profile)
77
                     {
78
-                      outPix=AV_PIX_FMT_DXVA2_VLD;
79
-                      id=avctx->codec_id;
80
+                        ADM_warning("Intel is blacklisted for 10bit HEVC.\n");
81
+                        continue;
82
                     }
83
-              }
84
-              break;
85
+                    ADM_warning("Overriding blacklist for 10bit HEVC on Intel.\n");
86
+                }
87
+                outPix=AV_PIX_FMT_DXVA2_VLD;
88
+                id=avctx->codec_id;
89
+            }
90
+            break;
91
             //FMT_V_CHECK(H265,H265)
92
             default:
93
                 ADM_info("DXVA2 No hw support for format %d\n",avctx->codec_id);
94
@@ -308,7 +327,14 @@
95
     memset(dx_context,0,sizeof(*dx_context)); // dangerous...
96
 
97
     // Allocate temp buffer
98
-    num_surfaces=4;
99
+    uint32_t cacheSize;
100
+    if(!prefs->get(FEATURES_CACHE_SIZE,&cacheSize))
101
+        cacheSize = EDITOR_CACHE_MAX_SIZE;
102
+    if(cacheSize > EDITOR_CACHE_MAX_SIZE) cacheSize = EDITOR_CACHE_MAX_SIZE;
103
+    if(cacheSize < EDITOR_CACHE_MIN_SIZE) cacheSize = EDITOR_CACHE_MIN_SIZE;
104
+    num_surfaces = cacheSize;
105
+    if(!totalSurfaces)
106
+        num_surfaces+=ADM_THREAD_QUEUE_SIZE;
107
 
108
     switch(avctx->codec_id)
109
     {
110
@@ -367,8 +393,9 @@
111
     dx_context->surface_count   = num_surfaces;
112
     dx_context->cfg             = admDxva2::getDecoderConfig(avctx->codec_id,bits);
113
 
114
-    ADM_info("Ctor Successfully setup DXVA2 hw accel (%d surface created, ffdxva=%p,parent=%p,context=%p)\n",num_surfaces,this,parent,avctx);
115
     alive=true;
116
+    totalSurfaces+=num_surfaces;
117
+    ADM_info("Successfully setup DXVA2 hw accel (%d surface created, %d total, ffdxva=%p,parent=%p,context=%p)\n",num_surfaces,totalSurfaces,this,parent,avctx);
118
 }
119
 
120
 /**
121
@@ -379,6 +406,7 @@
122
     if(alive)
123
     {
124
         admDxva2::destroyD3DSurface(num_surfaces,surfaces);
125
+        totalSurfaces-=num_surfaces;
126
         // TODO : flush pool
127
     }
128
     if(_context->hwaccel_context)
129
@@ -414,8 +442,9 @@
130
 {
131
 
132
    imageMutex.lock();
133
-   surface->refCount--;
134
-   aprintf("Surface %x, Ref count is now %d\n",surface->surface,surface->refCount);
135
+   if(surface->refCount>0)
136
+       surface->refCount--;
137
+   aprintf("Surface 0x%p, Ref count is now %d\n",surface->surface,surface->refCount);
138
    if(!surface->refCount)
139
    {
140
         surface->removeRef();
141
@@ -482,8 +511,6 @@
142
 
143
     int ret = avcodec_receive_frame(_context, frame);
144
 
145
-    if(!ret)
146
-        _parent->setEndOfStream(false);
147
     if(!_parent->decodeErrorHandler(ret))
148
         return false;
149
 
150
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_libva.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_libva.cpp Changed
10
 
1
@@ -528,8 +528,6 @@
2
 
3
     int ret = avcodec_receive_frame(_context, frame);
4
 
5
-    if(!ret)
6
-        _parent->setEndOfStream(false);
7
     if(!_parent->decodeErrorHandler(ret))
8
         return false;
9
 
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_vdpau.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_vdpau.cpp Changed
20
 
1
@@ -344,8 +344,8 @@
2
                 }
3
                 delete r;
4
             }
5
-            vdpau.fullQueue.clear();
6
         }
7
+        vdpau.fullQueue.clear();
8
 }
9
 /**
10
     \fn uncompress
11
@@ -397,8 +397,6 @@
12
 
13
     int ret = avcodec_receive_frame(_context, frame);
14
 
15
-    if(!ret)
16
-        _parent->setEndOfStream(false);
17
     if(!_parent->decodeErrorHandler(ret))
18
         return false;
19
 
20
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_videotoolbox.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoCodec/src/ADM_ffmpeg_videotoolbox.cpp Changed
10
 
1
@@ -167,8 +167,6 @@
2
 
3
     int ret = avcodec_receive_frame(_context, frame);
4
 
5
-    if(!ret)
6
-        _parent->setEndOfStream(false);
7
     if(!_parent->decodeErrorHandler(ret))
8
         return false;
9
 
10
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoFilter2/include/ADM_filterThread.h -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoFilter2/include/ADM_filterThread.h Changed
16
 
1
@@ -16,7 +16,13 @@
2
 #define ADM_FILTER_THREAD_H
3
 #include "ADM_coreVideoFilter.h"
4
 #include "ADM_threadQueue.h"
5
-#define ADM_THREAD_QUEUE_SIZE 8
6
+
7
+// From the UX POV, it is nice to have the currently displayed frame still
8
+// in the editor cache so that a seek back to the current frame succeeds
9
+// instantly when stopping playback. The fixed size of the queue should not
10
+// exceed the minimum cache size - 2 for this purpose.
11
+#define ADM_THREAD_QUEUE_SIZE 6
12
+
13
 /**
14
  *  \class ADM_videoFilterQueue
15
  *  \brief
16
avidemux_2.7.3.tar.gz/avidemux/common/ADM_videoFilter2/src/ADM_filterThread.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/ADM_videoFilter2/src/ADM_filterThread.cpp Changed
28
 
1
@@ -107,7 +107,7 @@
2
             // If no item, thread still alive ?
3
             if(threadState==RunStateStopped)
4
             {
5
-                ADM_info("Audio thread stopped, no more data\n");
6
+                ADM_info("Video thread stopped, no more data\n");
7
                 mutex->unlock();
8
                 return false;
9
             }
10
@@ -134,7 +134,7 @@
11
     {
12
         if(threadState==RunStateStopOrder)  
13
         {
14
-            ADM_info("Audio Thread, received stop order\n");
15
+            ADM_info("Video thread, received stop order\n");
16
             goto theEnd;
17
         }
18
         mutex->lock();
19
@@ -145,7 +145,7 @@
20
         }
21
         if(threadState==RunStateStopOrder)  
22
         {
23
-            ADM_info("Audio Thread, received stop order\n");
24
+            ADM_info("Video thread, received stop order\n");
25
             mutex->unlock();
26
             goto theEnd;
27
         }
28
avidemux_2.7.3.tar.gz/avidemux/common/GUI_jobs.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/GUI_jobs.cpp Changed
10
 
1
@@ -31,7 +31,7 @@
2
 uint32_t nb;
3
         memset(jobName,0,sizeof(jobName));
4
         const char *jobDir=ADM_getJobDir();
5
-        if(!buildDirectoryContent(&nb,ADM_getJobDir(),jobName,MAX_JOBS,".py"))
6
+        if(!buildDirectoryContent(&nb,ADM_getJobDir(),jobName,MAX_JOBS,"py"))
7
         {
8
           delete [] jobDir;
9
           GUI_Error_HIG(QT_TRANSLATE_NOOP("jobs","Oops"),QT_TRANSLATE_NOOP("jobs","Something very wrong happened when building joblist."));
10
avidemux_2.7.3.tar.gz/avidemux/common/gui_main.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/gui_main.cpp Changed
201
 
1
@@ -52,7 +52,7 @@
2
 admMutex singleThread;
3
 
4
 float currentZoom=ZOOM_1_1;
5
-static bool cutsNotOnIntraWarned;
6
+static int cutsNotOnIntraWarned;
7
 #include "DIA_audioTracks.h"
8
 //***********************************
9
 //******** A Function ***************
10
@@ -142,9 +142,6 @@
11
 }
12
 void HandleAction (Action action)
13
 {
14
-  uint32_t nf = 0;
15
-  uint32_t old;
16
-
17
   admScopedMutex autolock(&singleThread); // make sure only one thread at a time calls this
18
   
19
   ADM_warning("************ %s **************\n",getActionName(action));
20
@@ -264,9 +261,8 @@
21
                     std::string f=LAST_SESSION_FILE;
22
                     if(ADM_fileExist(f.c_str()))
23
                     {
24
-                        int err=remove(f.c_str());
25
-                        if(err)
26
-                            ADM_warning("Error %d deleting last editing state %s\n",err,f.c_str());
27
+                        if(!ADM_eraseFile(f.c_str()))
28
+                            ADM_warning("Could not delete last editing state %s\n",f.c_str());
29
                     }
30
                 }
31
                 return;
32
@@ -564,17 +560,47 @@
33
               {
34
                   video_body->pasteFromClipBoard(currentPts);
35
               }
36
-              if(!UI_getCurrentVCodec() && !video_body->checkCutsAreOnIntra())
37
+              ADM_cutPointType chk=ADM_EDITOR_CUT_POINT_IDR;
38
+              if(!UI_getCurrentVCodec())
39
+                  chk=video_body->checkCutsAreOnIntra();
40
+              if(cutsNotOnIntraWarned!=(int)chk && chk!=ADM_EDITOR_CUT_POINT_IDR)
41
               {
42
-                  if(!GUI_Question(QT_TRANSLATE_NOOP("adm","The cut points of the pasted video are not on keyframes.\n"
43
-                      "Video saved in copy mode will be corrupted at these points.\n"
44
-                      "Proceed anyway?")))
45
+                  const char *alert;
46
+                  bool ask=true;
47
+                  switch(chk)
48
+                  {
49
+                      case ADM_EDITOR_CUT_POINT_NON_IDR:
50
+                          alert=QT_TRANSLATE_NOOP("adm","The cut points of the pasted video are not on keyframes.\n"
51
+                              "Video saved in copy mode will be corrupted at these points.\n"
52
+                              "Proceed anyway?");
53
+                          break;
54
+                      case ADM_EDITOR_CUT_POINT_RECOVERY:
55
+                          alert=QT_TRANSLATE_NOOP("adm","This video uses non-IDR recovery points instead of IDR as keyframes. "
56
+                              "Picture reordering information in the video stream is not reset at non-IDR frames. "
57
+                              "The cut points of the pasted selection may result in playback interruption "
58
+                              "due to reversed display order of frames if saved in copy mode.\n"
59
+                              "Proceed anyway?");
60
+                          break;
61
+                      case ADM_EDITOR_CUT_POINT_MISMATCH:
62
+                          alert=QT_TRANSLATE_NOOP("adm","Codec or codec settings across a cut point of the pasted video do not match.\n"
63
+                              "Playback of the video saved in copy mode may stop at this point.\n"
64
+                              "Proceed anyway?");
65
+                          break;
66
+                      case ADM_EDITOR_CUT_POINT_UNCHECKED:
67
+                          alert=QT_TRANSLATE_NOOP("adm","Cut points of the pasted video could not be checked. "
68
+                              "This indicates an issue with a source video, the state of editing or a bug in the program. "
69
+                              "Please check the application log file or console output for details.\n"
70
+                              "Try anyway?");
71
+                      default:
72
+                          ask=false; break;
73
+                  }
74
+                  if(ask && !GUI_Question(alert))
75
                   {
76
                       video_body->undo();
77
-                      cutsNotOnIntraWarned=false;
78
+                      cutsNotOnIntraWarned=-1;
79
                       break;
80
                   }
81
-                  cutsNotOnIntraWarned=true;
82
+                  cutsNotOnIntraWarned=(int)chk;
83
               }
84
               video_body->getVideoInfo (avifileinfo);
85
               d=video_body->getVideoDuration()-d;
86
@@ -692,27 +718,64 @@
87
                 GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Cutting"),QT_TRANSLATE_NOOP("adm","Error while cutting out."));
88
                 break;
89
             }
90
-            if(!cutsNotOnIntraWarned && !lastFrame && !UI_getCurrentVCodec() && !video_body->checkCutIsOnIntra(a))
91
+            ADM_cutPointType chk=ADM_EDITOR_CUT_POINT_IDR;
92
+            if(!lastFrame && !UI_getCurrentVCodec())
93
+                chk=video_body->checkCutIsOnIntra(a);
94
+            if(cutsNotOnIntraWarned!=(int)chk && chk!=ADM_EDITOR_CUT_POINT_IDR)
95
             {
96
                 const char *alert;
97
-                if(action==ACT_Cut)
98
+                bool ask=true;
99
+                switch(chk)
100
                 {
101
-                    alert=QT_TRANSLATE_NOOP("adm","The end point of the cut is not on a keyframe.\n"
102
-                        "Video saved in copy mode will be corrupted at this point.\n"
103
-                        "Proceed anyway?");
104
-                }else
105
-                {
106
-                    alert=QT_TRANSLATE_NOOP("adm","The end point of the deletion is not on a keyframe.\n"
107
-                        "Video saved in copy mode will be corrupted at this point.\n"
108
-                        "Proceed anyway?");
109
+                    case ADM_EDITOR_CUT_POINT_NON_IDR:
110
+                        if(action==ACT_Cut)
111
+                            alert=QT_TRANSLATE_NOOP("adm","The end point of the cut is not on a keyframe.\n"
112
+                                "Video saved in copy mode will be corrupted at this point.\n"
113
+                                "Proceed anyway?");
114
+                        else
115
+                            alert=QT_TRANSLATE_NOOP("adm","The end point of the deletion is not on a keyframe.\n"
116
+                                "Video saved in copy mode will be corrupted at this point.\n"
117
+                                "Proceed anyway?");
118
+                        break;
119
+                    case ADM_EDITOR_CUT_POINT_RECOVERY:
120
+                        if(action==ACT_Cut)
121
+                            alert=QT_TRANSLATE_NOOP("adm","This video uses non-IDR recovery points instead of IDR as keyframes. "
122
+                                "Picture reordering information in the video stream is not reset at non-IDR frames. "
123
+                                "The chosen start and end points of the cut may result in playback interruption "
124
+                                "due to reversed display order of frames if saved in copy mode.\n"
125
+                                "Proceed anyway?");
126
+                        else
127
+                            alert=QT_TRANSLATE_NOOP("adm","This video uses non-IDR recovery points instead of IDR as keyframes. "
128
+                                "Picture reordering information in the video stream is not reset at non-IDR frames. "
129
+                                "The chosen start and end points of the deletion may result in playback interruption "
130
+                                "due to reversed display order of frames if saved in copy mode.\n"
131
+                                "Proceed anyway?");
132
+                        break;
133
+                    case ADM_EDITOR_CUT_POINT_MISMATCH:
134
+                        if(action==ACT_Cut)
135
+                            alert=QT_TRANSLATE_NOOP("adm","Codec or codec settings across the cut do not match. "
136
+                                "Playback of the video saved in copy mode may stop at this point.\n"
137
+                                "Proceed anyway?");
138
+                        else
139
+                            alert=QT_TRANSLATE_NOOP("adm","Codec or codec settings across the deletion do not match. "
140
+                                "Playback of the video saved in copy mode may stop at this point.\n"
141
+                                "Proceed anyway?");
142
+                        break;
143
+                    case ADM_EDITOR_CUT_POINT_UNCHECKED:
144
+                        alert=QT_TRANSLATE_NOOP("adm","Cut points could not be checked.\n"
145
+                            "This indicates an issue with a source video, the state of editing or a bug in the program. "
146
+                            "Please check the application log file or console output for details.\n"
147
+                            "Proceed anyway?");
148
+                        break;
149
+                    default: ask=false; break;
150
                 }
151
-                if(!GUI_Question(alert))
152
+                if(ask && !GUI_Question(alert))
153
                 {
154
                     video_body->undo();
155
-                    cutsNotOnIntraWarned=false;
156
+                    cutsNotOnIntraWarned=-1;
157
                     break;
158
                 }
159
-                cutsNotOnIntraWarned=true;
160
+                cutsNotOnIntraWarned=(int)chk;
161
             }
162
             A_ResetMarkers();
163
             A_Resync(); // total duration & stuff
164
@@ -854,6 +917,7 @@
165
 
166
     {
167
         int i;
168
+#if 0
169
         FILE *fd = NULL;
170
         char magic[4];
171
 
172
@@ -861,7 +925,6 @@
173
          ** by video_body->addFile (name);
174
          */
175
         //#warning FIXME
176
-#if 0
177
         if ((fd = ADM_fopen(longname, "rb")))
178
         {
179
             if (fread(magic, 4, 1, fd) == 4)
180
@@ -1036,8 +1099,6 @@
181
 
182
 void ReSync (void)
183
 {
184
-  uint8_t isaviaud;
185
-
186
   // update audio stream
187
   // If we were on avi , mark it...
188
   GUI_setAllFrameAndTime ();
189
@@ -1192,8 +1253,9 @@
190
     delete writer;
191
     
192
     std::string script = stream.str();
193
-    ADM_info("Generated settings=%s\n",script.c_str());
194
-    
195
+    ADM_info("Generated settings:\n");
196
+    printf("%s\n",script.c_str());
197
+
198
     FILE *file = ADM_fopen(fileName.c_str(), "wt");
199
     ADM_fwrite(script.c_str(), script.length(), 1, file);
200
     ADM_fclose(file);
201
avidemux_2.7.3.tar.gz/avidemux/common/gui_navigate.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/gui_navigate.cpp Changed
22
 
1
@@ -213,8 +213,6 @@
2
 */
3
 void GUI_NextFrame(uint32_t frameCount)
4
 {
5
-    // uint8_t *ptr;
6
-    uint32_t flags;
7
     if (playing)
8
     return;
9
     if (!avifileinfo)
10
@@ -297,11 +295,6 @@
11
 
12
 void GUI_PreviousKeyFrame(void)
13
 {
14
-
15
-    uint32_t f;
16
-    uint32_t flags;
17
-
18
-
19
     if (playing)
20
     return;
21
     if (!avifileinfo)
22
avidemux_2.7.3.tar.gz/avidemux/common/gui_play.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/gui_play.cpp Changed
51
 
1
@@ -118,8 +118,6 @@
2
         return;
3
     }
4
 
5
-    uint32_t framelen,flags;
6
-    uint32_t max,err;
7
     uint64_t oldTimeFrame,newTimeFrame;
8
     aviInfo info;
9
     float oldZoom=admPreview::getCurrentZoom();
10
@@ -342,11 +340,9 @@
11
                 delta=(int32_t)movieTime-(int32_t)systemTime;
12
             }
13
         }
14
-      }
15
+    }
16
     while (!stop_req);
17
-
18
-abort_play:
19
-        return true;
20
+    return true;
21
 };
22
 
23
 /**
24
@@ -456,13 +452,13 @@
25
       }
26
       fill+=small_;
27
     }
28
-    AVDM_AudioPlay(wavbuf, fill);
29
     // Let audio latency sets in...
30
     ticktock.reset();
31
+    AVDM_AudioPlay(wavbuf, fill);
32
+    updateVu();
33
+#if 0
34
     uint32_t slice=(frequency * channels)/100; // 10 ms
35
     // pump data until latency is over
36
-    updateVu();
37
-    #if 0
38
     while(ticktock.getElapsedMS()<latency)
39
     {
40
         if(AVDM_getMsFullness()<AUDIO_PRELOAD)
41
@@ -477,8 +473,8 @@
42
        ADM_usleep(10*1000);
43
        updateVu();
44
     }
45
-    #endif
46
     printf("[Playback] Latency is now %u\n",ticktock.getElapsedMS());
47
+#endif
48
     return true;
49
 }
50
 /**
51
avidemux_2.7.3.tar.gz/avidemux/common/gui_save.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/gui_save.cpp Changed
80
 
1
@@ -118,8 +118,8 @@
2
                 }else
3
                 {
4
                     std::string oFile;
5
-                    char *oText=NULL;
6
-                    
7
+                    std::string prefilled=std::string("Job ")+ADM_getTimeDateAsString();
8
+                    char *oText=ADM_strdup(prefilled.c_str());
9
                     diaElemFile wFile(1,oFile,QT_TRANSLATE_NOOP("adm","Output file"),"");
10
                     diaElemText wText(&oText,QT_TRANSLATE_NOOP("adm","Job name"));
11
                     diaElem *elems[2]={&wText,&wFile};
12
@@ -147,7 +147,7 @@
13
 #endif
14
     case ACT_SAVE_AUDIO:
15
     {
16
-        std:string ext;
17
+        std::string ext;
18
         if(false==audioSavePrepare(&ext))
19
             break;
20
         if(ext.size())
21
@@ -226,7 +226,7 @@
22
 */
23
 static bool A_saveAudioCommon (const char *name,ADM_audioStream *stream,double duration)
24
 {
25
-  uint32_t written, max;
26
+  uint32_t written;
27
   uint64_t dts;
28
   DIA_workingBase *work;
29
 #define ONE_STRIKE (64*1024)
30
@@ -248,7 +248,6 @@
31
 
32
   work=createWorking(QT_TRANSLATE_NOOP("adm","Saving audio"));
33
 
34
-  uint64_t timeEnd,timeStart;
35
   uint32_t hold,len,sample;
36
   uint64_t tgt_sample,cur_sample;
37
 
38
@@ -666,21 +665,36 @@
39
     IScriptEngine *engine=getPythonScriptEngine();
40
             if(!engine)
41
             {
42
-                GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Queue"),QT_TRANSLATE_NOOP("adm","Cannot get tinyPÿ script engine"));
43
+                GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Error"),QT_TRANSLATE_NOOP("adm","Cannot get tinyPy script engine"));
44
                 return;
45
             }
46
 
47
             job.outputFileName=string(outputFile);
48
+            if(job.outputFileName.empty())
49
+            {
50
+                GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Error"),QT_TRANSLATE_NOOP("adm","Output file not specified"));
51
+                return;
52
+            }
53
             job.jobName=string(jobName);
54
 //#warning make sure it is unique
55
             job.scriptName=string(jobName)+string(".")+engine->defaultFileExtension();
56
-            if(false==ADMJob::jobAdd(job))
57
+            string completePath=string(ADM_getJobDir());
58
+            completePath+=job.scriptName;
59
+            bool collision=false;
60
+            if(ADM_fileExist(completePath.c_str()))
61
+            {
62
+                char str[4096+512+1];
63
+                str[0]='\0';
64
+                snprintf(str,4096+512+1,QT_TRANSLATE_NOOP("adm","Job script %s already exists. Overwrite?"),completePath.c_str());
65
+                str[4096+512]='\0';
66
+                if(false==GUI_Question(str))
67
+                    collision=true;
68
+            }
69
+            if(collision || false==ADMJob::jobAdd(job))
70
             {
71
-                GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Queue"),QT_TRANSLATE_NOOP("adm","Cannot add job %s"),jobName);
72
+                GUI_Error_HIG(QT_TRANSLATE_NOOP("adm","Error"),QT_TRANSLATE_NOOP("adm","Cannot add job %s"),jobName);
73
                 return;
74
             }
75
-            string completePath=string(ADM_getJobDir());
76
-            completePath=completePath+string("/")+job.scriptName;
77
             // Save the script...
78
 
79
             A_saveScript(engine, completePath.c_str());
80
avidemux_2.7.3.tar.gz/avidemux/common/gui_savenew.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/gui_savenew.cpp Changed
82
 
1
@@ -174,7 +174,7 @@
2
     if(videoDuration<5000) videoDuration=5000;
3
     printf("[Save] Performing Pass one,using %s as log file\n",logFileName.c_str());
4
     
5
-    if(ADM_fileExist(logFileName.c_str()))
6
+    if(false==GUI_isQuiet() && ADM_fileExist(logFileName.c_str()))
7
     {
8
         if(GUI_Question(QT_TRANSLATE_NOOP("adm","Reuse previous first pass data ?\nWarning, the settings must be close.")))
9
         {
10
@@ -435,27 +435,47 @@
11
 
12
 bool admSaver::save(void)
13
 {
14
-
15
-
16
     int ret=false;
17
-    
18
-    
19
+
20
     ADM_info("Audio starting time %s\n",ADM_us2plain(startAudioTime));
21
     ADM_info("[A_Save] Saving..\n");
22
-    
23
-    
24
-    EditableAudioTrack *ed=NULL;
25
-    
26
+
27
     if(!videoEncoderIndex) 
28
     {
29
-        if(false==video_body-> checkCutsAreOnIntra())
30
+        ADM_cutPointType chk=video_body->checkCutsAreOnIntra(startAudioTime,markerB);
31
+        const char *alert;
32
+        bool ask=true;
33
+        switch(chk)
34
         {
35
-            if(!GUI_Question(QT_TRANSLATE_NOOP("adm","The video is in copy mode but the cut points are not on keyframes.\n"
36
-                            "The video will be saved but there will be corruption at cut point(s).\n"
37
-                             "Do you want to continue anyway ?")))
38
-            {
39
-                return false;
40
-            }
41
+            case ADM_EDITOR_CUT_POINT_NON_IDR:
42
+                alert=QT_TRANSLATE_NOOP("adm","The video is in copy mode but the cut points are not on keyframes.\n"
43
+                    "The video will be saved but there will be corruption at cut point(s).\n"
44
+                    "Do you want to continue anyway ?");
45
+                break;
46
+            case ADM_EDITOR_CUT_POINT_RECOVERY:
47
+                alert=QT_TRANSLATE_NOOP("adm","This video uses non-IDR recovery points instead of IDR as keyframes. "
48
+                    "Picture reordering information in the video stream is not reset at non-IDR frames. "
49
+                    "The choice of cut points may result in playback interruption "
50
+                    "due to reversed display order of frames if saved in copy mode.\n"
51
+                    "Do you want to continue anyway?");
52
+                break;
53
+            case ADM_EDITOR_CUT_POINT_MISMATCH:
54
+                alert=QT_TRANSLATE_NOOP("adm","Codec or codec settings across a cut point do not match. "
55
+                    "Playback of the video saved in copy mode may stop at this point.\n"
56
+                    "Do you want to continue anyway?");
57
+                break;
58
+            case ADM_EDITOR_CUT_POINT_UNCHECKED:
59
+                alert=QT_TRANSLATE_NOOP("adm","Cut points could not be checked. "
60
+                    "This indicates an issue with a source video, the state of editing or a bug in the program. "
61
+                    "Please check the application log file or console output for details.\n"
62
+                    "Try anyway?");
63
+                break;
64
+            default:
65
+                ask=false; break;
66
+        }
67
+        if(ask && !GUI_Question(alert))
68
+        {
69
+            return false;
70
         }
71
     }
72
 
73
@@ -493,7 +513,7 @@
74
         ret=muxer->save();
75
         muxer->close();
76
     }
77
-abort123:
78
+
79
     if(video)
80
         delete video;
81
     video=NULL;
82
avidemux_2.7.3.tar.gz/avidemux/common/main.cpp -> avidemux_2.7.4.tar.gz/avidemux/common/main.cpp Changed
62
 
1
@@ -33,14 +33,15 @@
2
 #include "audio_out.h"
3
 #include "ADM_assert.h"
4
 #include "adm_main.h"
5
+#include "ADM_render/GUI_render.h"
6
 
7
 void abortExitHandler(void);
8
 
9
-typedef struct flavors
10
+typedef struct
11
 {
12
         const char *qt4;
13
         const char *qt5;
14
-};
15
+}flavors;
16
 
17
 static flavors myFlavors={"qt4","qt5"};
18
 
19
@@ -57,7 +58,7 @@
20
 
21
 #if defined(_WIN32) && (ADM_UI_TYPE_BUILD == ADM_UI_GTK || ADM_UI_TYPE_BUILD == ADM_UI_QT4) 
22
    // redirect output before registering exception handler so error dumps are captured
23
-   redirectStdoutToFile();
24
+   redirectStdoutToFile("admlog.txt");
25
 #endif
26
 
27
    installSigHandler();
28
@@ -427,25 +428,25 @@
29
 */
30
 bool setPrefsDefault(void)
31
 {
32
-#ifdef __MINGW32__
33
+#ifdef _WIN32
34
         prefs->set(AUDIO_DEVICE_AUDIODEVICE,std::string("Win32"));
35
-    #ifdef USE_OPENGL
36
-        prefs->set(VIDEODEVICE,(uint32_t)5); // QTGL
37
+    #ifdef USE_DXVA2
38
+        prefs->set(VIDEODEVICE,(uint32_t)RENDER_DXVA2);
39
     #endif
40
 #endif
41
 #ifdef __linux__
42
-            prefs->set(AUDIO_DEVICE_AUDIODEVICE,std::string("PulseAudioS"));
43
+        prefs->set(AUDIO_DEVICE_AUDIODEVICE,std::string("PulseAudioS"));
44
     #ifdef USE_VDPAU
45
-            prefs->set(VIDEODEVICE,(uint32_t)4); // VDPAU
46
-    #else
47
-            prefs->set(VIDEODEVICE,(uint32_t)1); // XV
48
+        prefs->set(VIDEODEVICE,(uint32_t)RENDER_VDPAU);
49
+    #elif defined(USE_XV)
50
+        prefs->set(VIDEODEVICE,(uint32_t)RENDER_XV);
51
     #endif
52
 #endif
53
 #ifdef __APPLE__
54
         prefs->set(AUDIO_DEVICE_AUDIODEVICE,std::string("CoreAudio"));
55
     #ifdef USE_OPENGL
56
         prefs->set(FEATURES_ENABLE_OPENGL,true);
57
-        prefs->set(VIDEODEVICE,(uint32_t)5); // QTGL
58
+        prefs->set(VIDEODEVICE,(uint32_t)RENDER_QTOPENGL);
59
     #endif
60
 #endif
61
     return true;
62
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_UIs/src/DIA_flyDialog.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_UIs/src/DIA_flyDialog.cpp Changed
33
 
1
@@ -384,8 +384,12 @@
2
 }
3
 void ADM_flyDialogYuv::resetScaler(void)
4
 {
5
-    if(yuvToRgb) delete yuvToRgb;
6
-    yuvToRgb=NULL;
7
+    if(yuvToRgb) 
8
+    {
9
+        delete yuvToRgb;
10
+        yuvToRgb=NULL;
11
+    }
12
+    
13
     yuvToRgb=new ADMColorScalerFull(ADM_CS_BICUBIC, 
14
                             _w,
15
                             _h,
16
@@ -393,8 +397,16 @@
17
                             _zoomH,
18
                             ADM_COLOR_YV12,toRgbColor());
19
 }
20
+/**
21
+ * 
22
+ */
23
 ADM_flyDialogYuv::~ADM_flyDialogYuv()
24
 {
25
+    if(yuvToRgb)
26
+    {
27
+        delete yuvToRgb;
28
+        yuvToRgb=NULL;
29
+    }
30
     if(_yuvBufferOut) delete _yuvBufferOut;
31
     _yuvBufferOut=NULL;
32
     if(_control)
33
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_UIs/src/FAC_frame.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_UIs/src/FAC_frame.cpp Changed
10
 
1
@@ -70,7 +70,7 @@
2
    QVBoxLayout *vboxlayout = new QVBoxLayout(groupBox);
3
    QLayout *layout2 = NULL;
4
    int currentLayout = 0;
5
-   int v;
6
+   int v = 0;
7
 
8
    for (int i = 0; i < nbElems; i++)
9
    {
10
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_UIs/src/T_RubberControl.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_UIs/src/T_RubberControl.cpp Changed
16
 
1
@@ -103,14 +103,9 @@
2
     transparentSizeGrip *grip2 = new transparentSizeGrip(this);
3
     grip1->setFixedSize(10,10);
4
     grip2->setFixedSize(10,10);
5
-    grip1->setVisible(true);
6
-    grip2->setVisible(true);
7
     layout->addWidget(grip1, 0, Qt::AlignLeft | Qt::AlignTop);
8
     layout->addWidget(grip2, 0, Qt::AlignRight | Qt::AlignBottom);
9
     rubberband = new ADM_QRubberBand(this);
10
-    rubberband->move(0, 0);
11
-    rubberband->show();
12
-    show();
13
 }
14
 
15
 /**
16
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_UIs/src/T_dialogFactory.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_UIs/src/T_dialogFactory.cpp Changed
66
 
1
@@ -45,22 +45,19 @@
2
         factoryCookie(const char *title)
3
         {
4
             dialog=new QDialog(qtLastRegisteredDialog());
5
-            qtRegisterDialog(dialog);
6
             dialog->setWindowTitle(QString::fromUtf8(title));
7
-            vboxlayout = new QVBoxLayout();
8
-            
9
+            vboxlayout = new QVBoxLayout(dialog);
10
             tabWidget=NULL;
11
             layout=NULL;
12
-            
13
         }
14
         virtual ~factoryCookie()
15
         {
16
+            if(vboxlayout)
17
+                delete vboxlayout;
18
             if(dialog)
19
-            {
20
-                qtUnregisterDialog(dialog);
21
                 delete dialog;
22
-            }
23
             dialog=NULL;
24
+            vboxlayout=NULL;
25
         }
26
 public:
27
         QDialog     *dialog;
28
@@ -146,6 +143,8 @@
29
 
30
    cookie->dialog->setLayout(cookie->vboxlayout);
31
 
32
+   qtRegisterDialog(cookie->dialog);
33
+
34
   if(cookie->dialog->exec()==QDialog::Accepted)
35
   {
36
      int nb=cookie->items.size();
37
@@ -156,6 +155,9 @@
38
       }
39
      r=true;
40
   }
41
+
42
+  qtUnregisterDialog(cookie->dialog);
43
+
44
   delete cookie;
45
   return r;
46
 }
47
@@ -226,6 +228,8 @@
48
      cookie->dialog->adjustSize();
49
      cookie->tabWidget->setUsesScrollButtons(true);
50
 
51
+    qtRegisterDialog(cookie->dialog);
52
+
53
     if(cookie->dialog->exec()==QDialog::Accepted)
54
     {
55
         // Read tabs
56
@@ -233,7 +237,8 @@
57
         for(int i=0;i<n;i++)
58
             cookie->items[i]->getMe();
59
         r=true;
60
-    }    
61
+    }
62
+    qtUnregisterDialog(cookie->dialog);
63
     delete cookie;
64
     return r;
65
 }
66
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_UIs/src/toolkit.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_UIs/src/toolkit.cpp Changed
42
 
1
@@ -13,27 +13,29 @@
2
     if (widgetStack.count())
3
     {
4
         Qt::WindowFlags flags = dialog->windowFlags();
5
+#if defined(__APPLE__) // && QT_VERSION == QT_VERSION_CHECK(5,10,1)
6
+        //ADM_info("Working around Qt bug introduced in 5.10.1 resulting in non-resizable dialogs with Cocoa\n");
7
+
8
+        // Work around a presumable Qt bug which allows application-modal parents of application-modal dialogs to receive focus.
9
+        dialog->setWindowFlag(Qt::Dialog, false);
10
+        dialog->setParent(widgetStack.top(), Qt::Window);
11
+        flags = dialog->windowFlags();
12
+        flags |= Qt::CustomizeWindowHint;
13
+        flags &= ~Qt::WindowMinimizeButtonHint;
14
+        flags &= ~Qt::WindowFullscreenButtonHint;
15
+        dialog->setWindowFlags(flags);
16
+        dialog->setWindowModality(Qt::ApplicationModal);
17
+#else
18
         bool reparent = false;
19
         bool isDialog = false;
20
         if (dialog->parentWidget() != widgetStack.top())
21
             reparent = true;
22
         if (flags & Qt::Dialog)
23
             isDialog = true;
24
-#if defined(__APPLE__) && QT_VERSION == QT_VERSION_CHECK(5,10,1)
25
-        if (reparent || isDialog)
26
-        {
27
-            ADM_info("Working around Qt bug introduced in 5.10.1 resulting in non-resizable dialogs with Cocoa\n");
28
-            dialog->setWindowFlag(Qt::Dialog, false);
29
-            dialog->setParent(widgetStack.top(), Qt::Window);
30
-            dialog->setWindowModality(Qt::ApplicationModal);
31
-            dialog->show();
32
-        }
33
-#else
34
         if (reparent || !isDialog)
35
         {
36
             ADM_info("reparenting widget %s\n",dialog->objectName().toUtf8().constData());
37
             dialog->setParent(widgetStack.top(), Qt::Dialog);
38
-            dialog->show(); // reparenting makes the widget invisible
39
         }
40
 #endif
41
     }
42
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobControl.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobControl.cpp Changed
11
 
1
@@ -207,6 +207,9 @@
2
 bool jobRun(int ac,char **av)
3
 {
4
     initTranslator();
5
+#if defined(_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5,11,0)
6
+    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
7
+#endif
8
     QApplication *app=new QApplication(ac,av,0);
9
     Q_INIT_RESOURCE(jobs);
10
     loadTranslator();
11
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp Changed
32
 
1
@@ -37,8 +37,10 @@
2
 */
3
 int main(int argc, char *argv[])
4
 {
5
-#if defined(_WIN32) && !defined(_MSC_VER) // This causes problem when installed in program files, for whatever reasons, when not run as admin
6
-   redirectStdoutToFile();
7
+    ADM_initBaseDir(argc,argv);
8
+
9
+#if defined(_WIN32) 
10
+    redirectStdoutToFile("jobslog.txt");
11
 #endif
12
 
13
 #if !defined(NDEBUG) && defined(FIND_LEAKS)
14
@@ -51,7 +53,7 @@
15
 #define MKSTRING(x) STR(x)
16
 
17
     printf("*************************\n");
18
-    printf("  Avidemux v%s", MKSTRING(ADM_VERSION));
19
+    printf("  Avidemux Jobs v%s", MKSTRING(ADM_VERSION));
20
 #if defined(ADM_SUBVERSION)
21
      printf(" (%s)", MKSTRING(ADM_SUBVERSION));
22
 #endif
23
@@ -119,8 +121,6 @@
24
    // Load .avidemuxrc
25
     quotaInit();
26
 
27
-
28
-    ADM_initBaseDir(argc,argv);
29
     // Init jobs
30
     ADMJob::jobInit();
31
     jobRun(argc,argv);
32
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_openGL/src/ADM_openGlDownload_asm.asm -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_openGL/src/ADM_openGlDownload_asm.asm Changed
30
 
1
@@ -52,9 +52,9 @@
2
 section .text
3
 INIT_MMX mmx
4
 default rel
5
-cglobal glYUV444_Init
6
+cglobal glYUV444_Init,0,0,0
7
         movq          m7,[MASK]
8
-        ret
9
+        RET
10
 
11
 default abs
12
 INIT_MMX mmx
13
@@ -83,7 +83,7 @@
14
         add            dstq,8
15
         sub            countd,1
16
         jnz             .luma
17
-        ret
18
+        RET
19
 ;"1:\n"
20
 ;                        "movq           (%0),%%mm0 \n"
21
 ;                        "pmov           %%mm0,%%mm4 \n"
22
@@ -149,6 +149,6 @@
23
         add            dstYq,8
24
         sub            countd,1
25
         jnz            .chroma        
26
-        ret                
27
+        RET                
28
                         
29
 
30
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_audioTracks.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_audioTracks.cpp Changed
47
 
1
@@ -73,8 +73,6 @@
2
                             this,SLOT(languagesClicked(int)));   
3
  * */          
4
         }
5
-        // set the parent and show the window
6
-        qtRegisterDialog(window);
7
 };
8
 /**
9
  * \fn setLanguageFromPool
10
@@ -172,14 +170,22 @@
11
         _pool->addInternalTrack(ext);
12
         for(int i=0;i<NB_MENU;i++)
13
         {
14
-            int forced=-1;
15
-            if(i==dex) forced=poolIndex;
16
+            bool checked=window->enabled[i]->isChecked();
17
+            int forced=window->inputs[i]->currentIndex();
18
+            if(i==dex)
19
+            {
20
+                checked=true;
21
+                forced=poolIndex;
22
+            }
23
             setupMenu(i,forced);
24
+            // restore enabled / disabled state
25
+            window->enabled[i]->blockSignals(true);
26
+            if(checked)
27
+                enable(i);
28
+            else
29
+                disable(i);
30
+            window->enabled[i]->blockSignals(false);
31
         }
32
-        // set enabled if needed
33
-          window->enabled[dex]->blockSignals(true);
34
-          enable(dex);
35
-          window->enabled[dex]->blockSignals(false);
36
         return;
37
 }
38
   
39
@@ -273,6 +279,7 @@
40
 {
41
     ADM_info("Running QT4 audioTrack GUI\n");
42
     bool r=false;
43
+    qtRegisterDialog(window);
44
     again:
45
     if(window->exec()==QDialog::Accepted)
46
     {
47
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_encoding.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_encoding.cpp Changed
33
 
1
@@ -31,7 +31,7 @@
2
 
3
 //*******************************************
4
 #define WIDGET(x) (ui->x)
5
-#define WRITEM(x,y) ui->x->setText(y)
6
+#define WRITEM(x,y) ui->x->setText(QString::fromUtf8(y))
7
 #define WRITE(x) WRITEM(x,stringMe)
8
 /*************************************/
9
 
10
@@ -182,11 +182,11 @@
11
     {
12
         ui->tabWidget->setTabEnabled(1, false); // disable the "Advanced" tab
13
         ui->checkBoxShutdown->setVisible(false); // hide the shutdown checkbox
14
-        this->setWindowTitle(QT_TRANSLATE_NOOP("qencoding","First Pass"));
15
+        this->setWindowTitle(QString::fromUtf8(QT_TRANSLATE_NOOP("qencoding","First Pass")));
16
         WRITEM(labelPhasis,QT_TRANSLATE_NOOP("qencoding","Pass 1"));
17
     }else
18
     {
19
-        this->setWindowTitle(QT_TRANSLATE_NOOP("qencoding","Encoding..."));
20
+        this->setWindowTitle(QString::fromUtf8(QT_TRANSLATE_NOOP("qencoding","Encoding...")));
21
         ui->tabWidget->setTabEnabled(1, true);
22
 #if 0
23
         ui->checkBoxShutdown->setVisible(true);
24
@@ -362,7 +362,7 @@
25
           ADM_assert(ui);
26
           std::string s;
27
           ADM_durationToString(milliseconds,s);
28
-          ui->labelETA->setText(QString(s.c_str()));
29
+          ui->labelETA->setText(QString::fromUtf8(s.c_str()));
30
 }
31
 
32
 /**
33
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_jobs.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_jobs.cpp Changed
21
 
1
@@ -101,7 +101,8 @@
2
        if (GUI_Confirmation_HIG(QT_TRANSLATE_NOOP("qjobs","Sure!"), QT_TRANSLATE_NOOP("qjobs","Delete job"), QT_TRANSLATE_NOOP("qjobs","Are you sure you want to delete %s job?"), ADM_getFileName(_jobsName[sel]).c_str()))
3
        {
4
            desc[sel].status = STATUS_DELETED;
5
-           unlink(_jobsName[sel]);
6
+           if(!ADM_eraseFile(_jobsName[sel]))
7
+               ADM_warning("Could not delete %s\n",_jobsName[sel]);
8
            updateRows();
9
        }
10
    }
11
@@ -117,7 +118,8 @@
12
        for(int sel = 0; sel < _nbJobs; sel++)
13
        {
14
            desc[sel].status = STATUS_DELETED;
15
-           unlink(_jobsName[sel]);
16
+           if(!ADM_eraseFile(_jobsName[sel]))
17
+               ADM_warning("Could not delete %s\n",_jobsName[sel]);
18
        }
19
 
20
        updateRows();
21
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_processing.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_processing.cpp Changed
26
 
1
@@ -42,7 +42,7 @@
2
         ui->setupUi(this);
3
    qtRegisterDialog(this);
4
 
5
-        setWindowTitle(title);
6
+        setWindowTitle(QString::fromUtf8(title));
7
         postCtor(); 
8
 }
9
 #define REFRESH_RATE_IN_MS 1000
10
@@ -60,9 +60,13 @@
11
         _first=true;
12
         _slotIndex=0;
13
         setWindowModality(Qt::ApplicationModal);        
14
-        
15
+
16
+#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
17
+        connect(ui->buttonBox,SIGNAL(rejected()),this,SLOT(reject()));
18
+#else
19
         connect(ui->buttonBox,&QDialogButtonBox::rejected,this,&QDialog::reject);
20
-        ui->labelTimeLeft->setText(QString(QT_TRANSLATE_NOOP("qprocessing", "Unknown")));
21
+#endif
22
+        ui->labelTimeLeft->setText(QString::fromUtf8(QT_TRANSLATE_NOOP("qprocessing", "Unknown")));
23
         ui->progressBar->setValue((int)0);        
24
         show();
25
 }
26
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_props.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_props.cpp Changed
30
 
1
@@ -38,11 +38,11 @@
2
     if (!avifileinfo)
3
         return;
4
 
5
-#define FILLTEXT(a,b,c) {snprintf(text,79,b,c); listOfValues.push_back(text); ui.a->setText(text);}
6
-#define FILLTEXT4(a,b,c,d) {snprintf(text,79,b,c,d); listOfValues.push_back(text); ui.a->setText(text);}
7
-#define FILLTEXT5(a,b,c,d,e) {snprintf(text,79,b,c,d,e); listOfValues.push_back(text); ui.a->setText(text);}
8
-#define SET_YES(a,b) ui.a->setText(yesno[b])
9
-#define FILLQT_TRANSLATE_NOOP(a,q) listOfValues.push_back(text); ui.q->setText(text);
10
+#define FILLTEXT(a,b,c) {snprintf(text,79,b,c); listOfValues.push_back(QString::fromUtf8(text)); ui.a->setText(QString::fromUtf8(text));}
11
+#define FILLTEXT4(a,b,c,d) {snprintf(text,79,b,c,d); listOfValues.push_back(QString::fromUtf8(text)); ui.a->setText(QString::fromUtf8(text));}
12
+#define FILLTEXT5(a,b,c,d,e) {snprintf(text,79,b,c,d,e); listOfValues.push_back(QString::fromUtf8(text)); ui.a->setText(QString::fromUtf8(text));}
13
+#define SET_YES(a,b) ui.a->setText(QString::fromUtf8(yesno[b])
14
+#define FILLQT_TRANSLATE_NOOP(a,q) listOfValues.push_back(QString::fromUtf8(text)); ui.q->setText(QString::fromUtf8(text));
15
 
16
     //------------------------------------
17
 
18
@@ -154,9 +154,9 @@
19
 }
20
 
21
 #define ADDCATEGORY(a) props += QString("\n=====================================================\n")\
22
-                               +QString(a)\
23
+                               +QString::fromUtf8(a)\
24
                                +QString("\n=====================================================\n");
25
-#define ADDNAMEVALUE(a,b) props += QString(a)+QString("\t")+QString(b)+QString("\n");
26
+#define ADDNAMEVALUE(a,b) props += QString::fromUtf8(a)+QString("\t")+QString(b)+QString("\n");
27
 
28
 /**
29
     \fn propsCopyToClipboard
30
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_working.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/Q_working.cpp Changed
13
 
1
@@ -26,7 +26,11 @@
2
      ui->setupUi(this);
3
      active=true;
4
      setWindowModality(Qt::ApplicationModal);
5
+#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
6
+     connect(ui->buttonBox,SIGNAL(rejected()),this,SLOT(reject()));
7
+#else
8
      connect(ui->buttonBox,&QDialogButtonBox::rejected,this,&QDialog::reject);
9
+#endif
10
  }
11
 
12
 void workWindow::reject(void)
13
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/alert_qt4.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_dialog/alert_qt4.cpp Changed
201
 
1
@@ -27,234 +27,248 @@
2
 
3
 namespace ADM_Qt4CoreUIToolkit
4
 {
5
-   void GUI_Alert(const char *alertstring)
6
-   {
7
-       QMessageBox::critical(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Alert")),
8
-           QString::fromUtf8(alertstring), QMessageBox::Ok );
9
-   }
10
-
11
-   void GUI_Info(const char *alertstring)
12
-   {
13
-       QMessageBox::information(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Info")),
14
-           QString::fromUtf8(alertstring), QMessageBox::Ok );
15
-   }
16
-
17
-   void GUI_Info_HIG(const ADM_LOG_LEVEL level,const char *primary, const char *secondary_format)
18
-   {
19
-       uint32_t msglvl=2;
20
-       QString alertString;
21
-
22
-       prefs->get(MESSAGE_LEVEL,&msglvl);
23
-
24
-       if(msglvl<level)
25
-       {
26
-           printf("Info : %s \n",primary);
27
-           return;
28
-       }
29
-
30
-       if(! secondary_format)
31
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big>";
32
-       else
33
-       {
34
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big><br><br>" + QString::fromUtf8(secondary_format);
35
-           alertString.replace("\n", "<br>");
36
-       }
37
-
38
-       QMessageBox::information(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Info")),
39
-           alertString, QMessageBox::Ok);
40
-   }
41
-
42
-   void GUI_Error_HIG(const char *primary, const char *secondary_format)
43
-   {
44
-       uint32_t msglvl=2;
45
-       QString alertString;
46
-
47
-       prefs->get(MESSAGE_LEVEL,&msglvl);
48
-
49
-       if(msglvl==ADM_LOG_NONE) 
50
-       {
51
-           printf("Error :%s\n",primary);
52
-           return;
53
-       }
54
-
55
-       if(! secondary_format)
56
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big>";
57
-       else
58
-       {
59
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big><br><br>" + QString::fromUtf8(secondary_format);
60
-           alertString.replace("\n", "<br>");
61
-       }
62
-
63
-       QMessageBox::critical(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Info")),
64
-           alertString, QMessageBox::Ok);
65
-   }
66
-
67
-   int GUI_Confirmation_HIG(const char *button_confirm, const char *primary, const char *secondary_format)
68
-   {
69
-       QString alertString;
70
-
71
-       if (beQuiet)
72
-       {
73
-           printf("Info: %s\n", primary);
74
-           return 0;
75
-       }
76
-
77
-       if (!secondary_format)
78
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big>";
79
-       else
80
-       {   
81
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big><br><br>" + QString::fromUtf8(secondary_format);
82
-           alertString.replace("\n", "<br>");
83
-       }
84
-
85
-       QMessageBox::StandardButton reply;
86
-
87
-       reply = QMessageBox::question(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Confirmation")),
88
-           alertString, QMessageBox::Yes | QMessageBox::No);
89
-
90
-       if (reply == QMessageBox::Yes)
91
-           return 1;
92
-
93
-       return 0; 
94
-   }
95
-
96
-   int GUI_YesNo(const char *primary, const char *secondary_format)
97
-   {
98
-       uint32_t msglvl=2;
99
-       QString alertString;
100
-
101
-       if (beQuiet)
102
-       {
103
-           printf("Info: %s\n", primary);
104
-           return 0;
105
-       }
106
-
107
-       if (!secondary_format)
108
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big>";
109
-       else
110
-       {   
111
-           alertString = "<big><b>" + QString::fromUtf8(primary) + "</b></big><br><br>" + QString::fromUtf8(secondary_format);
112
-           alertString.replace("\n", "<br>");
113
-       }
114
-
115
-       QMessageBox::StandardButton reply;
116
-
117
-       reply = QMessageBox::question(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Confirmation")),
118
-           alertString, QMessageBox::Yes | QMessageBox::No );
119
-
120
-       if (reply == QMessageBox::Yes)
121
-           return 1;
122
-
123
-       return 0; 
124
-   }
125
-
126
-   int GUI_Question(const char *alertstring)
127
-   {
128
-       QMessageBox::StandardButton reply;
129
-
130
-       if (beQuiet)
131
-       {
132
-           printf("Question: %s\n", alertstring);
133
-           return 0;
134
-       }
135
-
136
-       reply = QMessageBox::question(qtLastRegisteredDialog(), QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Question")),
137
-           QString::fromUtf8(alertstring), QMessageBox::Yes | QMessageBox::No);
138
-
139
-       if (reply==QMessageBox::Yes)
140
-           return 1;
141
-
142
-       return 0;
143
-   }
144
-   /**
145
-   \fn GUI_Alternate(char *title,char *choice1,char *choice2)
146
-   \brief Popup a dialog box name title with 2 buttons (choice1/choice2)
147
-   \return 0 if first is selected, 1 if second
148
-   */
149
-int      GUI_Alternate(const char *title,const char *choice1,const char *choice2)
150
-   {
151
-       if (beQuiet)
152
-       {
153
-           printf("Alternate<%s>: %s or %s\n", title,choice1,choice2);
154
-           return 0;
155
-       }
156
-
157
-       QMessageBox box(qtLastRegisteredDialog());
158
-
159
-       box.setWindowTitle(QString::fromUtf8(QT_TRANSLATE_NOOP("qtalert","Question?")));
160
-       box.addButton(QString::fromUtf8(choice1),QMessageBox::YesRole);
161
-       box.addButton(QString::fromUtf8(choice2),QMessageBox::NoRole);
162
-
163
-       if (title)
164
-           box.setText(QString::fromUtf8(title));
165
-       else
166
-           box.setText(QT_TRANSLATE_NOOP("qtalert","Question"));
167
-
168
-       box.setIcon(QMessageBox::Question);
169
-
170
-       if (box.exec() == 0)
171
-           return 1;
172
-       else
173
-           return 0;
174
-   }
175
-
176
-   uint8_t  GUI_getDoubleValue(double *valye, float min, float max, const char *title)
177
-   {
178
-       return 0; 
179
-   }
180
-
181
-   uint8_t GUI_isQuiet(void)
182
-   {
183
-       return beQuiet;
184
-   }
185
-
186
-   void GUI_Verbose(void)
187
-   {
188
-       beQuiet=0;
189
-   }
190
-
191
-   void GUI_Quiet(void)
192
-   {
193
-       beQuiet=1;
194
-   }
195
-
196
-   extern DIA_workingBase *createWorking(const char *title);
197
-        extern DIA_processingBase *createProcessing(const char *title, uint64_t totalToProcess);
198
-   extern DIA_encodingBase *createEncoding(uint64_t duration);
199
-        extern DIA_audioTrackBase *createAudioTrack( PoolOfAudioTracks *pool, ActiveAudioTracks *active );
200
-   void getVersion(uint32_t *maj,uint32_t *minor)
201
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_filters/Q_mainfilter.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_filters/Q_mainfilter.cpp Changed
35
 
1
@@ -288,11 +288,7 @@
2
 void filtermainWindow::closePreview()
3
 {
4
     if (previewDialog)
5
-    {
6
         qtUnregisterDialog(previewDialog);
7
-        delete previewDialog;
8
-        previewDialog = NULL;
9
-    }
10
 }
11
 
12
 /**
13
@@ -502,8 +498,8 @@
14
         uint32_t major,minor,patch;
15
         ADM_vf_getFilterInfo((VF_CATEGORY)family,i,&name, &desc,&major,&minor,&patch);
16
 
17
-        QString s1 = QString(name);
18
-        QString s2 = QString(desc);
19
+        QString s1 = QString::fromUtf8(name);
20
+        QString s2 = QString::fromUtf8(desc);
21
 
22
         QListWidgetItem *item;
23
         item=new QListWidgetItem(NULL,availableList,ALL_FILTER_BASE+i+family*100);
24
@@ -559,8 +555,8 @@
25
         const char *conf=instance->getConfiguration();
26
         printf("%d %s\n",i,name);
27
 
28
-        QString s1 = QString(name);
29
-        QString s2 = QString(conf);
30
+        QString s1 = QString::fromUtf8(name);
31
+        QString s2 = QString::fromUtf8(conf);
32
 
33
         QListWidgetItem *item=new QListWidgetItem(NULL,activeList,ACTIVE_FILTER_BASE+i);
34
         item->setData(FilterItemDelegate::FilterNameRole, s1);
35
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_filters/Q_seekablePreview.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_filters/Q_seekablePreview.cpp Changed
87
 
1
@@ -25,24 +25,24 @@
2
  */
3
 Ui_seekablePreviewWindow::Ui_seekablePreviewWindow(QWidget *parent, ADM_coreVideoFilter *videoStream, uint32_t defaultFrame) : QDialog(parent)
4
 {
5
-   ui.setupUi(this);
6
+    ui.setupUi(this);
7
 
8
-   seekablePreview = NULL;
9
-   canvas = NULL;
10
+    seekablePreview = NULL;
11
+    canvas = NULL;
12
 
13
-   resetVideoStream(videoStream);
14
-        
15
-        seekablePreview->addControl(ui.toolLayout);
16
-   seekablePreview->sliderSet(defaultFrame);
17
-   seekablePreview->sliderChanged();
18
+    resetVideoStream(videoStream);
19
 
20
-   connect(ui.horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int)));
21
+    seekablePreview->addControl(ui.toolLayout);
22
+    seekablePreview->sliderSet(defaultFrame);
23
+    seekablePreview->sliderChanged();
24
+
25
+    connect(ui.horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(sliderChanged(int)));
26
 }
27
 
28
 Ui_seekablePreviewWindow::~Ui_seekablePreviewWindow()
29
 {
30
-   delete seekablePreview;
31
-   delete canvas;
32
+    delete seekablePreview;
33
+    delete canvas;
34
 }
35
 
36
 /**
37
@@ -51,20 +51,19 @@
38
  */
39
 void Ui_seekablePreviewWindow::resetVideoStream(ADM_coreVideoFilter *videoStream)
40
 {
41
-   if (seekablePreview)
42
-       delete seekablePreview;
43
-        seekablePreview=NULL;
44
-   if (canvas)
45
-       delete canvas;
46
-        canvas=NULL;
47
+    if (seekablePreview)
48
+        delete seekablePreview;
49
+    seekablePreview=NULL;
50
+    if (canvas)
51
+        delete canvas;
52
+    canvas=NULL;
53
 
54
-   uint32_t canvasWidth = videoStream->getInfo()->width;
55
-   uint32_t canvasHeight = videoStream->getInfo()->height;
56
+    uint32_t canvasWidth = videoStream->getInfo()->width;
57
+    uint32_t canvasHeight = videoStream->getInfo()->height;
58
 
59
-   canvas = new ADM_QCanvas(ui.graphicsView, canvasWidth, canvasHeight);
60
-   canvas->show();
61
-   seekablePreview = new flySeekablePreview(this,canvasWidth, canvasHeight, videoStream, canvas, ui.horizontalSlider); 
62
-   seekablePreview->sliderChanged();
63
+    canvas = new ADM_QCanvas(ui.graphicsView, canvasWidth, canvasHeight);
64
+    seekablePreview = new flySeekablePreview(this,canvasWidth, canvasHeight, videoStream, canvas, ui.horizontalSlider);
65
+    seekablePreview->sliderChanged();
66
 }
67
 /**
68
  * 
69
@@ -72,7 +71,7 @@
70
  */
71
 uint32_t Ui_seekablePreviewWindow::frameIndex()
72
 {
73
-   return seekablePreview->sliderGet();
74
+    return seekablePreview->sliderGet();
75
 }
76
 
77
 /**
78
@@ -81,7 +80,7 @@
79
  */
80
 void Ui_seekablePreviewWindow::sliderChanged(int value)
81
 {
82
-   seekablePreview->sliderChanged();
83
+    seekablePreview->sliderChanged();
84
 }
85
 
86
 
87
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp Changed
95
 
1
@@ -469,6 +469,13 @@
2
     buildMyMenu();
3
     buildCustomMenu(); // action lists are populated (i.e. buildActionLists() called) within buildCustomMenu()
4
     buildButtonLists();
5
+
6
+#define AUTOREPEAT_TOOLBUTTON(x) ui.x->setAutoRepeat(true); ui.x->setAutoRepeatDelay(500); ui.x->setAutoRepeatInterval(100);
7
+    AUTOREPEAT_TOOLBUTTON(toolButtonPreviousFrame)
8
+    AUTOREPEAT_TOOLBUTTON(toolButtonNextFrame)
9
+    AUTOREPEAT_TOOLBUTTON(toolButtonPreviousIntraFrame)
10
+    AUTOREPEAT_TOOLBUTTON(toolButtonNextIntraFrame)
11
+
12
     // Crash in some cases addScriptReferencesToHelpMenu();
13
     connect(ui.menuVideo->actions().at(3),SIGNAL(toggled(bool)),this,SLOT(previewModeChangedFromMenu(bool)));
14
     connect(ui.toolBar->actions().at(5),SIGNAL(toggled(bool)),this,SLOT(previewModeChangedFromToolbar(bool)));
15
@@ -509,7 +516,7 @@
16
 
17
     threshold = RESIZE_THRESHOLD;
18
     actZoomCalled = false;
19
-    ignoreResizeEvent = true;
20
+    ignoreResizeEvent = false;
21
     blockResizing = false;
22
     blockZoomChanges = true;
23
 
24
@@ -568,7 +575,11 @@
25
     for(int i=0;i<nb;i++)
26
     {
27
         MenuEntry *m=menu+i;
28
-        QString qs=QString::fromUtf8(QT_TRANSLATE_NOOP("adm",m->text.c_str()));
29
+        QString qs;
30
+        if(m->translated)
31
+            qs=QString::fromUtf8(m->text.c_str());
32
+        else
33
+            qs=QString::fromUtf8(QT_TRANSLATE_NOOP("adm",m->text.c_str()));
34
         switch(m->type)
35
         {
36
             case MENU_SEPARATOR:
37
@@ -1637,13 +1648,21 @@
38
 */
39
 int UI_Init(int nargc, char **nargv)
40
 {
41
-        ADM_info("Starting QT4 GUI...\n");
42
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
43
+    ADM_info("Starting Qt5 GUI...\n");
44
+#else
45
+    ADM_info("Starting Qt4 GUI...\n");
46
+#endif
47
     initTranslator();
48
 
49
     global_argc=nargc;
50
     global_argv=nargv;
51
     ADM_renderLibInit(&UI_Hooks);
52
-
53
+#if defined(_WIN32) && QT_VERSION >= QT_VERSION_CHECK(5,11,0)
54
+    // Despite HiDPI scaling being supported from Qt 5.6 on, important aspects
55
+    // like OpenGL support were fixed only in much later versions.
56
+    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
57
+#endif
58
     myApplication=new myQApplication (global_argc, global_argv);
59
     myApplication->connect(myApplication, SIGNAL(lastWindowClosed()), myApplication, SLOT(quit()));
60
     myApplication->connect(myApplication, SIGNAL(aboutToQuit()), myApplication, SLOT(cleanup()));
61
@@ -1673,10 +1692,13 @@
62
     UI_getPhysicalScreenSize(QuiMainWindows, &w,&h);
63
     printf("The screen seems to be %u x %u px\n",w,h);
64
     mw->ui.frame_video->setAttribute(Qt::WA_OpaquePaintEvent);
65
-    
66
 
67
     UI_QT4VideoWidget(mw->ui.frame_video);  // Add the widget that will handle video display
68
+#if QT_VERSION < QT_VERSION_CHECK(5,11,0) // not sure about the version
69
     mw->ui.frame_video->setAcceptDrops(true); // needed for drag and drop to work on windows
70
+#endif
71
+    admPreview::setMainDimension(0,0,ZOOM_1_1);
72
+
73
     UI_updateRecentMenu();
74
     UI_updateRecentProjectMenu();
75
 
76
@@ -1702,8 +1724,6 @@
77
         ADM_info("OpenGL: Not enabled at built time.\n");
78
 #endif
79
 
80
-    admPreview::setMainDimension(0,0,ZOOM_1_1);
81
-
82
     return 1;
83
 }
84
 /**
85
@@ -2382,8 +2402,7 @@
86
 {
87
     char txt[50];
88
     sprintf(txt,QT_TRANSLATE_NOOP("qgui2"," (%d track(s))"),nb);
89
-     WIDGET(TrackCountLabel)->setText(QString(txt));
90
-
91
+    WIDGET(TrackCountLabel)->setText(QString::fromUtf8(txt));
92
 }
93
 /**
94
  * \fn dtor
95
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2_menu.cpp Changed
57
 
1
@@ -34,7 +34,7 @@
2
         {
3
             if (this->_scriptEngines.size() > 0)
4
             {
5
-                MenuEntry separatorEntry = {MENU_SEPARATOR, "-", NULL, ACT_DUMMY, NULL, NULL};
6
+                MenuEntry separatorEntry = {MENU_SEPARATOR, "-", NULL, ACT_DUMMY, NULL, NULL, true};
7
 
8
                 fileMenu.insert(fileMenu.begin() + i, separatorEntry);
9
                 i++;
10
@@ -55,20 +55,20 @@
11
                     itemName = this->_scriptEngines[engineIndex]->name() + QT_TRANSLATE_NOOP("qgui2menu"," Project");
12
                 }
13
 
14
-                MenuEntry dummyEntry = {MENU_SUBMENU, itemName, NULL, ACT_DUMMY, NULL, NULL};
15
+                MenuEntry dummyEntry = {MENU_SUBMENU, itemName, NULL, ACT_DUMMY, NULL, NULL, true};
16
                 it = fileMenu.insert(it, dummyEntry);
17
 
18
-                MenuEntry runProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Run Project..."), NULL, firstMenuId, NULL, NULL};
19
+                MenuEntry runProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Run Project..."), NULL, firstMenuId, NULL, NULL, true};
20
                 it = fileMenu.insert(it + 1, runProjectEntry);
21
 
22
                 if ((this->_scriptEngines[engineIndex]->capabilities() & IScriptEngine::Debugger) == IScriptEngine::Debugger)
23
                 {
24
-                    MenuEntry debugEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Debug Project..."), NULL, (Action)(firstMenuId + 1), NULL, NULL};
25
+                    MenuEntry debugEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","&Debug Project..."), NULL, (Action)(firstMenuId + 1), NULL, NULL, true};
26
                     it = fileMenu.insert(it + 1, debugEntry);
27
                     i++;
28
                 }
29
 
30
-                MenuEntry saveAsProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","Save &As Project..."), NULL, (Action)(firstMenuId + 2), NULL, NULL};
31
+                MenuEntry saveAsProjectEntry = {MENU_SUBACTION, QT_TRANSLATE_NOOP("qgui2menu","Save &As Project..."), NULL, (Action)(firstMenuId + 2), NULL, NULL, true};
32
                 it = fileMenu.insert(it + 1, saveAsProjectEntry);
33
                 i += 3;
34
             }
35
@@ -95,7 +95,7 @@
36
             itemName = this->_scriptEngines[engineIndex]->name() + QT_TRANSLATE_NOOP("qgui2menu"," Shell");
37
         }
38
 
39
-        MenuEntry entry = {MENU_ACTION, itemName, NULL, (Action)(ACT_SCRIPT_ENGINE_SHELL_FIRST + engineIndex), NULL, NULL};
40
+        MenuEntry entry = {MENU_ACTION, itemName, NULL, (Action)(ACT_SCRIPT_ENGINE_SHELL_FIRST + engineIndex), NULL, NULL, true};
41
 
42
         it = toolMenu.insert(it, entry) + 1;
43
     }
44
@@ -291,10 +291,10 @@
45
                 vector<MenuEntry>::iterator it = menu.begin() + i;
46
                 // add session restore menu entry
47
                 string restoreSessionEntryName = QT_TRANSLATE_NOOP("qgui2menu","Restore previous session");
48
-                MenuEntry restoreSessionEntry = {MENU_ACTION, restoreSessionEntryName, NULL, ACT_RESTORE_SESSION, NULL, NULL};
49
+                MenuEntry restoreSessionEntry = {MENU_ACTION, restoreSessionEntryName, NULL, ACT_RESTORE_SESSION, NULL, NULL, true};
50
                 it = menu.insert(it + 1, restoreSessionEntry);
51
                 // add separator
52
-                MenuEntry separatorEntry = {MENU_SEPARATOR, "-", NULL, ACT_DUMMY, NULL, NULL};
53
+                MenuEntry separatorEntry = {MENU_SEPARATOR, "-", NULL, ACT_DUMMY, NULL, NULL, true};
54
                 menu.insert(it + 1, separatorEntry);
55
             }
56
             break;
57
avidemux_2.7.3.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/file_qt4.cpp -> avidemux_2.7.4.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/file_qt4.cpp Changed
57
 
1
@@ -42,7 +42,7 @@
2
     QString str,outputPath,outputExt=QString("");
3
     QString fileName,dot=QString(".");
4
     QString separator = QString("/");
5
-    QString filterFile=QString(QT_TRANSLATE_NOOP("qfile","All files (*.*)"));
6
+    QString filterFile=QString::fromUtf8(QT_TRANSLATE_NOOP("qfile","All files (*.*)"));
7
     bool doFilter = !!(ext && strlen(ext));
8
     bool isProject=false;
9
     QFileDialog::Options opts;
10
@@ -125,10 +125,10 @@
11
 
12
     if(doFilter)
13
     {
14
-        filterFile=QString(ext)+QString(QT_TRANSLATE_NOOP("qfile"," files (*."))+QString(ext)+QString(");;")+filterFile;
15
+        filterFile=QString(ext)+QString::fromUtf8(QT_TRANSLATE_NOOP("qfile"," files (*."))+QString(ext)+QString(");;")+filterFile;
16
     }
17
     fileName = QFileDialog::getSaveFileName(fileSelGetParent(),
18
-                    label,  // caption
19
+                    QString::fromUtf8(label),  // caption
20
                     str,    // folder
21
                     filterFile,   // filter
22
                     NULL,QFileDialog::DontConfirmOverwrite);   // selected filter
23
@@ -149,8 +149,9 @@
24
     if(newFile.exists())
25
     {
26
         QFileInfo fileInfo(newFile);
27
-        QString q=QString(QT_TRANSLATE_NOOP("qfile","Overwrite file "))+fileInfo.fileName()+QString("?");
28
-        if(!GUI_Question(q.toUtf8().constData()))
29
+        QString q=QString::fromUtf8(QT_TRANSLATE_NOOP("qfile","Overwrite file "))+fileInfo.fileName()+QString("?");
30
+        // Show the dialog even in silent mode or if the user has disabled alerts.
31
+        if(!GUI_Question(q.toUtf8().constData(),true))
32
         {
33
             return 0;
34
         }
35
@@ -183,7 +184,7 @@
36
 {
37
     QString str;
38
     QString fileName,dot=QString(".");
39
-    QString filterFile=QString(QT_TRANSLATE_NOOP("qfile","All files (*.*)"));
40
+    QString filterFile=QString::fromUtf8(QT_TRANSLATE_NOOP("qfile","All files (*.*)"));
41
     bool doFilter = !!(ext && strlen(ext));
42
     bool isProject=false;
43
     QFileDialog::Options opts;
44
@@ -230,10 +231,10 @@
45
 
46
     if(doFilter)
47
     {
48
-        filterFile=QString(ext)+QString(QT_TRANSLATE_NOOP("qfile"," files (*."))+QString(ext)+QString(");;")+filterFile;
49
+        filterFile=QString(ext)+QString::fromUtf8(QT_TRANSLATE_NOOP("qfile"," files (*."))+QString(ext)+QString(");;")+filterFile;
50
     }
51
     fileName = QFileDialog::getOpenFileName(fileSelGetParent(),
52
-                                label,  // caption
53
+                                QString::fromUtf8(label),  // caption
54
                                 str,    // folder
55
                                 filterFile,   // filter
56
                                 NULL,   // selected filter
57
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux.pro -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux.pro Changed
63
 
1
@@ -37,6 +37,7 @@
2
 ../../../avidemux_core/ADM_core/include/ADM_byteBuffer.h \ 
3
 ../../../avidemux_core/ADM_core/include/ADM_crashdump_apple.h \ 
4
 ../../../avidemux_core/ADM_core/include/ADM_ptrQueue.h \ 
5
+../../../avidemux_core/ADM_core/include/ADM_crashdump_vs.h \ 
6
 ../../../avidemux_core/ADM_core/include/ADM_prettyPrint.h \ 
7
 ../../../avidemux_core/ADM_core/include/ADM_crashdump_unix.h \ 
8
 ../../../avidemux_core/ADM_core/include/ADM_queue.h \ 
9
@@ -234,6 +235,7 @@
10
 ../../../avidemux_core/ADM_coreUtils/include/prefs.h \ 
11
 ../../../avidemux_core/ADM_coreUtils/include/ADM_codecType.h \ 
12
 ../../../avidemux_core/ADM_coreUtils/include/ADM_coreCodecMapping.h \ 
13
+../../../avidemux_core/ADM_coreUtils/include/ADM_putbits.h \ 
14
 ../../../avidemux_core/ADM_coreUtils/include/FFcodecContext_param.h \ 
15
 ../../../avidemux_core/ADM_coreUtils/include/ADM_confCouple.h \ 
16
 ../../../avidemux_core/ADM_coreUtils/include/ADM_paramList.h \ 
17
@@ -407,6 +409,7 @@
18
 ../../../avidemux_plugins/ADM_demuxers/NativeAvisynth/avs/cpuid.h \ 
19
 ../../../avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.h \ 
20
 ../../../avidemux_plugins/ADM_demuxers/MpegPS/ADM_psAudioProbe.h \ 
21
+../../../avidemux_plugins/ADM_demuxers/VapourSynth/ADM_vsInternal.h \ 
22
 ../../../avidemux_plugins/ADM_demuxers/VapourSynth/ADM_vs.h \ 
23
 ../../../avidemux_plugins/ADM_demuxers/VapourSynth/qt4/vsProxy_qt4.h \ 
24
 ../../../avidemux_plugins/ADM_demuxers/VapourSynth/ADM_vsProxy.h \ 
25
@@ -842,8 +845,8 @@
26
 ../../../avidemux_core/ADM_coreVideoEncoder/ADM_hwAccelEncoder/ADM_coreLibVAEnc/src/ADM_coreLibVA_encodingContext.cpp \ 
27
 ../../../avidemux_core/ADM_coreVideoEncoder/include/FFcodecSettings_desc.cpp.h \ 
28
 ../../../avidemux_core/ffmpeg_package/patches/libavformat_mpegenc.c.patch \ 
29
-../../../avidemux_core/ffmpeg_package/patches/libavcodec_h263dec.c.patch \ 
30
 ../../../avidemux_core/ffmpeg_package/patches/libavcodec_hevc_parser.c.patch \ 
31
+../../../avidemux_core/ffmpeg_package/patches/attic/libavcodec_h263dec.c.patch \ 
32
 ../../../avidemux_core/ffmpeg_package/patches/libavcodec_mpegvideo_enc.c.patch \ 
33
 ../../../avidemux_core/ffmpeg_package/patches/libavcodec_mpeg12enc.c.patch \ 
34
 ../../../avidemux_core/ffmpeg_package/patches/libavcodec_nvenc.c.patch \ 
35
@@ -956,6 +959,7 @@
36
 ../../../avidemux_core/ADM_coreUtils/src/ADM_getbits.cpp \ 
37
 ../../../avidemux_core/ADM_coreUtils/src/prefs2.conf \ 
38
 ../../../avidemux_core/ADM_coreUtils/src/ADM_codecType.cpp \ 
39
+../../../avidemux_core/ADM_coreUtils/src/ADM_putbits.cpp \ 
40
 ../../../avidemux_core/ADM_coreUtils/src/ADM_infoExtractorVC1.cpp \ 
41
 ../../../avidemux_core/ADM_coreUtils/src/Source/JSONAllocator.cpp \ 
42
 ../../../avidemux_core/ADM_coreUtils/src/Source/JSONNode_Mutex.cpp \ 
43
@@ -1368,9 +1372,10 @@
44
 ../../../avidemux_plugins/ADM_videoFilters6/avsfilter/avsfilterparam_json.cpp \ 
45
 ../../../avidemux_plugins/ADM_videoFilters6/swapUV/swapUV.cpp \ 
46
 ../../../avidemux_plugins/ADM_videoFilters6/yadif/yadif_desc.cpp \ 
47
-../../../avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif_asm.c \ 
48
+../../../avidemux_plugins/ADM_videoFilters6/yadif/yadif_json.cpp \ 
49
 ../../../avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif.cpp \ 
50
 ../../../avidemux_plugins/ADM_videoFilters6/yadif/yadif.conf \ 
51
+../../../avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif_body.cpp \ 
52
 ../../../avidemux_plugins/ADM_videoFilters6/admIvtc/admIvtc_desc.cpp \ 
53
 ../../../avidemux_plugins/ADM_videoFilters6/admIvtc/ADM_admIvtc_util.cpp \ 
54
 ../../../avidemux_plugins/ADM_videoFilters6/admIvtc/admIvtc_json.cpp \ 
55
@@ -1445,7 +1450,6 @@
56
 ../../../avidemux_plugins/ADM_videoFilters6/ass/ADM_libass/ass_font.c \ 
57
 ../../../avidemux_plugins/ADM_videoFilters6/ass/ADM_libass/ass_utils.c \ 
58
 ../../../avidemux_plugins/ADM_videoFilters6/ass/ass_ssa_desc.cpp \ 
59
-../../../avidemux_plugins/ADM_videoFilters6/ass/ass_ssa_json.cpp \ 
60
 ../../../avidemux_plugins/ADM_videoFilters6/ass/ass_ssa.conf \ 
61
 ../../../avidemux_plugins/ADM_videoFilters6/changeFps/changeFps.cpp \ 
62
 ../../../avidemux_plugins/ADM_videoFilters6/changeFps/confChangeFps_desc.cpp \ 
63
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_ca.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_ca.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation type="unfinished">Ha fallat l&apos;intent d&apos;obrir %s!</translation>
9
     </message>
10
@@ -56,7 +56,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1050,11 +1050,21 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
25
         <source>Decode video using DXVA2 (windows)</source>
26
         <translation type="unfinished"></translation>
27
     </message>
28
     <message>
29
+        <location line="+1"/>
30
+        <source>Ignore driver blacklist (Intel)</source>
31
+        <translation type="unfinished"></translation>
32
+    </message>
33
+    <message>
34
+        <location line="+1"/>
35
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
36
+        <translation type="unfinished"></translation>
37
+    </message>
38
+    <message>
39
         <location line="+12"/>
40
         <source>_Accept non-standard audio frequency for DVD</source>
41
         <translation type="unfinished">_Permet freq. d&apos;àudio no estàndard per a DVD</translation>
42
@@ -1182,12 +1192,11 @@
43
         <translation type="unfinished">Priorització</translation>
44
     </message>
45
     <message>
46
-        <location line="+5"/>
47
         <source>_Use alternative tag for MP3 in .mp4</source>
48
-        <translation type="unfinished">_Usa etiqueta (tag) alternativa per a MP3 en MP4</translation>
49
+        <translation type="obsolete">_Usa etiqueta (tag) alternativa per a MP3 en MP4</translation>
50
     </message>
51
     <message>
52
-        <location line="+1"/>
53
+        <location line="+5"/>
54
         <source>_Default to the directory of the last read file for saving</source>
55
         <translation type="unfinished"></translation>
56
     </message>
57
@@ -1197,7 +1206,7 @@
58
         <translation type="unfinished"></translation>
59
     </message>
60
     <message>
61
-        <location line="+5"/>
62
+        <location line="+9"/>
63
         <source>XVideo (best)</source>
64
         <translation type="unfinished">Xv (millor)</translation>
65
     </message>
66
@@ -1207,7 +1216,7 @@
67
         <translation type="unfinished"></translation>
68
     </message>
69
     <message>
70
-        <location line="+15"/>
71
+        <location line="+11"/>
72
         <source>SDL (good)</source>
73
         <translation type="unfinished">SDL (bona)</translation>
74
     </message>
75
@@ -1337,7 +1346,7 @@
76
         <location line="+5"/>
77
         <location filename="../../common/gui_save.cpp" line="+57"/>
78
         <location line="+10"/>
79
-        <location line="+278"/>
80
+        <location line="+277"/>
81
         <location line="+19"/>
82
         <location line="+7"/>
83
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
84
@@ -1354,7 +1363,7 @@
85
     </message>
86
     <message>
87
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
88
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
89
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
90
         <source>CPU</source>
91
         <translation type="unfinished">CPU</translation>
92
     </message>
93
@@ -1364,24 +1373,22 @@
94
         <translation type="unfinished">Multiprocessament</translation>
95
     </message>
96
     <message>
97
-        <location line="+14"/>
98
+        <location line="+11"/>
99
+        <location line="+3"/>
100
         <source>Preferences</source>
101
         <translation type="unfinished">Preferències</translation>
102
     </message>
103
     <message>
104
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+43"/>
105
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+45"/>
106
         <source>Close</source>
107
         <translation type="unfinished">Tanca</translation>
108
     </message>
109
     <message>
110
-        <location line="+1"/>
111
-        <location line="+2"/>
112
-        <location line="+2"/>
113
         <source>-</source>
114
-        <translation type="unfinished">-</translation>
115
+        <translation type="obsolete">-</translation>
116
     </message>
117
     <message>
118
-        <location line="-1"/>
119
+        <location line="+4"/>
120
         <source>Connect to avsproxy</source>
121
         <translation type="unfinished">Connecta a l&apos;avsproxy</translation>
122
     </message>
123
@@ -1651,12 +1658,31 @@
124
         <translation type="unfinished">S&apos;ha produït un error de còdec</translation>
125
     </message>
126
     <message>
127
-        <location filename="../../common/gui_main.cpp" line="+373"/>
128
+        <location filename="../../common/gui_main.cpp" line="+369"/>
129
         <source>Not coded in this version</source>
130
         <translation type="unfinished">No s&apos;ha codificat en aquesta versió</translation>
131
     </message>
132
     <message>
133
-        <location line="+251"/>
134
+        <location line="+209"/>
135
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
136
+Proceed anyway?</source>
137
+        <translation type="unfinished"></translation>
138
+    </message>
139
+    <message>
140
+        <location line="+7"/>
141
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
142
+Playback of the video saved in copy mode may stop at this point.
143
+Proceed anyway?</source>
144
+        <translation type="unfinished"></translation>
145
+    </message>
146
+    <message>
147
+        <location line="+5"/>
148
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
149
+Try anyway?</source>
150
+        <translation type="unfinished"></translation>
151
+    </message>
152
+    <message>
153
+        <location line="+60"/>
154
         <source>Are you sure?</source>
155
         <translation type="unfinished">N&apos;esteu segur?</translation>
156
     </message>
157
@@ -1676,21 +1702,52 @@
158
         <translation type="unfinished"></translation>
159
     </message>
160
     <message>
161
-        <location line="+24"/>
162
+        <location line="+30"/>
163
         <source>The end point of the cut is not on a keyframe.
164
 Video saved in copy mode will be corrupted at this point.
165
 Proceed anyway?</source>
166
         <translation type="unfinished"></translation>
167
     </message>
168
     <message>
169
-        <location line="+5"/>
170
+        <location line="+4"/>
171
         <source>The end point of the deletion is not on a keyframe.
172
 Video saved in copy mode will be corrupted at this point.
173
 Proceed anyway?</source>
174
         <translation type="unfinished"></translation>
175
     </message>
176
     <message>
177
-        <location line="+100"/>
178
+        <location line="+6"/>
179
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
180
+Proceed anyway?</source>
181
+        <translation type="unfinished"></translation>
182
+    </message>
183
+    <message>
184
+        <location line="+6"/>
185
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
186
+Proceed anyway?</source>
187
+        <translation type="unfinished"></translation>
188
+    </message>
189
+    <message>
190
+        <location line="+8"/>
191
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
192
+Proceed anyway?</source>
193
+        <translation type="unfinished"></translation>
194
+    </message>
195
+    <message>
196
+        <location line="+4"/>
197
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
198
+Proceed anyway?</source>
199
+        <translation type="unfinished"></translation>
200
+    </message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_cs.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_cs.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation type="unfinished">Selhalo otevření %s!</translation>
9
     </message>
10
@@ -56,7 +56,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1050,11 +1050,21 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
25
         <source>Decode video using DXVA2 (windows)</source>
26
         <translation type="unfinished"></translation>
27
     </message>
28
     <message>
29
+        <location line="+1"/>
30
+        <source>Ignore driver blacklist (Intel)</source>
31
+        <translation type="unfinished"></translation>
32
+    </message>
33
+    <message>
34
+        <location line="+1"/>
35
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
36
+        <translation type="unfinished"></translation>
37
+    </message>
38
+    <message>
39
         <location line="+12"/>
40
         <source>_Accept non-standard audio frequency for DVD</source>
41
         <translation type="unfinished">P_ovolit nestandardní frekvenci zvuku pro DVD</translation>
42
@@ -1170,17 +1180,16 @@
43
         <translation type="unfinished">Priority</translation>
44
     </message>
45
     <message>
46
-        <location line="+5"/>
47
         <source>_Use alternative tag for MP3 in .mp4</source>
48
-        <translation type="unfinished">_Používat alternativní značku pro MP3 v .mp4</translation>
49
+        <translation type="obsolete">_Používat alternativní značku pro MP3 v .mp4</translation>
50
     </message>
51
     <message>
52
-        <location line="+1"/>
53
+        <location line="+5"/>
54
         <source>_Default to the directory of the last read file for saving</source>
55
         <translation type="unfinished"></translation>
56
     </message>
57
     <message>
58
-        <location line="+6"/>
59
+        <location line="+10"/>
60
         <source>XVideo (best)</source>
61
         <translation type="unfinished">XVideo (nejlepší)</translation>
62
     </message>
63
@@ -1190,7 +1199,7 @@
64
         <translation type="unfinished"></translation>
65
     </message>
66
     <message>
67
-        <location line="+15"/>
68
+        <location line="+11"/>
69
         <source>SDL (good)</source>
70
         <translation type="unfinished">SDL (dobré)</translation>
71
     </message>
72
@@ -1314,7 +1323,7 @@
73
         <location line="+5"/>
74
         <location filename="../../common/gui_save.cpp" line="+57"/>
75
         <location line="+10"/>
76
-        <location line="+278"/>
77
+        <location line="+277"/>
78
         <location line="+19"/>
79
         <location line="+7"/>
80
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
81
@@ -1331,7 +1340,7 @@
82
     </message>
83
     <message>
84
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
85
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
86
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
87
         <source>CPU</source>
88
         <translation type="unfinished">CPU</translation>
89
     </message>
90
@@ -1341,12 +1350,13 @@
91
         <translation type="unfinished">Vlákna</translation>
92
     </message>
93
     <message>
94
-        <location line="+14"/>
95
+        <location line="+11"/>
96
+        <location line="+3"/>
97
         <source>Preferences</source>
98
         <translation type="unfinished">Předvolby</translation>
99
     </message>
100
     <message>
101
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
102
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+38"/>
103
         <source>Save</source>
104
         <translation type="unfinished">Uložit</translation>
105
     </message>
106
@@ -1356,14 +1366,11 @@
107
         <translation type="unfinished">Zavřít</translation>
108
     </message>
109
     <message>
110
-        <location line="+1"/>
111
-        <location line="+2"/>
112
-        <location line="+2"/>
113
         <source>-</source>
114
-        <translation type="unfinished">-</translation>
115
+        <translation type="obsolete">-</translation>
116
     </message>
117
     <message>
118
-        <location line="-1"/>
119
+        <location line="+4"/>
120
         <source>Connect to avsproxy</source>
121
         <translation type="unfinished">Připojit se k avsproxy</translation>
122
     </message>
123
@@ -1615,7 +1622,7 @@
124
     </message>
125
     <message>
126
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
127
-        <location filename="../../common/gui_save.cpp" line="-314"/>
128
+        <location filename="../../common/gui_save.cpp" line="-313"/>
129
         <source>No audio track</source>
130
         <translation type="unfinished">Chybí zvuková stopa</translation>
131
     </message>
132
@@ -1660,12 +1667,31 @@
133
 To je potřeba k vytvoření PSP kompatibilního videa.</translation>
134
     </message>
135
     <message>
136
-        <location filename="../../common/gui_main.cpp" line="+373"/>
137
+        <location filename="../../common/gui_main.cpp" line="+369"/>
138
         <source>Not coded in this version</source>
139
         <translation type="unfinished">Nepodporováno v této verzi</translation>
140
     </message>
141
     <message>
142
-        <location line="+251"/>
143
+        <location line="+209"/>
144
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
145
+Proceed anyway?</source>
146
+        <translation type="unfinished"></translation>
147
+    </message>
148
+    <message>
149
+        <location line="+7"/>
150
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
151
+Playback of the video saved in copy mode may stop at this point.
152
+Proceed anyway?</source>
153
+        <translation type="unfinished"></translation>
154
+    </message>
155
+    <message>
156
+        <location line="+5"/>
157
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
158
+Try anyway?</source>
159
+        <translation type="unfinished"></translation>
160
+    </message>
161
+    <message>
162
+        <location line="+60"/>
163
         <source>Are you sure?</source>
164
         <translation type="unfinished">Určitě?</translation>
165
     </message>
166
@@ -1685,21 +1711,52 @@
167
         <translation type="unfinished"></translation>
168
     </message>
169
     <message>
170
-        <location line="+24"/>
171
+        <location line="+30"/>
172
         <source>The end point of the cut is not on a keyframe.
173
 Video saved in copy mode will be corrupted at this point.
174
 Proceed anyway?</source>
175
         <translation type="unfinished"></translation>
176
     </message>
177
     <message>
178
-        <location line="+5"/>
179
+        <location line="+4"/>
180
         <source>The end point of the deletion is not on a keyframe.
181
 Video saved in copy mode will be corrupted at this point.
182
 Proceed anyway?</source>
183
         <translation type="unfinished"></translation>
184
     </message>
185
     <message>
186
-        <location line="+100"/>
187
+        <location line="+6"/>
188
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
189
+Proceed anyway?</source>
190
+        <translation type="unfinished"></translation>
191
+    </message>
192
+    <message>
193
+        <location line="+6"/>
194
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
195
+Proceed anyway?</source>
196
+        <translation type="unfinished"></translation>
197
+    </message>
198
+    <message>
199
+        <location line="+8"/>
200
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_da.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_da.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+85"/>
6
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+102"/>
7
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
8
         <translation>Denne video indeholder B-frames, men præsentationstidsstemplerne (PTS) findes enten ikke eller øges monotont. Avidemux kan forsøge at rekonstruere de korrekte PTS&apos;er ved at dekodere hele videoen. Dette kan tage lang tid. Fortsæt?</translation>
9
     </message>
10
@@ -31,7 +31,7 @@
11
 Drop timinginformationer?</translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
15
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
16
         <source>Cannot find a demuxer for %s</source>
17
         <translation>Kan ikke finde en demuxer for %s</translation>
18
     </message>
19
@@ -80,7 +80,7 @@
20
 2.) sæt dem sammen</translation>
21
     </message>
22
     <message>
23
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-172"/>
24
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-189"/>
25
         <source>Checking if timestamps are valid..</source>
26
         <translation>Tjekker om tidsstempler er gyldige...</translation>
27
     </message>
28
@@ -1058,7 +1058,7 @@
29
 <context>
30
     <name>adm</name>
31
     <message>
32
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
33
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
34
         <source>Open</source>
35
         <translation>Åbn</translation>
36
     </message>
37
@@ -1074,8 +1074,6 @@
38
     </message>
39
     <message>
40
         <location line="+1"/>
41
-        <location filename="../../common/gui_save.cpp" line="+659"/>
42
-        <location line="+10"/>
43
         <source>Queue</source>
44
         <translation>Sæt i kø</translation>
45
     </message>
46
@@ -1110,14 +1108,11 @@
47
         <translation>Luk</translation>
48
     </message>
49
     <message>
50
-        <location line="+1"/>
51
-        <location line="+2"/>
52
-        <location line="+2"/>
53
         <source>-</source>
54
-        <translation>-</translation>
55
+        <translation type="vanished">-</translation>
56
     </message>
57
     <message>
58
-        <location line="-3"/>
59
+        <location line="+2"/>
60
         <source>Information</source>
61
         <translation>Information</translation>
62
     </message>
63
@@ -1179,7 +1174,8 @@
64
         <translation>Sæt markør B</translation>
65
     </message>
66
     <message>
67
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+510"/>
68
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+525"/>
69
+        <location line="+3"/>
70
         <source>Preferences</source>
71
         <translation>Præferencer</translation>
72
     </message>
73
@@ -1368,7 +1364,7 @@
74
     </message>
75
     <message>
76
         <location line="+1"/>
77
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-144"/>
78
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-147"/>
79
         <source>Stereo</source>
80
         <translation>Stereo</translation>
81
     </message>
82
@@ -1514,7 +1510,7 @@
83
     </message>
84
     <message>
85
         <location line="+1"/>
86
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
87
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
88
         <source>CPU</source>
89
         <translation>CPU</translation>
90
     </message>
91
@@ -1550,12 +1546,12 @@
92
     </message>
93
     <message>
94
         <location line="+23"/>
95
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
96
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
97
         <location line="+3"/>
98
         <location line="+5"/>
99
-        <location filename="../../common/gui_save.cpp" line="-612"/>
100
+        <location filename="../../common/gui_save.cpp" line="+57"/>
101
         <location line="+10"/>
102
-        <location line="+278"/>
103
+        <location line="+277"/>
104
         <location line="+19"/>
105
         <location line="+7"/>
106
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
107
@@ -1628,12 +1624,12 @@
108
         <translation>Pluginsinfo</translation>
109
     </message>
110
     <message>
111
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-232"/>
112
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-227"/>
113
         <source>Enable openGl support</source>
114
         <translation>Aktivér understøttelse af OpenGL</translation>
115
     </message>
116
     <message>
117
-        <location line="+5"/>
118
+        <location line="+1"/>
119
         <source>_Accept non-standard audio frequency for DVD</source>
120
         <translation>_Acceptér ikke-standard lydfrekvens for DVD</translation>
121
     </message>
122
@@ -1755,17 +1751,16 @@
123
         <translation>Prioritering</translation>
124
     </message>
125
     <message>
126
-        <location line="+5"/>
127
         <source>_Use alternative tag for MP3 in .mp4</source>
128
-        <translation>_Brug alternativt mærkat for MP3 i .mp4</translation>
129
+        <translation type="vanished">_Brug alternativt mærkat for MP3 i .mp4</translation>
130
     </message>
131
     <message>
132
-        <location line="+1"/>
133
+        <location line="+5"/>
134
         <source>_Default to the directory of the last read file for saving</source>
135
         <translation type="unfinished">Foreslå at gemme i mappen fra den sidst åbnede fil</translation>
136
     </message>
137
     <message>
138
-        <location line="+6"/>
139
+        <location line="+10"/>
140
         <source>XVideo (best)</source>
141
         <translation>XVideo (bedste)</translation>
142
     </message>
143
@@ -1775,7 +1770,7 @@
144
         <translation>VDPAU (bedste)</translation>
145
     </message>
146
     <message>
147
-        <location line="+10"/>
148
+        <location line="+6"/>
149
         <source>OpenGL (best)</source>
150
         <translation>OpenGL (bedste)</translation>
151
     </message>
152
@@ -1906,13 +1901,13 @@
153
         <translation>Video</translation>
154
     </message>
155
     <message>
156
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+53"/>
157
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+56"/>
158
         <source>Threading</source>
159
         <translation>Trådning</translation>
160
     </message>
161
     <message>
162
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
163
-        <location filename="../../common/gui_save.cpp" line="-314"/>
164
+        <location filename="../../common/gui_save.cpp" line="-313"/>
165
         <source>No audio track</source>
166
         <translation>Ingen lydspor</translation>
167
     </message>
168
@@ -1969,7 +1964,7 @@
169
 Det er nødvendigt for at kunne oprette PSP-kompatibel video.</translation>
170
     </message>
171
     <message>
172
-        <location filename="../../common/gui_main.cpp" line="+189"/>
173
+        <location filename="../../common/gui_main.cpp" line="+186"/>
174
         <source>Select script to save</source>
175
         <translation>Vælg script som skal gemmes</translation>
176
     </message>
177
@@ -1979,19 +1974,38 @@
178
         <translation>Du er igang med at slette listen over de sidst åbnede filer og projekter. Dette kan ikke fortrydes. Fortsæt?</translation>
179
     </message>
180
     <message>
181
-        <location line="+117"/>
182
+        <location line="+116"/>
183
         <source>Not coded in this version</source>
184
         <translation>Ikke kodet i denne version</translation>
185
     </message>
186
     <message>
187
-        <location line="+196"/>
188
+        <location line="+204"/>
189
         <source>The cut points of the pasted video are not on keyframes.
190
 Video saved in copy mode will be corrupted at these points.
191
 Proceed anyway?</source>
192
         <translation type="unfinished"></translation>
193
     </message>
194
     <message>
195
-        <location line="+55"/>
196
+        <location line="+5"/>
197
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
198
+Proceed anyway?</source>
199
+        <translation type="unfinished"></translation>
200
+    </message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_de.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_de.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>Der Versuch, %s zu öffnen, ist fehlgeschlagen!</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation>Prüfe Gültigkeit der Zeitstempel...</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation>Dieses Video enthält B-Frames, aber Presentation Timestamps (PTS) entweder fehlen oder monoton ansteigen. Avidemux kann durch Dekodierung des ganzen Videos die korrekten PTS zu rekonstruieren versuchen. Das kann viel Zeit in Anspruch nehmen. Fortfahren?</translation>
18
     </message>
19
@@ -1052,7 +1052,7 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+230"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+246"/>
25
         <source>_Accept non-standard audio frequency for DVD</source>
26
         <translation type="unfinished">_Erlaube auch nicht DVD-konforme Audiofrequenzen (DVD-konform sind lediglich 48kHz und 96kHz)</translation>
27
     </message>
28
@@ -1167,12 +1167,11 @@
29
         <translation type="unfinished">Priorisierung bestimmter Aufgaben</translation>
30
     </message>
31
     <message>
32
-        <location line="+5"/>
33
         <source>_Use alternative tag for MP3 in .mp4</source>
34
-        <translation type="unfinished">_Alternativen &apos;Tag&apos; für MP3-Tonspuren in MPEG-4 Containern benutzen</translation>
35
+        <translation type="obsolete">_Alternativen &apos;Tag&apos; für MP3-Tonspuren in MPEG-4 Containern benutzen</translation>
36
     </message>
37
     <message>
38
-        <location line="+1"/>
39
+        <location line="+5"/>
40
         <source>_Default to the directory of the last read file for saving</source>
41
         <translation>_Den Ordner der gerade geladenen Datei als Speicherziel vorschlagen</translation>
42
     </message>
43
@@ -1182,7 +1181,17 @@
44
         <translation>Im Kopiermodus _Gleichmäßigkeit der Zeitstempel für Dekodierung (DTS) erhöhen</translation>
45
     </message>
46
     <message>
47
-        <location line="+5"/>
48
+        <location line="+2"/>
49
+        <source>Caching of decoded pictures</source>
50
+        <translation>Zwischenspeicher für dekodierte Frames</translation>
51
+    </message>
52
+    <message>
53
+        <location line="+1"/>
54
+        <source>_Cache size:</source>
55
+        <translation>Größe des _Zwischenspeichers:</translation>
56
+    </message>
57
+    <message>
58
+        <location line="+6"/>
59
         <source>XVideo (best)</source>
60
         <translation type="unfinished">XVideo (bestens)</translation>
61
     </message>
62
@@ -1192,7 +1201,7 @@
63
         <translation type="unfinished"></translation>
64
     </message>
65
     <message>
66
-        <location line="+15"/>
67
+        <location line="+11"/>
68
         <source>SDL (good)</source>
69
         <translation type="unfinished">SDL (gut)</translation>
70
     </message>
71
@@ -1289,7 +1298,7 @@
72
         <location line="+5"/>
73
         <location filename="../../common/gui_save.cpp" line="+57"/>
74
         <location line="+10"/>
75
-        <location line="+278"/>
76
+        <location line="+277"/>
77
         <location line="+19"/>
78
         <location line="+7"/>
79
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
80
@@ -1306,7 +1315,7 @@
81
     </message>
82
     <message>
83
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
84
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
85
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
86
         <source>CPU</source>
87
         <translation type="unfinished">Prozessor</translation>
88
     </message>
89
@@ -1326,12 +1335,13 @@
90
         <translation>Standardport</translation>
91
     </message>
92
     <message>
93
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
94
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
95
         <source>Pr&amp;eferences</source>
96
         <translation>&amp;Einstellungen</translation>
97
     </message>
98
     <message>
99
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+10"/>
100
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+7"/>
101
+        <location line="+3"/>
102
         <source>Preferences</source>
103
         <translation>Einstellungen</translation>
104
     </message>
105
@@ -1352,8 +1362,6 @@
106
     </message>
107
     <message>
108
         <location line="+1"/>
109
-        <location filename="../../common/gui_save.cpp" line="+288"/>
110
-        <location line="+10"/>
111
         <source>Queue</source>
112
         <translation>Zur &amp;Warteschlange hinzufügen...</translation>
113
     </message>
114
@@ -1731,12 +1739,12 @@
115
         <translation type="unfinished">Audiogeräte</translation>
116
     </message>
117
     <message>
118
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-285"/>
119
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-283"/>
120
         <source>Enable openGl support</source>
121
         <translation>OpenG_L benutzen</translation>
122
     </message>
123
     <message>
124
-        <location line="+237"/>
125
+        <location line="+232"/>
126
         <source>_Limit Refresh Rate</source>
127
         <translation>_Bildwiederholungsfrequenz begrenzen</translation>
128
     </message>
129
@@ -1746,29 +1754,39 @@
130
         <translation>Bild _neu aufbauen nicht häufiger als nach (ms)</translation>
131
     </message>
132
     <message>
133
-        <location line="-189"/>
134
+        <location line="-188"/>
135
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="+47"/>
136
         <source>High</source>
137
         <translation>Hoch</translation>
138
     </message>
139
     <message>
140
-        <location line="-56"/>
141
+        <location line="-58"/>
142
         <source>Decode video using DXVA2 (windows)</source>
143
         <translation>Video mittels _DXVA2 dekodieren (nur Windows)</translation>
144
     </message>
145
     <message>
146
+        <location line="+1"/>
147
+        <source>Ignore driver blacklist (Intel)</source>
148
+        <translation type="unfinished"></translation>
149
+    </message>
150
+    <message>
151
+        <location line="+1"/>
152
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
153
+        <translation type="unfinished"></translation>
154
+    </message>
155
+    <message>
156
         <location line="+60"/>
157
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="-2"/>
158
         <source>Low</source>
159
         <translation>Niedrig</translation>
160
     </message>
161
     <message>
162
-        <location line="+21"/>
163
+        <location line="+24"/>
164
         <source>VDPAU (best)</source>
165
         <translation type="unfinished">VDPAU (bestens)</translation>
166
     </message>
167
     <message>
168
-        <location line="+10"/>
169
+        <location line="+6"/>
170
         <source>OpenGL (best)</source>
171
         <translation>OpenGL (bestens)</translation>
172
     </message>
173
@@ -1811,46 +1829,106 @@
174
         <translation>Codec-Fehler</translation>
175
     </message>
176
     <message>
177
-        <location filename="../../common/gui_main.cpp" line="+373"/>
178
+        <location filename="../../common/gui_main.cpp" line="+369"/>
179
         <source>Not coded in this version</source>
180
         <translation>Nicht implementiert in dieser Version</translation>
181
     </message>
182
     <message>
183
-        <location line="+251"/>
184
+        <location line="+209"/>
185
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
186
+Proceed anyway?</source>
187
+        <translation>Dieses Video verwendet Nicht-IDR-Frames für den Direktzugriff. Der Zähler für die Anzeigereihenfolge der Frames (POC) wird an solchen Keyframes nicht zurückgesetzt. Die Wiedergabe des im Kopiermodus gespeicherten editierten Videos kann durch den unerwartet zurückgehenden Zähler an Schnittpunkten der eingefügten Auswahl stocken.
188
+Trotzdem fortsetzen?</translation>
189
+    </message>
190
+    <message>
191
+        <location line="+7"/>
192
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
193
+Playback of the video saved in copy mode may stop at this point.
194
+Proceed anyway?</source>
195
+        <translation>Codec oder Codec-Parameter an den Schnittpunkten der eingefügten Auswahl sind nicht identisch. Die Wiedergabe des im Kopiermodus gespeicherten editierten Videos kann an diesen Stellen abbrechen.
196
+Trotzdem fortsetzen?</translation>
197
+    </message>
198
+    <message>
199
+        <location line="+5"/>
200
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_el.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_el.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>Η προσπάθεια ανοίγματος του %s απέτυχε.</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation>Ελέγχεται η εγκυρότητα των χρονοσφραγίδων...</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation>Αυτό το βίντεο περιέχει Β΄-στιγμιότυπα.
18
 Αλλά, οι Χρονοσφραγίδες Παρουσίασης (PTS), είτε λείπουν, είτε αυξάνονται μονοτονικά.
19
@@ -1059,11 +1059,21 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
25
         <source>Decode video using DXVA2 (windows)</source>
26
         <translation>Αποκωδικοποίηση του βίντεου με τη χρήση DXVA2 (windows)</translation>
27
     </message>
28
     <message>
29
+        <location line="+1"/>
30
+        <source>Ignore driver blacklist (Intel)</source>
31
+        <translation type="unfinished"></translation>
32
+    </message>
33
+    <message>
34
+        <location line="+1"/>
35
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
36
+        <translation type="unfinished"></translation>
37
+    </message>
38
+    <message>
39
         <location line="+13"/>
40
         <source>_Revert to saved default output settings on video load</source>
41
         <translation>_Επαναφορά στις προεπιλεγμένες ρυθμίσεις εξόδου του βίντεου, κατά τη φόρτωση του αρχείου</translation>
42
@@ -1186,7 +1196,7 @@
43
         <translation>Ορισμός Προτεραιοτήτων</translation>
44
     </message>
45
     <message>
46
-        <location line="+6"/>
47
+        <location line="+5"/>
48
         <source>_Default to the directory of the last read file for saving</source>
49
         <translation>_Προεπιλογή, για αποθήκευση, στον κατάλογο του τελευταίου διαβασμένου αρχείου</translation>
50
     </message>
51
@@ -1196,7 +1206,17 @@
52
         <translation>Εξυγίαν_ση των Στιγμιότυπων Αποκωδικοποίησης (DTS), όταν λειτουργεί σε κατάσταση αντιγραφής</translation>
53
     </message>
54
     <message>
55
-        <location line="+5"/>
56
+        <location line="+2"/>
57
+        <source>Caching of decoded pictures</source>
58
+        <translation type="unfinished"></translation>
59
+    </message>
60
+    <message>
61
+        <location line="+1"/>
62
+        <source>_Cache size:</source>
63
+        <translation type="unfinished"></translation>
64
+    </message>
65
+    <message>
66
+        <location line="+6"/>
67
         <source>XVideo (best)</source>
68
         <translation>XVideo (καλύτερη)</translation>
69
     </message>
70
@@ -1206,7 +1226,7 @@
71
         <translation>DXVA2 (καλύτερη)</translation>
72
     </message>
73
     <message>
74
-        <location line="+15"/>
75
+        <location line="+11"/>
76
         <source>SDL (good)</source>
77
         <translation>SDL (καλή)</translation>
78
     </message>
79
@@ -1309,7 +1329,7 @@
80
         <location line="+5"/>
81
         <location filename="../../common/gui_save.cpp" line="+57"/>
82
         <location line="+10"/>
83
-        <location line="+278"/>
84
+        <location line="+277"/>
85
         <location line="+19"/>
86
         <location line="+7"/>
87
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
88
@@ -1326,24 +1346,22 @@
89
     </message>
90
     <message>
91
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
92
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
93
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
94
         <source>CPU</source>
95
         <translation>Κεντρικός Επεξεργαστής</translation>
96
     </message>
97
     <message>
98
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+18"/>
99
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+15"/>
100
+        <location line="+3"/>
101
         <source>Preferences</source>
102
         <translation>Προτιμήσεις</translation>
103
     </message>
104
     <message>
105
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
106
-        <location line="+2"/>
107
-        <location line="+2"/>
108
         <source>-</source>
109
-        <translation>-</translation>
110
+        <translation type="vanished">-</translation>
111
     </message>
112
     <message>
113
-        <location line="-1"/>
114
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+49"/>
115
         <source>Connect to avsproxy</source>
116
         <translation>Σύνδεση στο avsproxy</translation>
117
     </message>
118
@@ -1547,12 +1565,31 @@
119
         <translation>Σφάλμα Κώδικα</translation>
120
     </message>
121
     <message>
122
-        <location filename="../../common/gui_main.cpp" line="+373"/>
123
+        <location filename="../../common/gui_main.cpp" line="+369"/>
124
         <source>Not coded in this version</source>
125
         <translation>Δεν κωδικοποιήθηκε σε αυτή την έκδοση</translation>
126
     </message>
127
     <message>
128
-        <location line="+251"/>
129
+        <location line="+209"/>
130
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
131
+Proceed anyway?</source>
132
+        <translation type="unfinished"></translation>
133
+    </message>
134
+    <message>
135
+        <location line="+7"/>
136
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
137
+Playback of the video saved in copy mode may stop at this point.
138
+Proceed anyway?</source>
139
+        <translation type="unfinished"></translation>
140
+    </message>
141
+    <message>
142
+        <location line="+5"/>
143
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
144
+Try anyway?</source>
145
+        <translation type="unfinished"></translation>
146
+    </message>
147
+    <message>
148
+        <location line="+60"/>
149
         <source>Are you sure?</source>
150
         <translation>Στα σίγουρα;</translation>
151
     </message>
152
@@ -1574,7 +1611,7 @@
153
 Παρακαλώ, έλεγξε, ξανά, τις θέσεις των δεικτών Α και Β.</translation>
154
     </message>
155
     <message>
156
-        <location line="+24"/>
157
+        <location line="+30"/>
158
         <source>The end point of the cut is not on a keyframe.
159
 Video saved in copy mode will be corrupted at this point.
160
 Proceed anyway?</source>
161
@@ -1585,7 +1622,7 @@
162
 Να συνεχιστεί, έτσι κι αλλιώς;</translation>
163
     </message>
164
     <message>
165
-        <location line="+5"/>
166
+        <location line="+4"/>
167
         <source>The end point of the deletion is not on a keyframe.
168
 Video saved in copy mode will be corrupted at this point.
169
 Proceed anyway?</source>
170
@@ -1596,7 +1633,38 @@
171
 Να συνεχιστεί, έτσι κι αλλιώς;</translation>
172
     </message>
173
     <message>
174
-        <location line="+100"/>
175
+        <location line="+6"/>
176
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
177
+Proceed anyway?</source>
178
+        <translation type="unfinished"></translation>
179
+    </message>
180
+    <message>
181
+        <location line="+6"/>
182
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
183
+Proceed anyway?</source>
184
+        <translation type="unfinished"></translation>
185
+    </message>
186
+    <message>
187
+        <location line="+8"/>
188
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
189
+Proceed anyway?</source>
190
+        <translation type="unfinished"></translation>
191
+    </message>
192
+    <message>
193
+        <location line="+4"/>
194
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
195
+Proceed anyway?</source>
196
+        <translation type="unfinished"></translation>
197
+    </message>
198
+    <message>
199
+        <location line="+5"/>
200
+        <source>Cut points could not be checked.
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_en.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_en.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
7
         <source>Cannot find a demuxer for %s</source>
8
         <translation type="unfinished"></translation>
9
     </message>
10
@@ -56,7 +56,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1050,7 +1050,7 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
24
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
25
         <source>Open</source>
26
         <translation>&amp;Open...</translation>
27
     </message>
28
@@ -1066,8 +1066,6 @@
29
     </message>
30
     <message>
31
         <location line="+1"/>
32
-        <location filename="../../common/gui_save.cpp" line="+659"/>
33
-        <location line="+10"/>
34
         <source>Queue</source>
35
         <translation>Qu&amp;eue</translation>
36
     </message>
37
@@ -1298,7 +1296,7 @@
38
     </message>
39
     <message>
40
         <location line="+1"/>
41
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+366"/>
42
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+381"/>
43
         <source>Stereo</source>
44
         <translation type="unfinished"></translation>
45
     </message>
46
@@ -1454,7 +1452,7 @@
47
     </message>
48
     <message>
49
         <location line="+1"/>
50
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
51
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
52
         <source>CPU</source>
53
         <translation type="unfinished"></translation>
54
     </message>
55
@@ -1500,12 +1498,12 @@
56
     </message>
57
     <message>
58
         <location line="+23"/>
59
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
60
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
61
         <location line="+3"/>
62
         <location line="+5"/>
63
-        <location filename="../../common/gui_save.cpp" line="-612"/>
64
+        <location filename="../../common/gui_save.cpp" line="+57"/>
65
         <location line="+10"/>
66
-        <location line="+278"/>
67
+        <location line="+277"/>
68
         <location line="+19"/>
69
         <location line="+7"/>
70
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
71
@@ -1610,42 +1608,47 @@
72
         <translation type="unfinished"></translation>
73
     </message>
74
     <message>
75
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-170"/>
76
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-171"/>
77
         <source>Decode video using DXVA2 (windows)</source>
78
         <translation type="unfinished"></translation>
79
     </message>
80
     <message>
81
-        <location line="+1"/>
82
+        <location line="+6"/>
83
         <source>Decode video using VDPAU (NVIDIA)</source>
84
         <translation type="unfinished"></translation>
85
     </message>
86
     <message>
87
         <location line="+1"/>
88
-        <source>Decode video using XVBA (AMD)</source>
89
-        <translation type="unfinished"></translation>
90
-    </message>
91
-    <message>
92
-        <location line="+1"/>
93
         <source>Decode video using LIBVA (INTEL)</source>
94
         <translation type="unfinished"></translation>
95
     </message>
96
     <message>
97
-        <location line="+2"/>
98
+        <location line="-3"/>
99
         <source>Decode video using VideoToolbox (macOS)</source>
100
         <translation type="unfinished"></translation>
101
     </message>
102
     <message>
103
-        <location line="+2"/>
104
+        <location line="+9"/>
105
         <source>Enable openGl support</source>
106
         <translation type="unfinished"></translation>
107
     </message>
108
     <message>
109
-        <location line="+2"/>
110
+        <location line="-3"/>
111
         <source>If you use Hw decoding, it is better to use the matching display driver</source>
112
         <translation type="unfinished"></translation>
113
     </message>
114
     <message>
115
-        <location line="+3"/>
116
+        <location line="-9"/>
117
+        <source>Ignore driver blacklist (Intel)</source>
118
+        <translation type="unfinished"></translation>
119
+    </message>
120
+    <message>
121
+        <location line="+1"/>
122
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
123
+        <translation type="unfinished"></translation>
124
+    </message>
125
+    <message>
126
+        <location line="+12"/>
127
         <source>_Accept non-standard audio frequency for DVD</source>
128
         <translation type="unfinished"></translation>
129
     </message>
130
@@ -1778,21 +1781,26 @@
131
     </message>
132
     <message>
133
         <location line="+5"/>
134
-        <source>_Use alternative tag for MP3 in .mp4</source>
135
+        <source>_Default to the directory of the last read file for saving</source>
136
         <translation type="unfinished"></translation>
137
     </message>
138
     <message>
139
         <location line="+1"/>
140
-        <source>_Default to the directory of the last read file for saving</source>
141
+        <source>_Sanitize decode time stamps (DTS) in copy mode</source>
142
+        <translation type="unfinished"></translation>
143
+    </message>
144
+    <message>
145
+        <location line="+2"/>
146
+        <source>Caching of decoded pictures</source>
147
         <translation type="unfinished"></translation>
148
     </message>
149
     <message>
150
         <location line="+1"/>
151
-        <source>_Sanitize decode time stamps (DTS) in copy mode</source>
152
+        <source>_Cache size:</source>
153
         <translation type="unfinished"></translation>
154
     </message>
155
     <message>
156
-        <location line="+5"/>
157
+        <location line="+6"/>
158
         <source>XVideo (best)</source>
159
         <translation type="unfinished"></translation>
160
     </message>
161
@@ -1807,7 +1815,7 @@
162
         <translation type="unfinished"></translation>
163
     </message>
164
     <message>
165
-        <location line="+7"/>
166
+        <location line="+3"/>
167
         <source>OpenGL (best)</source>
168
         <translation type="unfinished"></translation>
169
     </message>
170
@@ -1951,6 +1959,7 @@
171
     <message>
172
         <location line="+4"/>
173
         <location line="+3"/>
174
+        <location line="+3"/>
175
         <source>HW Accel</source>
176
         <translation type="unfinished"></translation>
177
     </message>
178
@@ -1970,7 +1979,8 @@
179
         <translation type="unfinished"></translation>
180
     </message>
181
     <message>
182
-        <location line="+10"/>
183
+        <location line="+7"/>
184
+        <location line="+3"/>
185
         <source>Preferences</source>
186
         <translation type="unfinished"></translation>
187
     </message>
188
@@ -1985,14 +1995,7 @@
189
         <translation type="unfinished"></translation>
190
     </message>
191
     <message>
192
-        <location line="+3"/>
193
-        <location line="+2"/>
194
-        <location line="+2"/>
195
-        <source>-</source>
196
-        <translation type="unfinished"></translation>
197
-    </message>
198
-    <message>
199
-        <location line="-1"/>
200
+        <location line="+6"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_es.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_es.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>¡Error al intentar abrir %s!</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation>Comprobando si las marcas de tiempo son válidas..</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation>Este vídeo contiene fotogramas-B, pero las marcas de tiempo de presentación (PTS) faltan o aumentan monotónicamente. Avidemux puede intentar reconstruir las PTS correctas decodificando el vídeo entero. Esto puede llevar mucho tiempo. ¿Quiere proceder?</translation>
18
     </message>
19
@@ -1058,11 +1058,21 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
25
         <source>Decode video using DXVA2 (windows)</source>
26
         <translation>Decodificar vídeos usando DXVA2 (windows)</translation>
27
     </message>
28
     <message>
29
+        <location line="+1"/>
30
+        <source>Ignore driver blacklist (Intel)</source>
31
+        <translation type="unfinished"></translation>
32
+    </message>
33
+    <message>
34
+        <location line="+1"/>
35
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
36
+        <translation type="unfinished"></translation>
37
+    </message>
38
+    <message>
39
         <location line="+12"/>
40
         <source>_Accept non-standard audio frequency for DVD</source>
41
         <translation>Permitir frecuencias de _audio no estándar para DVD</translation>
42
@@ -1190,12 +1200,11 @@
43
         <translation>Priorización</translation>
44
     </message>
45
     <message>
46
-        <location line="+5"/>
47
         <source>_Use alternative tag for MP3 in .mp4</source>
48
-        <translation>_Usar una etiqueta alternativa para MP3 en .mp4</translation>
49
+        <translation type="vanished">_Usar una etiqueta alternativa para MP3 en .mp4</translation>
50
     </message>
51
     <message>
52
-        <location line="+1"/>
53
+        <location line="+5"/>
54
         <source>_Default to the directory of the last read file for saving</source>
55
         <translation>Usar por _defecto el diretorio del último archivo leído para guardar</translation>
56
     </message>
57
@@ -1205,7 +1214,7 @@
58
         <translation>_Sanear las marcas de tiempo de decodificación (DTS) en modo de copia</translation>
59
     </message>
60
     <message>
61
-        <location line="+5"/>
62
+        <location line="+9"/>
63
         <source>XVideo (best)</source>
64
         <translation>XVideo (mejor)</translation>
65
     </message>
66
@@ -1215,7 +1224,7 @@
67
         <translation></translation>
68
     </message>
69
     <message>
70
-        <location line="+15"/>
71
+        <location line="+11"/>
72
         <source>SDL (good)</source>
73
         <translation>SDL (bueno)</translation>
74
     </message>
75
@@ -1340,7 +1349,7 @@
76
         <location line="+5"/>
77
         <location filename="../../common/gui_save.cpp" line="+57"/>
78
         <location line="+10"/>
79
-        <location line="+278"/>
80
+        <location line="+277"/>
81
         <location line="+19"/>
82
         <location line="+7"/>
83
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
84
@@ -1357,7 +1366,7 @@
85
     </message>
86
     <message>
87
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
88
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
89
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
90
         <source>CPU</source>
91
         <translation type="unfinished"></translation>
92
     </message>
93
@@ -1367,12 +1376,13 @@
94
         <translation>Subprocesos</translation>
95
     </message>
96
     <message>
97
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
98
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
99
         <source>Pr&amp;eferences</source>
100
         <translation>Pr&amp;eferencias</translation>
101
     </message>
102
     <message>
103
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+14"/>
104
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+11"/>
105
+        <location line="+3"/>
106
         <source>Preferences</source>
107
         <translation>Preferencias</translation>
108
     </message>
109
@@ -1393,8 +1403,6 @@
110
     </message>
111
     <message>
112
         <location line="+1"/>
113
-        <location filename="../../common/gui_save.cpp" line="+288"/>
114
-        <location line="+10"/>
115
         <source>Queue</source>
116
         <translation>Cola</translation>
117
     </message>
118
@@ -1429,14 +1437,7 @@
119
         <translation>Cerrar</translation>
120
     </message>
121
     <message>
122
-        <location line="+1"/>
123
         <location line="+2"/>
124
-        <location line="+2"/>
125
-        <source>-</source>
126
-        <translation type="unfinished"></translation>
127
-    </message>
128
-    <message>
129
-        <location line="-3"/>
130
         <source>Information</source>
131
         <translation>Información</translation>
132
     </message>
133
@@ -1826,23 +1827,23 @@
134
         <translation>Guardar tarea</translation>
135
     </message>
136
     <message>
137
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-285"/>
138
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-283"/>
139
         <source>Enable openGl support</source>
140
         <translation>Activar el soporte para openGL</translation>
141
     </message>
142
     <message>
143
-        <location line="+74"/>
144
+        <location line="+73"/>
145
         <source>VDPAU (best)</source>
146
         <translation>VDPAU (mejor)</translation>
147
     </message>
148
     <message>
149
-        <location line="+10"/>
150
+        <location line="+6"/>
151
         <source>OpenGL (best)</source>
152
         <translation>OpenGL (mejor)</translation>
153
     </message>
154
     <message>
155
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
156
-        <location filename="../../common/gui_save.cpp" line="-612"/>
157
+        <location filename="../../common/gui_save.cpp" line="-313"/>
158
         <source>No audio track</source>
159
         <translation>No hay pistas de audio</translation>
160
     </message>
161
@@ -1899,17 +1900,36 @@
162
 Se necesita para crear vídeos compatibles con PSP.</translation>
163
     </message>
164
     <message>
165
-        <location filename="../../common/gui_main.cpp" line="+189"/>
166
+        <location filename="../../common/gui_main.cpp" line="+186"/>
167
         <source>Select script to save</source>
168
         <translation>Seleccionar script a guardar</translation>
169
     </message>
170
     <message>
171
-        <location line="+184"/>
172
+        <location line="+183"/>
173
         <source>Not coded in this version</source>
174
         <translation>Sin codificar en esta versión</translation>
175
     </message>
176
     <message>
177
-        <location line="+251"/>
178
+        <location line="+209"/>
179
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
180
+Proceed anyway?</source>
181
+        <translation type="unfinished"></translation>
182
+    </message>
183
+    <message>
184
+        <location line="+7"/>
185
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
186
+Playback of the video saved in copy mode may stop at this point.
187
+Proceed anyway?</source>
188
+        <translation type="unfinished"></translation>
189
+    </message>
190
+    <message>
191
+        <location line="+5"/>
192
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
193
+Try anyway?</source>
194
+        <translation type="unfinished"></translation>
195
+    </message>
196
+    <message>
197
+        <location line="+60"/>
198
         <source>Are you sure?</source>
199
         <translation>¿Está seguro?</translation>
200
     </message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_eu.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_eu.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
7
         <source>Cannot find a demuxer for %s</source>
8
         <translation>Ezin da desmultiplexatzailea aurkitu %s-rako</translation>
9
     </message>
10
@@ -44,7 +44,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+85"/>
15
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+102"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -78,7 +78,7 @@
20
         <translation type="unfinished"></translation>
21
     </message>
22
     <message>
23
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-172"/>
24
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-189"/>
25
         <source>Checking if timestamps are valid..</source>
26
         <translation type="unfinished"></translation>
27
     </message>
28
@@ -1099,7 +1099,7 @@
29
     </message>
30
     <message>
31
         <location line="+1"/>
32
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+366"/>
33
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+381"/>
34
         <source>Stereo</source>
35
         <translation>Estereoa</translation>
36
     </message>
37
@@ -1250,7 +1250,7 @@
38
     </message>
39
     <message>
40
         <location line="+1"/>
41
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
42
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
43
         <source>CPU</source>
44
         <translation>CPU</translation>
45
     </message>
46
@@ -1296,12 +1296,12 @@
47
     </message>
48
     <message>
49
         <location line="+23"/>
50
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
51
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
52
         <location line="+3"/>
53
         <location line="+5"/>
54
         <location filename="../../common/gui_save.cpp" line="+57"/>
55
         <location line="+10"/>
56
-        <location line="+278"/>
57
+        <location line="+277"/>
58
         <location line="+19"/>
59
         <location line="+7"/>
60
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
61
@@ -1406,17 +1406,27 @@
62
         <translation type="unfinished"></translation>
63
     </message>
64
     <message>
65
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-170"/>
66
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-171"/>
67
         <source>Decode video using DXVA2 (windows)</source>
68
         <translation type="unfinished"></translation>
69
     </message>
70
     <message>
71
-        <location line="+7"/>
72
+        <location line="+1"/>
73
+        <source>Ignore driver blacklist (Intel)</source>
74
+        <translation type="unfinished"></translation>
75
+    </message>
76
+    <message>
77
+        <location line="+1"/>
78
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
79
+        <translation type="unfinished"></translation>
80
+    </message>
81
+    <message>
82
+        <location line="+11"/>
83
         <source>Enable openGl support</source>
84
         <translation>Gaitu openGl sostengua</translation>
85
     </message>
86
     <message>
87
-        <location line="+5"/>
88
+        <location line="+1"/>
89
         <source>_Accept non-standard audio frequency for DVD</source>
90
         <translation>_Onartu audio maiztasun ez-estandarra DVD-rako</translation>
91
     </message>
92
@@ -1543,16 +1553,25 @@
93
         <translation>Lehentasunpena</translation>
94
     </message>
95
     <message>
96
-        <location line="+5"/>
97
         <source>_Use alternative tag for MP3 in .mp4</source>
98
-        <translation>_Erabili aukerazko etiketak MP3-rako .mp4-an</translation>
99
+        <translation type="vanished">_Erabili aukerazko etiketak MP3-rako .mp4-an</translation>
100
     </message>
101
     <message>
102
-        <location line="+1"/>
103
+        <location line="+5"/>
104
         <source>_Default to the directory of the last read file for saving</source>
105
         <translation type="unfinished"></translation>
106
     </message>
107
     <message>
108
+        <location line="+3"/>
109
+        <source>Caching of decoded pictures</source>
110
+        <translation type="unfinished"></translation>
111
+    </message>
112
+    <message>
113
+        <location line="+1"/>
114
+        <source>_Cache size:</source>
115
+        <translation type="unfinished"></translation>
116
+    </message>
117
+    <message>
118
         <location line="+6"/>
119
         <source>XVideo (best)</source>
120
         <translation>XVideo (hoberena)</translation>
121
@@ -1568,7 +1587,7 @@
122
         <translation type="unfinished"></translation>
123
     </message>
124
     <message>
125
-        <location line="+7"/>
126
+        <location line="+3"/>
127
         <source>OpenGL (best)</source>
128
         <translation>OpenGL (hoberena)</translation>
129
     </message>
130
@@ -1677,17 +1696,18 @@
131
         <translation>Bideoa</translation>
132
     </message>
133
     <message>
134
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+53"/>
135
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+56"/>
136
         <source>Threading</source>
137
         <translation>Hariak</translation>
138
     </message>
139
     <message>
140
-        <location line="+14"/>
141
+        <location line="+11"/>
142
+        <location line="+3"/>
143
         <source>Preferences</source>
144
         <translation>Hobespenak</translation>
145
     </message>
146
     <message>
147
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
148
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
149
         <source>Open</source>
150
         <translation>Ireki</translation>
151
     </message>
152
@@ -1703,8 +1723,6 @@
153
     </message>
154
     <message>
155
         <location line="+1"/>
156
-        <location filename="../../common/gui_save.cpp" line="+288"/>
157
-        <location line="+10"/>
158
         <source>Queue</source>
159
         <translation>Lerrokatu</translation>
160
     </message>
161
@@ -1739,14 +1757,11 @@
162
         <translation>Itxi</translation>
163
     </message>
164
     <message>
165
-        <location line="+1"/>
166
-        <location line="+2"/>
167
-        <location line="+2"/>
168
         <source>-</source>
169
-        <translation>-</translation>
170
+        <translation type="vanished">-</translation>
171
     </message>
172
     <message>
173
-        <location line="-3"/>
174
+        <location line="+2"/>
175
         <source>Information</source>
176
         <translation>Argibideak</translation>
177
     </message>
178
@@ -1965,7 +1980,7 @@
179
     </message>
180
     <message>
181
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
182
-        <location filename="../../common/gui_save.cpp" line="-612"/>
183
+        <location filename="../../common/gui_save.cpp" line="-313"/>
184
         <source>No audio track</source>
185
         <translation>Audio biderik ez</translation>
186
     </message>
187
@@ -2022,17 +2037,36 @@
188
 Hau beharrezkoa da PSP bateragarri bideoa sortzeko.</translation>
189
     </message>
190
     <message>
191
-        <location filename="../../common/gui_main.cpp" line="+189"/>
192
+        <location filename="../../common/gui_main.cpp" line="+186"/>
193
         <source>Select script to save</source>
194
         <translation>Hautatu gordetzeko eskripta</translation>
195
     </message>
196
     <message>
197
-        <location line="+184"/>
198
+        <location line="+183"/>
199
         <source>Not coded in this version</source>
200
         <translation>Kodeatu gabe bertsio honetan</translation>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_fr.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_fr.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+85"/>
6
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+102"/>
7
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
8
         <translation type="unfinished"></translation>
9
     </message>
10
@@ -30,7 +30,7 @@
11
 Ignorer les informations de timing ?</translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
15
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
16
         <source>Cannot find a demuxer for %s</source>
17
         <translation>Impossible de trouver un demuxer pour lire %s</translation>
18
     </message>
19
@@ -79,7 +79,7 @@
20
 2) Concaténer ces videos ensembles</translation>
21
     </message>
22
     <message>
23
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-172"/>
24
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-189"/>
25
         <source>Checking if timestamps are valid..</source>
26
         <translation>Vérification des informations de temps</translation>
27
     </message>
28
@@ -1057,17 +1057,27 @@
29
 <context>
30
     <name>adm</name>
31
     <message>
32
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
33
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
34
         <source>Decode video using DXVA2 (windows)</source>
35
         <translation>Utiliser DXVA2 pour décoder (Windows)</translation>
36
     </message>
37
     <message>
38
-        <location line="+7"/>
39
+        <location line="+1"/>
40
+        <source>Ignore driver blacklist (Intel)</source>
41
+        <translation type="unfinished"></translation>
42
+    </message>
43
+    <message>
44
+        <location line="+1"/>
45
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
46
+        <translation type="unfinished"></translation>
47
+    </message>
48
+    <message>
49
+        <location line="+11"/>
50
         <source>Enable openGl support</source>
51
         <translation>Activer OpenGL</translation>
52
     </message>
53
     <message>
54
-        <location line="+5"/>
55
+        <location line="+1"/>
56
         <source>_Accept non-standard audio frequency for DVD</source>
57
         <translation>Accepter les fréquences non standard pour les DVDs</translation>
58
     </message>
59
@@ -1184,17 +1194,16 @@
60
         <translation>Priorités</translation>
61
     </message>
62
     <message>
63
-        <location line="+5"/>
64
         <source>_Use alternative tag for MP3 in .mp4</source>
65
-        <translation>Utiliser un tag alternatif pour les pistes mp3 (.mp4)</translation>
66
+        <translation type="vanished">Utiliser un tag alternatif pour les pistes mp3 (.mp4)</translation>
67
     </message>
68
     <message>
69
-        <location line="+1"/>
70
+        <location line="+5"/>
71
         <source>_Default to the directory of the last read file for saving</source>
72
         <translation>Utiliser le répertoire du dernier fichier lu comme répertoire de sauvegarde par défaut</translation>
73
     </message>
74
     <message>
75
-        <location line="+6"/>
76
+        <location line="+10"/>
77
         <source>XVideo (best)</source>
78
         <translation>Xvideo (rapide)</translation>
79
     </message>
80
@@ -1209,7 +1218,7 @@
81
         <translation type="unfinished"></translation>
82
     </message>
83
     <message>
84
-        <location line="+7"/>
85
+        <location line="+3"/>
86
         <source>OpenGL (best)</source>
87
         <translation>OpenGL (rapide)</translation>
88
     </message>
89
@@ -1311,7 +1320,7 @@
90
         <translation>Sortie</translation>
91
     </message>
92
     <message>
93
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
94
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
95
         <source>Open</source>
96
         <translation>Ouvrir</translation>
97
     </message>
98
@@ -1715,17 +1724,17 @@
99
         <translation>Impossible de choisir le codec FLV1.</translation>
100
     </message>
101
     <message>
102
-        <location filename="../../common/gui_main.cpp" line="+189"/>
103
+        <location filename="../../common/gui_main.cpp" line="+186"/>
104
         <source>Select script to save</source>
105
         <translation>Choisir le script à sauvegarder</translation>
106
     </message>
107
     <message>
108
-        <location line="+435"/>
109
+        <location line="+464"/>
110
         <source>Are you sure?</source>
111
         <translation>Etes vous sur ?</translation>
112
     </message>
113
     <message>
114
-        <location line="+181"/>
115
+        <location line="+218"/>
116
         <source>Cannot open &quot;%s&quot;.</source>
117
         <translation>Impossible d&apos;ouvrir &quot;%s&quot;.</translation>
118
     </message>
119
@@ -1745,7 +1754,7 @@
120
         <translation>Plusieurs pistes audio</translation>
121
     </message>
122
     <message>
123
-        <location line="+424"/>
124
+        <location line="+425"/>
125
         <location filename="../../../avidemux_core/ADM_coreImage/src/ADM_imageSave.cpp" line="+120"/>
126
         <source>Something bad happened</source>
127
         <translation>Quelque chose d&apos;anormal c&apos;est produit</translation>
128
@@ -1842,7 +1851,7 @@
129
     </message>
130
     <message>
131
         <location line="+1"/>
132
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
133
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
134
         <source>CPU</source>
135
         <translation></translation>
136
     </message>
137
@@ -1888,12 +1897,12 @@
138
     </message>
139
     <message>
140
         <location line="+23"/>
141
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
142
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
143
         <location line="+3"/>
144
         <location line="+5"/>
145
         <location filename="../../common/gui_save.cpp" line="+57"/>
146
         <location line="+10"/>
147
-        <location line="+278"/>
148
+        <location line="+277"/>
149
         <location line="+19"/>
150
         <location line="+7"/>
151
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
152
@@ -1971,14 +1980,13 @@
153
         <translation>Deringing</translation>
154
     </message>
155
     <message>
156
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-238"/>
157
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-234"/>
158
         <source>Decode video using VDPAU (NVIDIA)</source>
159
         <translation>Utiliser VDPAU pour décoder (NVIDIA)</translation>
160
     </message>
161
     <message>
162
-        <location line="+1"/>
163
         <source>Decode video using XVBA (AMD)</source>
164
-        <translation>Utiliser XVBA pour décoder (AMD)</translation>
165
+        <translation type="vanished">Utiliser XVBA pour décoder (AMD)</translation>
166
     </message>
167
     <message>
168
         <location line="+1"/>
169
@@ -1986,17 +1994,17 @@
170
         <translation>Utiliser LIBVA pour décoder (INTEL/...)</translation>
171
     </message>
172
     <message>
173
-        <location line="+2"/>
174
+        <location line="-3"/>
175
         <source>Decode video using VideoToolbox (macOS)</source>
176
         <translation type="unfinished"></translation>
177
     </message>
178
     <message>
179
-        <location line="+4"/>
180
+        <location line="+6"/>
181
         <source>If you use Hw decoding, it is better to use the matching display driver</source>
182
         <translation>Si vous activez le décodage HW, il est préférable d&apos;utiliser la même méthode d&apos;affichage</translation>
183
     </message>
184
     <message>
185
-        <location line="+7"/>
186
+        <location line="+8"/>
187
         <source>_Check for new release</source>
188
         <translation>Vérifier si il y a de nouvelle version</translation>
189
     </message>
190
@@ -2011,12 +2019,22 @@
191
         <translation></translation>
192
     </message>
193
     <message>
194
-        <location line="+21"/>
195
+        <location line="+20"/>
196
         <source>_Sanitize decode time stamps (DTS) in copy mode</source>
197
         <translation type="unfinished"></translation>
198
     </message>
199
     <message>
200
-        <location line="+21"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_hu.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_hu.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>A %s megnyitása sikertelen!</translation>
9
     </message>
10
@@ -39,7 +39,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+85"/>
15
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+102"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -78,7 +78,7 @@
20
         <translation type="unfinished"></translation>
21
     </message>
22
     <message>
23
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-172"/>
24
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-189"/>
25
         <source>Checking if timestamps are valid..</source>
26
         <translation type="unfinished"></translation>
27
     </message>
28
@@ -1056,11 +1056,21 @@
29
 <context>
30
     <name>adm</name>
31
     <message>
32
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
33
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
34
         <source>Decode video using DXVA2 (windows)</source>
35
         <translation type="unfinished"></translation>
36
     </message>
37
     <message>
38
+        <location line="+1"/>
39
+        <source>Ignore driver blacklist (Intel)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
+        <location line="+1"/>
44
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
45
+        <translation type="unfinished"></translation>
46
+    </message>
47
+    <message>
48
         <location line="+12"/>
49
         <source>_Accept non-standard audio frequency for DVD</source>
50
         <translation>Nem szabványos DVD hangsáv frekvencia elfogadása</translation>
51
@@ -1176,12 +1186,11 @@
52
         <translation>Prioritások beállítása</translation>
53
     </message>
54
     <message>
55
-        <location line="+5"/>
56
         <source>_Use alternative tag for MP3 in .mp4</source>
57
-        <translation>Alternatív MP3 Tag használata .mp4-ben</translation>
58
+        <translation type="vanished">Alternatív MP3 Tag használata .mp4-ben</translation>
59
     </message>
60
     <message>
61
-        <location line="+1"/>
62
+        <location line="+5"/>
63
         <source>_Default to the directory of the last read file for saving</source>
64
         <translation type="unfinished"></translation>
65
     </message>
66
@@ -1191,7 +1200,7 @@
67
         <translation type="unfinished"></translation>
68
     </message>
69
     <message>
70
-        <location line="+5"/>
71
+        <location line="+9"/>
72
         <source>XVideo (best)</source>
73
         <translation>XVideo (legjobb)</translation>
74
     </message>
75
@@ -1201,7 +1210,7 @@
76
         <translation type="unfinished"></translation>
77
     </message>
78
     <message>
79
-        <location line="+15"/>
80
+        <location line="+11"/>
81
         <source>SDL (good)</source>
82
         <translation>SDL (jó)</translation>
83
     </message>
84
@@ -1298,7 +1307,7 @@
85
         <location line="+5"/>
86
         <location filename="../../common/gui_save.cpp" line="+57"/>
87
         <location line="+10"/>
88
-        <location line="+278"/>
89
+        <location line="+277"/>
90
         <location line="+19"/>
91
         <location line="+7"/>
92
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
93
@@ -1315,7 +1324,7 @@
94
     </message>
95
     <message>
96
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
97
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
98
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
99
         <source>CPU</source>
100
         <translation>CPU</translation>
101
     </message>
102
@@ -1325,12 +1334,13 @@
103
         <translation>Szálak</translation>
104
     </message>
105
     <message>
106
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
107
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
108
         <source>Pr&amp;eferences</source>
109
         <translation>Beállítások</translation>
110
     </message>
111
     <message>
112
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+14"/>
113
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+11"/>
114
+        <location line="+3"/>
115
         <source>Preferences</source>
116
         <translation>Beállítások</translation>
117
     </message>
118
@@ -1351,8 +1361,6 @@
119
     </message>
120
     <message>
121
         <location line="+1"/>
122
-        <location filename="../../common/gui_save.cpp" line="+288"/>
123
-        <location line="+10"/>
124
         <source>Queue</source>
125
         <translation>Küldendő</translation>
126
     </message>
127
@@ -1387,14 +1395,11 @@
128
         <translation>Bezárás</translation>
129
     </message>
130
     <message>
131
-        <location line="+1"/>
132
-        <location line="+2"/>
133
-        <location line="+2"/>
134
         <source>-</source>
135
-        <translation>-</translation>
136
+        <translation type="vanished">-</translation>
137
     </message>
138
     <message>
139
-        <location line="-3"/>
140
+        <location line="+2"/>
141
         <source>Information</source>
142
         <translation>Jellemzők</translation>
143
     </message>
144
@@ -1891,12 +1896,12 @@
145
         <translation>Bővítmények infó</translation>
146
     </message>
147
     <message>
148
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-285"/>
149
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-283"/>
150
         <source>Enable openGl support</source>
151
         <translation>OpenGL engedélyezés</translation>
152
     </message>
153
     <message>
154
-        <location line="+49"/>
155
+        <location line="+45"/>
156
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="+4"/>
157
         <source>High</source>
158
         <translation>Magas</translation>
159
@@ -1908,12 +1913,12 @@
160
         <translation>Alacsony</translation>
161
     </message>
162
     <message>
163
-        <location line="+21"/>
164
+        <location line="+24"/>
165
         <source>VDPAU (best)</source>
166
         <translation>VDPAU (legjobb)</translation>
167
     </message>
168
     <message>
169
-        <location line="+10"/>
170
+        <location line="+6"/>
171
         <source>OpenGL (best)</source>
172
         <translation>OpenGL (legjobb)</translation>
173
     </message>
174
@@ -1952,7 +1957,7 @@
175
     </message>
176
     <message>
177
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
178
-        <location filename="../../common/gui_save.cpp" line="-612"/>
179
+        <location filename="../../common/gui_save.cpp" line="-313"/>
180
         <source>No audio track</source>
181
         <translation>Nincs hangsáv</translation>
182
     </message>
183
@@ -2009,17 +2014,36 @@
184
 A PSP kompatibilis videóhoz szükséges.</translation>
185
     </message>
186
     <message>
187
-        <location filename="../../common/gui_main.cpp" line="+189"/>
188
+        <location filename="../../common/gui_main.cpp" line="+186"/>
189
         <source>Select script to save</source>
190
         <translation>Mentendő szkript választás</translation>
191
     </message>
192
     <message>
193
-        <location line="+184"/>
194
+        <location line="+183"/>
195
         <source>Not coded in this version</source>
196
         <translation>Nem kódolt ebben a verzióban</translation>
197
     </message>
198
     <message>
199
-        <location line="+251"/>
200
+        <location line="+209"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_it.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_it.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>Tentativo di aprire %s fallito!</translation>
9
     </message>
10
@@ -39,7 +39,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+85"/>
15
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="+102"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -78,7 +78,7 @@
20
         <translation type="unfinished"></translation>
21
     </message>
22
     <message>
23
-        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-172"/>
24
+        <location filename="../../common/ADM_editor/src/utils/ADM_edCheckForInvalidPts.cpp" line="-189"/>
25
         <source>Checking if timestamps are valid..</source>
26
         <translation type="unfinished"></translation>
27
     </message>
28
@@ -1056,11 +1056,21 @@
29
 <context>
30
     <name>adm</name>
31
     <message>
32
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
33
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
34
         <source>Decode video using DXVA2 (windows)</source>
35
         <translation type="unfinished"></translation>
36
     </message>
37
     <message>
38
+        <location line="+1"/>
39
+        <source>Ignore driver blacklist (Intel)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
+        <location line="+1"/>
44
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
45
+        <translation type="unfinished"></translation>
46
+    </message>
47
+    <message>
48
         <location line="+12"/>
49
         <source>_Accept non-standard audio frequency for DVD</source>
50
         <translation>_Accetta frequenze audio non standard per DVD</translation>
51
@@ -1188,12 +1198,11 @@
52
         <translation>Prioritizzazione</translation>
53
     </message>
54
     <message>
55
-        <location line="+5"/>
56
         <source>_Use alternative tag for MP3 in .mp4</source>
57
-        <translation>_Usa etichette alternative per gli MP3 in file .mp4</translation>
58
+        <translation type="vanished">_Usa etichette alternative per gli MP3 in file .mp4</translation>
59
     </message>
60
     <message>
61
-        <location line="+1"/>
62
+        <location line="+5"/>
63
         <source>_Default to the directory of the last read file for saving</source>
64
         <translation type="unfinished"></translation>
65
     </message>
66
@@ -1203,7 +1212,17 @@
67
         <translation type="unfinished"></translation>
68
     </message>
69
     <message>
70
-        <location line="+5"/>
71
+        <location line="+2"/>
72
+        <source>Caching of decoded pictures</source>
73
+        <translation type="unfinished"></translation>
74
+    </message>
75
+    <message>
76
+        <location line="+1"/>
77
+        <source>_Cache size:</source>
78
+        <translation type="unfinished"></translation>
79
+    </message>
80
+    <message>
81
+        <location line="+6"/>
82
         <source>XVideo (best)</source>
83
         <translation>XVideo (migliore)</translation>
84
     </message>
85
@@ -1213,7 +1232,7 @@
86
         <translation type="unfinished"></translation>
87
     </message>
88
     <message>
89
-        <location line="+15"/>
90
+        <location line="+11"/>
91
         <source>SDL (good)</source>
92
         <translation>SDL (buono)</translation>
93
     </message>
94
@@ -1343,7 +1362,7 @@
95
         <location line="+5"/>
96
         <location filename="../../common/gui_save.cpp" line="+57"/>
97
         <location line="+10"/>
98
-        <location line="+278"/>
99
+        <location line="+277"/>
100
         <location line="+19"/>
101
         <location line="+7"/>
102
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
103
@@ -1360,7 +1379,7 @@
104
     </message>
105
     <message>
106
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
107
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
108
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
109
         <source>CPU</source>
110
         <translation>CPU</translation>
111
     </message>
112
@@ -1370,12 +1389,13 @@
113
         <translation>Threading</translation>
114
     </message>
115
     <message>
116
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
117
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
118
         <source>Pr&amp;eferences</source>
119
         <translation>Preferenze</translation>
120
     </message>
121
     <message>
122
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+14"/>
123
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+11"/>
124
+        <location line="+3"/>
125
         <source>Preferences</source>
126
         <translation>Preferenze</translation>
127
     </message>
128
@@ -1396,8 +1416,6 @@
129
     </message>
130
     <message>
131
         <location line="+1"/>
132
-        <location filename="../../common/gui_save.cpp" line="+288"/>
133
-        <location line="+10"/>
134
         <source>Queue</source>
135
         <translation>Coda</translation>
136
     </message>
137
@@ -1432,14 +1450,11 @@
138
         <translation>Chiudi</translation>
139
     </message>
140
     <message>
141
-        <location line="+1"/>
142
-        <location line="+2"/>
143
-        <location line="+2"/>
144
         <source>-</source>
145
-        <translation>-</translation>
146
+        <translation type="vanished">-</translation>
147
     </message>
148
     <message>
149
-        <location line="-3"/>
150
+        <location line="+2"/>
151
         <source>Information</source>
152
         <translation>Informazioni</translation>
153
     </message>
154
@@ -1934,23 +1949,23 @@
155
         <translation>Info plugin</translation>
156
     </message>
157
     <message>
158
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-285"/>
159
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-283"/>
160
         <source>Enable openGl support</source>
161
         <translation>Attiva supporto OpenGL</translation>
162
     </message>
163
     <message>
164
-        <location line="+74"/>
165
+        <location line="+73"/>
166
         <source>VDPAU (best)</source>
167
         <translation>VDPAU (migliore)</translation>
168
     </message>
169
     <message>
170
-        <location line="+10"/>
171
+        <location line="+6"/>
172
         <source>OpenGL (best)</source>
173
         <translation>OpenGL (migliore)</translation>
174
     </message>
175
     <message>
176
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
177
-        <location filename="../../common/gui_save.cpp" line="-612"/>
178
+        <location filename="../../common/gui_save.cpp" line="-313"/>
179
         <source>No audio track</source>
180
         <translation>Nessuna traccia audio</translation>
181
     </message>
182
@@ -2007,17 +2022,36 @@
183
 È necessario per creare un video compatibile con PSP.</translation>
184
     </message>
185
     <message>
186
-        <location filename="../../common/gui_main.cpp" line="+189"/>
187
+        <location filename="../../common/gui_main.cpp" line="+186"/>
188
         <source>Select script to save</source>
189
         <translation>Seleziona lo script da salvare</translation>
190
     </message>
191
     <message>
192
-        <location line="+184"/>
193
+        <location line="+183"/>
194
         <source>Not coded in this version</source>
195
         <translation>Non incluso in questa versione</translation>
196
     </message>
197
     <message>
198
-        <location line="+251"/>
199
+        <location line="+209"/>
200
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_ja.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_ja.ts Changed
201
 
1
@@ -1,10 +1,10 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.1">
5
+<TS version="2.1" language="ja_JP">
6
 <context>
7
     <name>ADM_Composer</name>
8
     <message>
9
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
10
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
11
         <source>Attempt to open %s failed!</source>
12
         <translation type="unfinished">%s を開く試みは失敗しました!</translation>
13
     </message>
14
@@ -56,7 +56,7 @@
15
         <translation type="unfinished"></translation>
16
     </message>
17
     <message>
18
-        <location line="+26"/>
19
+        <location line="+43"/>
20
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
21
         <translation type="unfinished"></translation>
22
     </message>
23
@@ -1050,11 +1050,21 @@
24
 <context>
25
     <name>adm</name>
26
     <message>
27
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
28
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
29
         <source>Decode video using DXVA2 (windows)</source>
30
         <translation type="unfinished"></translation>
31
     </message>
32
     <message>
33
+        <location line="+1"/>
34
+        <source>Ignore driver blacklist (Intel)</source>
35
+        <translation type="unfinished"></translation>
36
+    </message>
37
+    <message>
38
+        <location line="+1"/>
39
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
         <location line="+12"/>
44
         <source>_Accept non-standard audio frequency for DVD</source>
45
         <translation type="unfinished">DVDに標準でない音声周波数を受け付ける(_A)</translation>
46
@@ -1195,12 +1205,11 @@
47
             </translation>
48
     </message>
49
     <message>
50
-        <location line="+5"/>
51
         <source>_Use alternative tag for MP3 in .mp4</source>
52
-        <translation type="unfinished">.mp4にmp3の代替タグを使う(_U)</translation>
53
+        <translation type="obsolete">.mp4にmp3の代替タグを使う(_U)</translation>
54
     </message>
55
     <message>
56
-        <location line="+1"/>
57
+        <location line="+5"/>
58
         <source>_Default to the directory of the last read file for saving</source>
59
         <translation type="unfinished"></translation>
60
     </message>
61
@@ -1210,7 +1219,7 @@
62
         <translation type="unfinished"></translation>
63
     </message>
64
     <message>
65
-        <location line="+5"/>
66
+        <location line="+9"/>
67
         <source>XVideo (best)</source>
68
         <translation type="unfinished">
69
             </translation>
70
@@ -1221,7 +1230,7 @@
71
         <translation type="unfinished"></translation>
72
     </message>
73
     <message>
74
-        <location line="+15"/>
75
+        <location line="+11"/>
76
         <source>SDL (good)</source>
77
         <translation type="unfinished">
78
             </translation>
79
@@ -1349,7 +1358,7 @@
80
         <location line="+5"/>
81
         <location filename="../../common/gui_save.cpp" line="+57"/>
82
         <location line="+10"/>
83
-        <location line="+278"/>
84
+        <location line="+277"/>
85
         <location line="+19"/>
86
         <location line="+7"/>
87
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
88
@@ -1366,7 +1375,7 @@
89
     </message>
90
     <message>
91
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
92
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
93
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
94
         <source>CPU</source>
95
         <translation type="unfinished">CPU</translation>
96
     </message>
97
@@ -1377,19 +1386,17 @@
98
             </translation>
99
     </message>
100
     <message>
101
-        <location line="+14"/>
102
+        <location line="+11"/>
103
+        <location line="+3"/>
104
         <source>Preferences</source>
105
         <translation type="unfinished">設定</translation>
106
     </message>
107
     <message>
108
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
109
-        <location line="+2"/>
110
-        <location line="+2"/>
111
         <source>-</source>
112
-        <translation type="unfinished">-</translation>
113
+        <translation type="obsolete">-</translation>
114
     </message>
115
     <message>
116
-        <location line="+22"/>
117
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+72"/>
118
         <source>Copy</source>
119
         <translation type="unfinished">コピー</translation>
120
     </message>
121
@@ -1558,12 +1565,31 @@
122
         <translation type="unfinished">コーデックエラー</translation>
123
     </message>
124
     <message>
125
-        <location filename="../../common/gui_main.cpp" line="+373"/>
126
+        <location filename="../../common/gui_main.cpp" line="+369"/>
127
         <source>Not coded in this version</source>
128
         <translation type="unfinished">このバージョンではコード化されていません</translation>
129
     </message>
130
     <message>
131
-        <location line="+251"/>
132
+        <location line="+209"/>
133
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
134
+Proceed anyway?</source>
135
+        <translation type="unfinished"></translation>
136
+    </message>
137
+    <message>
138
+        <location line="+7"/>
139
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
140
+Playback of the video saved in copy mode may stop at this point.
141
+Proceed anyway?</source>
142
+        <translation type="unfinished"></translation>
143
+    </message>
144
+    <message>
145
+        <location line="+5"/>
146
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
147
+Try anyway?</source>
148
+        <translation type="unfinished"></translation>
149
+    </message>
150
+    <message>
151
+        <location line="+60"/>
152
         <source>Are you sure?</source>
153
         <translation type="unfinished">本当ですか&#xa0;?</translation>
154
     </message>
155
@@ -1583,21 +1609,52 @@
156
         <translation type="unfinished"></translation>
157
     </message>
158
     <message>
159
-        <location line="+24"/>
160
+        <location line="+30"/>
161
         <source>The end point of the cut is not on a keyframe.
162
 Video saved in copy mode will be corrupted at this point.
163
 Proceed anyway?</source>
164
         <translation type="unfinished"></translation>
165
     </message>
166
     <message>
167
-        <location line="+5"/>
168
+        <location line="+4"/>
169
         <source>The end point of the deletion is not on a keyframe.
170
 Video saved in copy mode will be corrupted at this point.
171
 Proceed anyway?</source>
172
         <translation type="unfinished"></translation>
173
     </message>
174
     <message>
175
-        <location line="+100"/>
176
+        <location line="+6"/>
177
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
178
+Proceed anyway?</source>
179
+        <translation type="unfinished"></translation>
180
+    </message>
181
+    <message>
182
+        <location line="+6"/>
183
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
184
+Proceed anyway?</source>
185
+        <translation type="unfinished"></translation>
186
+    </message>
187
+    <message>
188
+        <location line="+8"/>
189
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
190
+Proceed anyway?</source>
191
+        <translation type="unfinished"></translation>
192
+    </message>
193
+    <message>
194
+        <location line="+4"/>
195
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
196
+Proceed anyway?</source>
197
+        <translation type="unfinished"></translation>
198
+    </message>
199
+    <message>
200
+        <location line="+5"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_ko.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_ko.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
7
         <source>Cannot find a demuxer for %s</source>
8
         <translation>%s용 디먹서를 찾을 수 없습니다</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation>타임스탬프가 유효한지 검사 중..</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1058,7 +1058,7 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
24
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
25
         <source>Open</source>
26
         <translation>열기</translation>
27
     </message>
28
@@ -1074,8 +1074,6 @@
29
     </message>
30
     <message>
31
         <location line="+1"/>
32
-        <location filename="../../common/gui_save.cpp" line="+659"/>
33
-        <location line="+10"/>
34
         <source>Queue</source>
35
         <translation>대기열</translation>
36
     </message>
37
@@ -1306,7 +1304,7 @@
38
     </message>
39
     <message>
40
         <location line="+1"/>
41
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+366"/>
42
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+381"/>
43
         <source>Stereo</source>
44
         <translation>스테레오</translation>
45
     </message>
46
@@ -1462,7 +1460,7 @@
47
     </message>
48
     <message>
49
         <location line="+1"/>
50
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
51
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
52
         <source>CPU</source>
53
         <translation>CPU</translation>
54
     </message>
55
@@ -1508,12 +1506,12 @@
56
     </message>
57
     <message>
58
         <location line="+23"/>
59
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
60
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
61
         <location line="+3"/>
62
         <location line="+5"/>
63
-        <location filename="../../common/gui_save.cpp" line="-612"/>
64
+        <location filename="../../common/gui_save.cpp" line="+57"/>
65
         <location line="+10"/>
66
-        <location line="+278"/>
67
+        <location line="+277"/>
68
         <location line="+19"/>
69
         <location line="+7"/>
70
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
71
@@ -1618,19 +1616,18 @@
72
         <translation type="unfinished"></translation>
73
     </message>
74
     <message>
75
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-170"/>
76
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-171"/>
77
         <source>Decode video using DXVA2 (windows)</source>
78
         <translation>DXVA2로 비디오 디코드 (윈도우)</translation>
79
     </message>
80
     <message>
81
-        <location line="+1"/>
82
+        <location line="+6"/>
83
         <source>Decode video using VDPAU (NVIDIA)</source>
84
         <translation>VDPAU로 비디오 디코드 (엔비디아)</translation>
85
     </message>
86
     <message>
87
-        <location line="+1"/>
88
         <source>Decode video using XVBA (AMD)</source>
89
-        <translation>XVBA로 비디오 디코드 (AMD)</translation>
90
+        <translation type="vanished">XVBA로 비디오 디코드 (AMD)</translation>
91
     </message>
92
     <message>
93
         <location line="+1"/>
94
@@ -1638,22 +1635,32 @@
95
         <translation>LIBVA로 비디오 디코드 (인텔)</translation>
96
     </message>
97
     <message>
98
-        <location line="+2"/>
99
+        <location line="-3"/>
100
         <source>Decode video using VideoToolbox (macOS)</source>
101
         <translation type="unfinished"></translation>
102
     </message>
103
     <message>
104
-        <location line="+2"/>
105
+        <location line="+9"/>
106
         <source>Enable openGl support</source>
107
         <translation>OpenGL 지원 활성화하기</translation>
108
     </message>
109
     <message>
110
-        <location line="+2"/>
111
+        <location line="-3"/>
112
         <source>If you use Hw decoding, it is better to use the matching display driver</source>
113
         <translation>하드웨어 디코딩시, 일치하는 디스플레이 드라이버 사용</translation>
114
     </message>
115
     <message>
116
-        <location line="+3"/>
117
+        <location line="-9"/>
118
+        <source>Ignore driver blacklist (Intel)</source>
119
+        <translation type="unfinished"></translation>
120
+    </message>
121
+    <message>
122
+        <location line="+1"/>
123
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
124
+        <translation type="unfinished"></translation>
125
+    </message>
126
+    <message>
127
+        <location line="+12"/>
128
         <source>_Accept non-standard audio frequency for DVD</source>
129
         <translation>DVD에 대해 비표준 오디오 주파수 받아들이기 </translation>
130
     </message>
131
@@ -1785,12 +1792,11 @@
132
         <translation>우선 순위</translation>
133
     </message>
134
     <message>
135
-        <location line="+5"/>
136
         <source>_Use alternative tag for MP3 in .mp4</source>
137
-        <translation>.mp4에서 MP3용 대체 태그 사용하기</translation>
138
+        <translation type="vanished">.mp4에서 MP3용 대체 태그 사용하기</translation>
139
     </message>
140
     <message>
141
-        <location line="+1"/>
142
+        <location line="+5"/>
143
         <source>_Default to the directory of the last read file for saving</source>
144
         <translation>최근 읽은 파일의 폴더를 저장용 폴더로 사용하기</translation>
145
     </message>
146
@@ -1800,7 +1806,17 @@
147
         <translation type="unfinished"></translation>
148
     </message>
149
     <message>
150
-        <location line="+5"/>
151
+        <location line="+2"/>
152
+        <source>Caching of decoded pictures</source>
153
+        <translation type="unfinished"></translation>
154
+    </message>
155
+    <message>
156
+        <location line="+1"/>
157
+        <source>_Cache size:</source>
158
+        <translation type="unfinished"></translation>
159
+    </message>
160
+    <message>
161
+        <location line="+6"/>
162
         <source>XVideo (best)</source>
163
         <translation>XVideo (최상)</translation>
164
     </message>
165
@@ -1815,7 +1831,7 @@
166
         <translation>DXVA2 (최상)</translation>
167
     </message>
168
     <message>
169
-        <location line="+7"/>
170
+        <location line="+3"/>
171
         <source>OpenGL (best)</source>
172
         <translation>OpenGL (최상)</translation>
173
     </message>
174
@@ -1959,6 +1975,7 @@
175
     <message>
176
         <location line="+4"/>
177
         <location line="+3"/>
178
+        <location line="+3"/>
179
         <source>HW Accel</source>
180
         <translation>HW 가속</translation>
181
     </message>
182
@@ -1978,7 +1995,8 @@
183
         <translation>기본 사용 포트</translation>
184
     </message>
185
     <message>
186
-        <location line="+10"/>
187
+        <location line="+7"/>
188
+        <location line="+3"/>
189
         <source>Preferences</source>
190
         <translation>환경 설정</translation>
191
     </message>
192
@@ -1993,14 +2011,11 @@
193
         <translation>JPEG로 저장</translation>
194
     </message>
195
     <message>
196
-        <location line="+3"/>
197
-        <location line="+2"/>
198
-        <location line="+2"/>
199
         <source>-</source>
200
-        <translation>-</translation>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_pl.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_pl.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation>Nie udało się otworzyć %s!</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation>Sprawdzanie, czy znaczniki czasu są prawidłowe...</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation>Ten film wideo zawiera klatki B, ale znaczniki czasu prezentacji (PTS) są albo nieobecne, albo rosną monotonicznie. Avidemux może spróbować zrekonstruować poprawne PTS przez dekodowanie całego wideo. To może zająć dużo czasu. Kontynuować?</translation>
18
     </message>
19
@@ -1058,11 +1058,21 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
24
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
25
         <source>Decode video using DXVA2 (windows)</source>
26
         <translation>Dekoduj wideo używając DXVA2 (windows)</translation>
27
     </message>
28
     <message>
29
+        <location line="+1"/>
30
+        <source>Ignore driver blacklist (Intel)</source>
31
+        <translation type="unfinished"></translation>
32
+    </message>
33
+    <message>
34
+        <location line="+1"/>
35
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
36
+        <translation type="unfinished"></translation>
37
+    </message>
38
+    <message>
39
         <location line="+12"/>
40
         <source>_Accept non-standard audio frequency for DVD</source>
41
         <translation>_Akceptuj niestandardową częstotliwość dźwięku dla DVD</translation>
42
@@ -1190,12 +1200,11 @@
43
         <translation>Priorytetyzacja</translation>
44
     </message>
45
     <message>
46
-        <location line="+5"/>
47
         <source>_Use alternative tag for MP3 in .mp4</source>
48
-        <translation>_Użyj alternatywnej etykiety dla pliku MP3 w .mp4</translation>
49
+        <translation type="vanished">_Użyj alternatywnej etykiety dla pliku MP3 w .mp4</translation>
50
     </message>
51
     <message>
52
-        <location line="+1"/>
53
+        <location line="+5"/>
54
         <source>_Default to the directory of the last read file for saving</source>
55
         <translation>Domyślnie do zapisu użyj katalog, z którego wczytano ostatni plik</translation>
56
     </message>
57
@@ -1205,7 +1214,7 @@
58
         <translation>Oczyść dekodowane znaczniki czasowe (DTS) w trybie kopiowania</translation>
59
     </message>
60
     <message>
61
-        <location line="+5"/>
62
+        <location line="+9"/>
63
         <source>XVideo (best)</source>
64
         <translation>XVideo (najlepszy)</translation>
65
     </message>
66
@@ -1215,7 +1224,7 @@
67
         <translation>DXVA2 (najlepsze)</translation>
68
     </message>
69
     <message>
70
-        <location line="+15"/>
71
+        <location line="+11"/>
72
         <source>SDL (good)</source>
73
         <translation>SDL (dobry)</translation>
74
     </message>
75
@@ -1345,7 +1354,7 @@
76
         <location line="+5"/>
77
         <location filename="../../common/gui_save.cpp" line="+57"/>
78
         <location line="+10"/>
79
-        <location line="+278"/>
80
+        <location line="+277"/>
81
         <location line="+19"/>
82
         <location line="+7"/>
83
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
84
@@ -1362,7 +1371,7 @@
85
     </message>
86
     <message>
87
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
88
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
89
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
90
         <source>CPU</source>
91
         <translation>Procesor</translation>
92
     </message>
93
@@ -1372,24 +1381,22 @@
94
         <translation>Wątkowanie</translation>
95
     </message>
96
     <message>
97
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
98
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
99
         <source>Pr&amp;eferences</source>
100
         <translation>Preferencje</translation>
101
     </message>
102
     <message>
103
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+14"/>
104
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+11"/>
105
+        <location line="+3"/>
106
         <source>Preferences</source>
107
         <translation>Preferencje</translation>
108
     </message>
109
     <message>
110
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="-38"/>
111
-        <location line="+2"/>
112
-        <location line="+2"/>
113
         <source>-</source>
114
-        <translation>-</translation>
115
+        <translation type="vanished">-</translation>
116
     </message>
117
     <message>
118
-        <location line="+22"/>
119
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="-12"/>
120
         <source>Copy</source>
121
         <translation>Kopiuj</translation>
122
     </message>
123
@@ -1619,12 +1626,31 @@
124
         <translation>Błąd kodeka</translation>
125
     </message>
126
     <message>
127
-        <location filename="../../common/gui_main.cpp" line="+373"/>
128
+        <location filename="../../common/gui_main.cpp" line="+369"/>
129
         <source>Not coded in this version</source>
130
         <translation>Nie zaimplementowane w tej wersji</translation>
131
     </message>
132
     <message>
133
-        <location line="+251"/>
134
+        <location line="+209"/>
135
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
136
+Proceed anyway?</source>
137
+        <translation type="unfinished"></translation>
138
+    </message>
139
+    <message>
140
+        <location line="+7"/>
141
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
142
+Playback of the video saved in copy mode may stop at this point.
143
+Proceed anyway?</source>
144
+        <translation type="unfinished"></translation>
145
+    </message>
146
+    <message>
147
+        <location line="+5"/>
148
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
149
+Try anyway?</source>
150
+        <translation type="unfinished"></translation>
151
+    </message>
152
+    <message>
153
+        <location line="+60"/>
154
         <source>Are you sure?</source>
155
         <translation>Na pewno?</translation>
156
     </message>
157
@@ -1644,7 +1670,7 @@
158
         <translation>Nie można usunąć całego wideo. Proszę sprawdzić pozycję znaczników A i B.</translation>
159
     </message>
160
     <message>
161
-        <location line="+24"/>
162
+        <location line="+30"/>
163
         <source>The end point of the cut is not on a keyframe.
164
 Video saved in copy mode will be corrupted at this point.
165
 Proceed anyway?</source>
166
@@ -1653,7 +1679,7 @@
167
 Czy kontynuować mimo to?</translation>
168
     </message>
169
     <message>
170
-        <location line="+5"/>
171
+        <location line="+4"/>
172
         <source>The end point of the deletion is not on a keyframe.
173
 Video saved in copy mode will be corrupted at this point.
174
 Proceed anyway?</source>
175
@@ -1662,7 +1688,38 @@
176
 Czy kontynuować mimo to?</translation>
177
     </message>
178
     <message>
179
-        <location line="+100"/>
180
+        <location line="+6"/>
181
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
182
+Proceed anyway?</source>
183
+        <translation type="unfinished"></translation>
184
+    </message>
185
+    <message>
186
+        <location line="+6"/>
187
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
188
+Proceed anyway?</source>
189
+        <translation type="unfinished"></translation>
190
+    </message>
191
+    <message>
192
+        <location line="+8"/>
193
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
194
+Proceed anyway?</source>
195
+        <translation type="unfinished"></translation>
196
+    </message>
197
+    <message>
198
+        <location line="+4"/>
199
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
200
+Proceed anyway?</source>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_pt_BR.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_pt_BR.ts Changed
201
 
1
@@ -1,10 +1,10 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.1">
5
+<TS version="2.1" language="pt_BR">
6
 <context>
7
     <name>ADM_Composer</name>
8
     <message>
9
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+196"/>
10
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+194"/>
11
         <source>Cannot find a demuxer for %s</source>
12
         <translation type="unfinished"></translation>
13
     </message>
14
@@ -56,7 +56,7 @@
15
         <translation type="unfinished"></translation>
16
     </message>
17
     <message>
18
-        <location line="+26"/>
19
+        <location line="+43"/>
20
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
21
         <translation type="unfinished"></translation>
22
     </message>
23
@@ -1050,7 +1050,7 @@
24
 <context>
25
     <name>adm</name>
26
     <message>
27
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+443"/>
28
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+458"/>
29
         <source>Output</source>
30
         <translation type="unfinished">Saida</translation>
31
     </message>
32
@@ -1254,7 +1254,7 @@
33
     </message>
34
     <message>
35
         <location line="+1"/>
36
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+126"/>
37
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+129"/>
38
         <source>CPU</source>
39
         <translation type="unfinished"></translation>
40
     </message>
41
@@ -1300,12 +1300,12 @@
42
     </message>
43
     <message>
44
         <location line="+23"/>
45
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-43"/>
46
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-46"/>
47
         <location line="+3"/>
48
         <location line="+5"/>
49
         <location filename="../../common/gui_save.cpp" line="+57"/>
50
         <location line="+10"/>
51
-        <location line="+278"/>
52
+        <location line="+277"/>
53
         <location line="+19"/>
54
         <location line="+7"/>
55
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
56
@@ -1410,42 +1410,47 @@
57
         <translation type="unfinished"></translation>
58
     </message>
59
     <message>
60
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-170"/>
61
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-171"/>
62
         <source>Decode video using DXVA2 (windows)</source>
63
         <translation type="unfinished"></translation>
64
     </message>
65
     <message>
66
-        <location line="+1"/>
67
+        <location line="+6"/>
68
         <source>Decode video using VDPAU (NVIDIA)</source>
69
         <translation type="unfinished"></translation>
70
     </message>
71
     <message>
72
         <location line="+1"/>
73
-        <source>Decode video using XVBA (AMD)</source>
74
-        <translation type="unfinished"></translation>
75
-    </message>
76
-    <message>
77
-        <location line="+1"/>
78
         <source>Decode video using LIBVA (INTEL)</source>
79
         <translation type="unfinished"></translation>
80
     </message>
81
     <message>
82
-        <location line="+2"/>
83
+        <location line="-3"/>
84
         <source>Decode video using VideoToolbox (macOS)</source>
85
         <translation type="unfinished"></translation>
86
     </message>
87
     <message>
88
-        <location line="+2"/>
89
+        <location line="+9"/>
90
         <source>Enable openGl support</source>
91
         <translation type="unfinished"></translation>
92
     </message>
93
     <message>
94
-        <location line="+2"/>
95
+        <location line="-3"/>
96
         <source>If you use Hw decoding, it is better to use the matching display driver</source>
97
         <translation type="unfinished"></translation>
98
     </message>
99
     <message>
100
-        <location line="+3"/>
101
+        <location line="-9"/>
102
+        <source>Ignore driver blacklist (Intel)</source>
103
+        <translation type="unfinished"></translation>
104
+    </message>
105
+    <message>
106
+        <location line="+1"/>
107
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
108
+        <translation type="unfinished"></translation>
109
+    </message>
110
+    <message>
111
+        <location line="+12"/>
112
         <source>_Accept non-standard audio frequency for DVD</source>
113
         <translation type="unfinished"></translation>
114
     </message>
115
@@ -1578,21 +1583,26 @@
116
     </message>
117
     <message>
118
         <location line="+5"/>
119
-        <source>_Use alternative tag for MP3 in .mp4</source>
120
+        <source>_Default to the directory of the last read file for saving</source>
121
         <translation type="unfinished"></translation>
122
     </message>
123
     <message>
124
         <location line="+1"/>
125
-        <source>_Default to the directory of the last read file for saving</source>
126
+        <source>_Sanitize decode time stamps (DTS) in copy mode</source>
127
+        <translation type="unfinished"></translation>
128
+    </message>
129
+    <message>
130
+        <location line="+2"/>
131
+        <source>Caching of decoded pictures</source>
132
         <translation type="unfinished"></translation>
133
     </message>
134
     <message>
135
         <location line="+1"/>
136
-        <source>_Sanitize decode time stamps (DTS) in copy mode</source>
137
+        <source>_Cache size:</source>
138
         <translation type="unfinished"></translation>
139
     </message>
140
     <message>
141
-        <location line="+5"/>
142
+        <location line="+6"/>
143
         <source>XVideo (best)</source>
144
         <translation type="unfinished"></translation>
145
     </message>
146
@@ -1607,7 +1617,7 @@
147
         <translation type="unfinished"></translation>
148
     </message>
149
     <message>
150
-        <location line="+7"/>
151
+        <location line="+3"/>
152
         <source>OpenGL (best)</source>
153
         <translation type="unfinished"></translation>
154
     </message>
155
@@ -1746,6 +1756,7 @@
156
     <message>
157
         <location line="+4"/>
158
         <location line="+3"/>
159
+        <location line="+3"/>
160
         <source>HW Accel</source>
161
         <translation type="unfinished"></translation>
162
     </message>
163
@@ -1765,12 +1776,13 @@
164
         <translation type="unfinished"></translation>
165
     </message>
166
     <message>
167
-        <location line="+10"/>
168
+        <location line="+7"/>
169
+        <location line="+3"/>
170
         <source>Preferences</source>
171
         <translation type="unfinished"></translation>
172
     </message>
173
     <message>
174
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+34"/>
175
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+36"/>
176
         <source>Open</source>
177
         <translation type="unfinished"></translation>
178
     </message>
179
@@ -1786,8 +1798,6 @@
180
     </message>
181
     <message>
182
         <location line="+1"/>
183
-        <location filename="../../common/gui_save.cpp" line="+288"/>
184
-        <location line="+10"/>
185
         <source>Queue</source>
186
         <translation type="unfinished"></translation>
187
     </message>
188
@@ -1822,14 +1832,7 @@
189
         <translation type="unfinished"></translation>
190
     </message>
191
     <message>
192
-        <location line="+1"/>
193
         <location line="+2"/>
194
-        <location line="+2"/>
195
-        <source>-</source>
196
-        <translation type="unfinished"></translation>
197
-    </message>
198
-    <message>
199
-        <location line="-3"/>
200
         <source>Information</source>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_ru.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_ru.ts Changed
201
 
1
@@ -4,7 +4,7 @@
2
 <context>
3
     <name>ADM_Composer</name>
4
     <message>
5
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
6
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
7
         <source>Attempt to open %s failed!</source>
8
         <translation type="unfinished">Ошибка при открытии %s!</translation>
9
     </message>
10
@@ -58,7 +58,7 @@
11
         <translation type="unfinished">Проверка правильности временных меток...</translation>
12
     </message>
13
     <message>
14
-        <location line="+26"/>
15
+        <location line="+43"/>
16
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -529,7 +529,7 @@
20
     <message>
21
         <location line="-10"/>
22
         <source>&amp;Tools</source>
23
-        <translation type="unfinished">С&amp;ервис</translation>
24
+        <translation type="unfinished">&amp;Инструменты</translation>
25
     </message>
26
     <message>
27
         <location line="-36"/>
28
@@ -1060,11 +1060,21 @@
29
 <context>
30
     <name>adm</name>
31
     <message>
32
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
33
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
34
         <source>Decode video using DXVA2 (windows)</source>
35
         <translation>Декодировать видео посредством DXVA2 (Windows)</translation>
36
     </message>
37
     <message>
38
+        <location line="+1"/>
39
+        <source>Ignore driver blacklist (Intel)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
+        <location line="+1"/>
44
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
45
+        <translation type="unfinished"></translation>
46
+    </message>
47
+    <message>
48
         <location line="+12"/>
49
         <source>_Accept non-standard audio frequency for DVD</source>
50
         <translation type="unfinished">_Разрешать нестандартную частоту звука для DVD</translation>
51
@@ -1187,12 +1197,11 @@
52
         <translation type="unfinished">Приоритет</translation>
53
     </message>
54
     <message>
55
-        <location line="+5"/>
56
         <source>_Use alternative tag for MP3 in .mp4</source>
57
-        <translation type="unfinished">_Использовать альтернативные тэги для MP3 в .MP4</translation>
58
+        <translation type="obsolete">_Использовать альтернативные тэги для MP3 в .MP4</translation>
59
     </message>
60
     <message>
61
-        <location line="+1"/>
62
+        <location line="+5"/>
63
         <source>_Default to the directory of the last read file for saving</source>
64
         <translation type="unfinished">_Сохранять видео в папке с последним прочитанным файлом по умолчанию</translation>
65
     </message>
66
@@ -1202,7 +1211,7 @@
67
         <translation type="unfinished">В режиме _копирования повысить равномерность отметок времени декодирования (DTS)</translation>
68
     </message>
69
     <message>
70
-        <location line="+5"/>
71
+        <location line="+9"/>
72
         <source>XVideo (best)</source>
73
         <translation type="unfinished">XVideo (лучшее)</translation>
74
     </message>
75
@@ -1212,7 +1221,7 @@
76
         <translation type="unfinished">DXVA2 (лучшее)</translation>
77
     </message>
78
     <message>
79
-        <location line="+15"/>
80
+        <location line="+11"/>
81
         <source>SDL (good)</source>
82
         <translation type="unfinished">SDL (хорошо)</translation>
83
     </message>
84
@@ -1311,7 +1320,7 @@
85
         <location line="+5"/>
86
         <location filename="../../common/gui_save.cpp" line="+57"/>
87
         <location line="+10"/>
88
-        <location line="+278"/>
89
+        <location line="+277"/>
90
         <location line="+19"/>
91
         <location line="+7"/>
92
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
93
@@ -1327,17 +1336,18 @@
94
         <translation type="unfinished">Видео</translation>
95
     </message>
96
     <message>
97
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+39"/>
98
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+42"/>
99
         <source>Threading</source>
100
         <translation type="unfinished">Многопоточность</translation>
101
     </message>
102
     <message>
103
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+82"/>
104
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+84"/>
105
         <source>Pr&amp;eferences</source>
106
         <translation>&amp;Настройки</translation>
107
     </message>
108
     <message>
109
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+14"/>
110
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+11"/>
111
+        <location line="+3"/>
112
         <source>Preferences</source>
113
         <translation>Настройки</translation>
114
     </message>
115
@@ -1486,46 +1496,106 @@
116
         <translation type="unfinished">Ошибка аудиокодера</translation>
117
     </message>
118
     <message>
119
-        <location filename="../../common/gui_main.cpp" line="+373"/>
120
+        <location filename="../../common/gui_main.cpp" line="+369"/>
121
         <source>Not coded in this version</source>
122
         <translation type="unfinished">Нет в этой версии</translation>
123
     </message>
124
     <message>
125
-        <location line="+251"/>
126
+        <location line="+209"/>
127
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
128
+Proceed anyway?</source>
129
+        <translation>Это видео использует кадры прямого доступа без мгновенного обновления декодирования (non-IDR). Счётчик очерёдности показа изображений (POC) на таких ключевых кадрах не сбрасывается. Образовавшиеся точки разреза вставки при сохранении видео в режиме копирования могут привести к задержке воспроизведения из-за нарушенного порядка показа изображений.
130
+Всё равно продолжить?</translation>
131
+    </message>
132
+    <message>
133
+        <location line="+7"/>
134
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
135
+Playback of the video saved in copy mode may stop at this point.
136
+Proceed anyway?</source>
137
+        <translation>Кодек или параметры кодирования на точках разреза вставки не совпадают. Воспроизведение видео, сохранённого в режиме копирования, может на этих точках обрываться.
138
+Всё равно продолжить?</translation>
139
+    </message>
140
+    <message>
141
+        <location line="+5"/>
142
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
143
+Try anyway?</source>
144
+        <translation>Не удалось проверить точки разреза вставки. Это указывает на проблему либо с исходным видео, либо с шагами редактирования, либо является проявлением ошибки в программе. За деталями обратитесь, пожалуйста, к журнальному файлу приложения или к консольным сообщениям.
145
+Всё равно продолжить?</translation>
146
+    </message>
147
+    <message>
148
+        <location line="+60"/>
149
         <source>Are you sure?</source>
150
         <translation type="unfinished">Вы уверены?</translation>
151
     </message>
152
     <message>
153
         <location line="+48"/>
154
         <source>It is impossible to cut out the entire video. Please recheck the position of markers A and B.</source>
155
-        <translation type="unfinished"></translation>
156
+        <translation>Вырезать видео целиком недопустимо. Пожалуйста, проверьте положение меток A и B.</translation>
157
     </message>
158
     <message>
159
         <location line="+3"/>
160
         <source>Deleting</source>
161
-        <translation type="unfinished"></translation>
162
+        <translation type="unfinished">Удаление</translation>
163
     </message>
164
     <message>
165
         <location line="+1"/>
166
         <source>It is impossible to delete the entire video. Please recheck the position of markers A and B.</source>
167
-        <translation type="unfinished"></translation>
168
+        <translation>Удалить видео целиком недопустимо. Пожалуйста, проверьте порожение меток A и B.</translation>
169
     </message>
170
     <message>
171
-        <location line="+24"/>
172
+        <location line="+30"/>
173
         <source>The end point of the cut is not on a keyframe.
174
 Video saved in copy mode will be corrupted at this point.
175
 Proceed anyway?</source>
176
-        <translation type="unfinished"></translation>
177
+        <translation>Конечная точка вырезки находится не на ключевом кадре. При сохранении видео в режиме копирования на этом месте будут повреждения.
178
+Всё равно продолжить?</translation>
179
     </message>
180
     <message>
181
-        <location line="+5"/>
182
+        <location line="+4"/>
183
         <source>The end point of the deletion is not on a keyframe.
184
 Video saved in copy mode will be corrupted at this point.
185
 Proceed anyway?</source>
186
-        <translation type="unfinished"></translation>
187
+        <translation>Конечная точка удаления находится не на ключевом кадре. При сохранении видео в режиме копирования на этом месте будут повреждения.
188
+Всё равно продолжить?</translation>
189
     </message>
190
     <message>
191
-        <location line="+100"/>
192
+        <location line="+6"/>
193
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
194
+Proceed anyway?</source>
195
+        <translation>Это видео использует кадры прямого доступа без мгновенного обновления декодирования (non-IDR). Счётчик очерёдности показа изображений (POC) на таких ключевых кадрах не сбрасывается. Выбранные конечные точки выреза при сохранении видео в режиме копирования могут привести к задержке воспроизведения из-за нарушенного порядка показа изображений.
196
+Всё равно продолжить?</translation>
197
+    </message>
198
+    <message>
199
+        <location line="+6"/>
200
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_sr.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_sr.ts Changed
201
 
1
@@ -1,10 +1,10 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.1">
5
+<TS version="2.1" language="sr_RS">
6
 <context>
7
     <name>ADM_Composer</name>
8
     <message>
9
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
10
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
11
         <source>Attempt to open %s failed!</source>
12
         <translation type="unfinished">Покушај да отворим %s није успео!</translation>
13
     </message>
14
@@ -56,7 +56,7 @@
15
         <translation type="unfinished"></translation>
16
     </message>
17
     <message>
18
-        <location line="+26"/>
19
+        <location line="+43"/>
20
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
21
         <translation type="unfinished"></translation>
22
     </message>
23
@@ -1050,11 +1050,21 @@
24
 <context>
25
     <name>adm</name>
26
     <message>
27
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
28
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
29
         <source>Decode video using DXVA2 (windows)</source>
30
         <translation type="unfinished"></translation>
31
     </message>
32
     <message>
33
+        <location line="+1"/>
34
+        <source>Ignore driver blacklist (Intel)</source>
35
+        <translation type="unfinished"></translation>
36
+    </message>
37
+    <message>
38
+        <location line="+1"/>
39
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
         <location line="+12"/>
44
         <source>_Accept non-standard audio frequency for DVD</source>
45
         <translation type="unfinished">_Дозволи нестандардне учестаности звука за ДВД</translation>
46
@@ -1182,12 +1192,11 @@
47
         <translation type="unfinished">Постављање приоритета</translation>
48
     </message>
49
     <message>
50
-        <location line="+5"/>
51
         <source>_Use alternative tag for MP3 in .mp4</source>
52
-        <translation type="unfinished">Користи _алтернативни таг за MP3 у .mp4</translation>
53
+        <translation type="obsolete">Користи _алтернативни таг за MP3 у .mp4</translation>
54
     </message>
55
     <message>
56
-        <location line="+1"/>
57
+        <location line="+5"/>
58
         <source>_Default to the directory of the last read file for saving</source>
59
         <translation type="unfinished"></translation>
60
     </message>
61
@@ -1197,7 +1206,7 @@
62
         <translation type="unfinished"></translation>
63
     </message>
64
     <message>
65
-        <location line="+5"/>
66
+        <location line="+9"/>
67
         <source>XVideo (best)</source>
68
         <translation type="unfinished">XVideo (најбоље)</translation>
69
     </message>
70
@@ -1207,7 +1216,7 @@
71
         <translation type="unfinished"></translation>
72
     </message>
73
     <message>
74
-        <location line="+15"/>
75
+        <location line="+11"/>
76
         <source>SDL (good)</source>
77
         <translation type="unfinished">SDL (добро)</translation>
78
     </message>
79
@@ -1332,7 +1341,7 @@
80
         <location line="+5"/>
81
         <location filename="../../common/gui_save.cpp" line="+57"/>
82
         <location line="+10"/>
83
-        <location line="+278"/>
84
+        <location line="+277"/>
85
         <location line="+19"/>
86
         <location line="+7"/>
87
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
88
@@ -1349,7 +1358,7 @@
89
     </message>
90
     <message>
91
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
92
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
93
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
94
         <source>CPU</source>
95
         <translation type="unfinished">Процесори</translation>
96
     </message>
97
@@ -1359,19 +1368,17 @@
98
         <translation type="unfinished">Више нити</translation>
99
     </message>
100
     <message>
101
-        <location line="+14"/>
102
+        <location line="+11"/>
103
+        <location line="+3"/>
104
         <source>Preferences</source>
105
         <translation type="unfinished">Поставке</translation>
106
     </message>
107
     <message>
108
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
109
-        <location line="+2"/>
110
-        <location line="+2"/>
111
         <source>-</source>
112
-        <translation type="unfinished">-</translation>
113
+        <translation type="obsolete">-</translation>
114
     </message>
115
     <message>
116
-        <location line="+22"/>
117
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+72"/>
118
         <source>Copy</source>
119
         <translation type="unfinished">Без измене</translation>
120
     </message>
121
@@ -1540,12 +1547,31 @@
122
         <translation type="unfinished">Грешка у кодецима</translation>
123
     </message>
124
     <message>
125
-        <location filename="../../common/gui_main.cpp" line="+373"/>
126
+        <location filename="../../common/gui_main.cpp" line="+369"/>
127
         <source>Not coded in this version</source>
128
         <translation type="unfinished">Није кодирано у овој верзији</translation>
129
     </message>
130
     <message>
131
-        <location line="+251"/>
132
+        <location line="+209"/>
133
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
134
+Proceed anyway?</source>
135
+        <translation type="unfinished"></translation>
136
+    </message>
137
+    <message>
138
+        <location line="+7"/>
139
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
140
+Playback of the video saved in copy mode may stop at this point.
141
+Proceed anyway?</source>
142
+        <translation type="unfinished"></translation>
143
+    </message>
144
+    <message>
145
+        <location line="+5"/>
146
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
147
+Try anyway?</source>
148
+        <translation type="unfinished"></translation>
149
+    </message>
150
+    <message>
151
+        <location line="+60"/>
152
         <source>Are you sure?</source>
153
         <translation type="unfinished">Да ли си сигуран?</translation>
154
     </message>
155
@@ -1565,21 +1591,52 @@
156
         <translation type="unfinished"></translation>
157
     </message>
158
     <message>
159
-        <location line="+24"/>
160
+        <location line="+30"/>
161
         <source>The end point of the cut is not on a keyframe.
162
 Video saved in copy mode will be corrupted at this point.
163
 Proceed anyway?</source>
164
         <translation type="unfinished"></translation>
165
     </message>
166
     <message>
167
-        <location line="+5"/>
168
+        <location line="+4"/>
169
         <source>The end point of the deletion is not on a keyframe.
170
 Video saved in copy mode will be corrupted at this point.
171
 Proceed anyway?</source>
172
         <translation type="unfinished"></translation>
173
     </message>
174
     <message>
175
-        <location line="+100"/>
176
+        <location line="+6"/>
177
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
178
+Proceed anyway?</source>
179
+        <translation type="unfinished"></translation>
180
+    </message>
181
+    <message>
182
+        <location line="+6"/>
183
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
184
+Proceed anyway?</source>
185
+        <translation type="unfinished"></translation>
186
+    </message>
187
+    <message>
188
+        <location line="+8"/>
189
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
190
+Proceed anyway?</source>
191
+        <translation type="unfinished"></translation>
192
+    </message>
193
+    <message>
194
+        <location line="+4"/>
195
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
196
+Proceed anyway?</source>
197
+        <translation type="unfinished"></translation>
198
+    </message>
199
+    <message>
200
+        <location line="+5"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_sr@latin.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_sr@latin.ts Changed
201
 
1
@@ -1,10 +1,10 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.1">
5
+<TS version="2.1" language="sr_Latn_RS">
6
 <context>
7
     <name>ADM_Composer</name>
8
     <message>
9
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
10
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
11
         <source>Attempt to open %s failed!</source>
12
         <translation type="unfinished">Pokušaj da otvorim %s nije uspeo!</translation>
13
     </message>
14
@@ -56,7 +56,7 @@
15
         <translation type="unfinished"></translation>
16
     </message>
17
     <message>
18
-        <location line="+26"/>
19
+        <location line="+43"/>
20
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
21
         <translation type="unfinished"></translation>
22
     </message>
23
@@ -1050,11 +1050,21 @@
24
 <context>
25
     <name>adm</name>
26
     <message>
27
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
28
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
29
         <source>Decode video using DXVA2 (windows)</source>
30
         <translation type="unfinished"></translation>
31
     </message>
32
     <message>
33
+        <location line="+1"/>
34
+        <source>Ignore driver blacklist (Intel)</source>
35
+        <translation type="unfinished"></translation>
36
+    </message>
37
+    <message>
38
+        <location line="+1"/>
39
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
         <location line="+12"/>
44
         <source>_Accept non-standard audio frequency for DVD</source>
45
         <translation type="unfinished">_Dozvoli nestandardne učestanosti zvuka za DVD</translation>
46
@@ -1182,12 +1192,11 @@
47
         <translation type="unfinished">Postavljanje prioriteta</translation>
48
     </message>
49
     <message>
50
-        <location line="+5"/>
51
         <source>_Use alternative tag for MP3 in .mp4</source>
52
-        <translation type="unfinished">Koristi _alternativni tag za MP3 u .mp4</translation>
53
+        <translation type="obsolete">Koristi _alternativni tag za MP3 u .mp4</translation>
54
     </message>
55
     <message>
56
-        <location line="+1"/>
57
+        <location line="+5"/>
58
         <source>_Default to the directory of the last read file for saving</source>
59
         <translation type="unfinished"></translation>
60
     </message>
61
@@ -1197,7 +1206,7 @@
62
         <translation type="unfinished"></translation>
63
     </message>
64
     <message>
65
-        <location line="+5"/>
66
+        <location line="+9"/>
67
         <source>XVideo (best)</source>
68
         <translation type="unfinished">XVideo (najbolje)</translation>
69
     </message>
70
@@ -1207,7 +1216,7 @@
71
         <translation type="unfinished"></translation>
72
     </message>
73
     <message>
74
-        <location line="+15"/>
75
+        <location line="+11"/>
76
         <source>SDL (good)</source>
77
         <translation type="unfinished">SDL (dobro)</translation>
78
     </message>
79
@@ -1332,7 +1341,7 @@
80
         <location line="+5"/>
81
         <location filename="../../common/gui_save.cpp" line="+57"/>
82
         <location line="+10"/>
83
-        <location line="+278"/>
84
+        <location line="+277"/>
85
         <location line="+19"/>
86
         <location line="+7"/>
87
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
88
@@ -1349,7 +1358,7 @@
89
     </message>
90
     <message>
91
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
92
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
93
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
94
         <source>CPU</source>
95
         <translation type="unfinished">Procesori</translation>
96
     </message>
97
@@ -1359,19 +1368,17 @@
98
         <translation type="unfinished">Više niti</translation>
99
     </message>
100
     <message>
101
-        <location line="+14"/>
102
+        <location line="+11"/>
103
+        <location line="+3"/>
104
         <source>Preferences</source>
105
         <translation type="unfinished">Postavke</translation>
106
     </message>
107
     <message>
108
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
109
-        <location line="+2"/>
110
-        <location line="+2"/>
111
         <source>-</source>
112
-        <translation type="unfinished">-</translation>
113
+        <translation type="obsolete">-</translation>
114
     </message>
115
     <message>
116
-        <location line="+22"/>
117
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+72"/>
118
         <source>Copy</source>
119
         <translation type="unfinished">Bez izmene</translation>
120
     </message>
121
@@ -1540,12 +1547,31 @@
122
         <translation type="unfinished">Greška u kodecima</translation>
123
     </message>
124
     <message>
125
-        <location filename="../../common/gui_main.cpp" line="+373"/>
126
+        <location filename="../../common/gui_main.cpp" line="+369"/>
127
         <source>Not coded in this version</source>
128
         <translation type="unfinished">Nije kodirano u ovoj verziji</translation>
129
     </message>
130
     <message>
131
-        <location line="+251"/>
132
+        <location line="+209"/>
133
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
134
+Proceed anyway?</source>
135
+        <translation type="unfinished"></translation>
136
+    </message>
137
+    <message>
138
+        <location line="+7"/>
139
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
140
+Playback of the video saved in copy mode may stop at this point.
141
+Proceed anyway?</source>
142
+        <translation type="unfinished"></translation>
143
+    </message>
144
+    <message>
145
+        <location line="+5"/>
146
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
147
+Try anyway?</source>
148
+        <translation type="unfinished"></translation>
149
+    </message>
150
+    <message>
151
+        <location line="+60"/>
152
         <source>Are you sure?</source>
153
         <translation type="unfinished">Da li si siguran?</translation>
154
     </message>
155
@@ -1565,21 +1591,52 @@
156
         <translation type="unfinished"></translation>
157
     </message>
158
     <message>
159
-        <location line="+24"/>
160
+        <location line="+30"/>
161
         <source>The end point of the cut is not on a keyframe.
162
 Video saved in copy mode will be corrupted at this point.
163
 Proceed anyway?</source>
164
         <translation type="unfinished"></translation>
165
     </message>
166
     <message>
167
-        <location line="+5"/>
168
+        <location line="+4"/>
169
         <source>The end point of the deletion is not on a keyframe.
170
 Video saved in copy mode will be corrupted at this point.
171
 Proceed anyway?</source>
172
         <translation type="unfinished"></translation>
173
     </message>
174
     <message>
175
-        <location line="+100"/>
176
+        <location line="+6"/>
177
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
178
+Proceed anyway?</source>
179
+        <translation type="unfinished"></translation>
180
+    </message>
181
+    <message>
182
+        <location line="+6"/>
183
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
184
+Proceed anyway?</source>
185
+        <translation type="unfinished"></translation>
186
+    </message>
187
+    <message>
188
+        <location line="+8"/>
189
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
190
+Proceed anyway?</source>
191
+        <translation type="unfinished"></translation>
192
+    </message>
193
+    <message>
194
+        <location line="+4"/>
195
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
196
+Proceed anyway?</source>
197
+        <translation type="unfinished"></translation>
198
+    </message>
199
+    <message>
200
+        <location line="+5"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_tr.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_tr.ts Changed
201
 
1
@@ -1,10 +1,10 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.1">
5
+<TS version="2.1" language="tr_TR">
6
 <context>
7
     <name>ADM_Composer</name>
8
     <message>
9
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+232"/>
10
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+230"/>
11
         <source>Attempt to open %s failed!</source>
12
         <translation type="unfinished">%s açma teşebbüsü başarısız oldu!</translation>
13
     </message>
14
@@ -56,7 +56,7 @@
15
         <translation type="unfinished"></translation>
16
     </message>
17
     <message>
18
-        <location line="+26"/>
19
+        <location line="+43"/>
20
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
21
         <translation type="unfinished"></translation>
22
     </message>
23
@@ -1054,11 +1054,21 @@
24
 <context>
25
     <name>adm</name>
26
     <message>
27
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+218"/>
28
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+232"/>
29
         <source>Decode video using DXVA2 (windows)</source>
30
         <translation type="unfinished"></translation>
31
     </message>
32
     <message>
33
+        <location line="+1"/>
34
+        <source>Ignore driver blacklist (Intel)</source>
35
+        <translation type="unfinished"></translation>
36
+    </message>
37
+    <message>
38
+        <location line="+1"/>
39
+        <source>Ignore codec blacklist (Intel, HEVC 10bit)</source>
40
+        <translation type="unfinished"></translation>
41
+    </message>
42
+    <message>
43
         <location line="+12"/>
44
         <source>_Accept non-standard audio frequency for DVD</source>
45
         <translation type="unfinished">
46
@@ -1207,13 +1217,12 @@
47
             </translation>
48
     </message>
49
     <message>
50
-        <location line="+5"/>
51
         <source>_Use alternative tag for MP3 in .mp4</source>
52
-        <translation type="unfinished">
53
+        <translation type="obsolete">
54
             </translation>
55
     </message>
56
     <message>
57
-        <location line="+1"/>
58
+        <location line="+5"/>
59
         <source>_Default to the directory of the last read file for saving</source>
60
         <translation type="unfinished"></translation>
61
     </message>
62
@@ -1223,7 +1232,7 @@
63
         <translation type="unfinished"></translation>
64
     </message>
65
     <message>
66
-        <location line="+5"/>
67
+        <location line="+9"/>
68
         <source>XVideo (best)</source>
69
         <translation type="unfinished">
70
             </translation>
71
@@ -1234,7 +1243,7 @@
72
         <translation type="unfinished"></translation>
73
     </message>
74
     <message>
75
-        <location line="+15"/>
76
+        <location line="+11"/>
77
         <source>SDL (good)</source>
78
         <translation type="unfinished">
79
             </translation>
80
@@ -1367,7 +1376,7 @@
81
         <location line="+5"/>
82
         <location filename="../../common/gui_save.cpp" line="+57"/>
83
         <location line="+10"/>
84
-        <location line="+278"/>
85
+        <location line="+277"/>
86
         <location line="+19"/>
87
         <location line="+7"/>
88
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
89
@@ -1384,7 +1393,7 @@
90
     </message>
91
     <message>
92
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
93
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+35"/>
94
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+38"/>
95
         <source>CPU</source>
96
         <translation type="unfinished">
97
             </translation>
98
@@ -1396,20 +1405,18 @@
99
             </translation>
100
     </message>
101
     <message>
102
-        <location line="+14"/>
103
+        <location line="+11"/>
104
+        <location line="+3"/>
105
         <source>Preferences</source>
106
         <translation type="unfinished">Tercihler</translation>
107
     </message>
108
     <message>
109
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
110
-        <location line="+2"/>
111
-        <location line="+2"/>
112
         <source>-</source>
113
-        <translation type="unfinished">
114
+        <translation type="obsolete">
115
             </translation>
116
     </message>
117
     <message>
118
-        <location line="+22"/>
119
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+72"/>
120
         <source>Copy</source>
121
         <translation type="unfinished">Kopyala</translation>
122
     </message>
123
@@ -1600,12 +1607,31 @@
124
         <translation type="unfinished">Kodek Hatası</translation>
125
     </message>
126
     <message>
127
-        <location filename="../../common/gui_main.cpp" line="+373"/>
128
+        <location filename="../../common/gui_main.cpp" line="+369"/>
129
         <source>Not coded in this version</source>
130
         <translation type="unfinished">Bu sürümde kodlanmamış</translation>
131
     </message>
132
     <message>
133
-        <location line="+251"/>
134
+        <location line="+209"/>
135
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The cut points of the pasted selection may result in playback interruption due to reversed display order of frames if saved in copy mode.
136
+Proceed anyway?</source>
137
+        <translation type="unfinished"></translation>
138
+    </message>
139
+    <message>
140
+        <location line="+7"/>
141
+        <source>Codec or codec settings across a cut point of the pasted video do not match.
142
+Playback of the video saved in copy mode may stop at this point.
143
+Proceed anyway?</source>
144
+        <translation type="unfinished"></translation>
145
+    </message>
146
+    <message>
147
+        <location line="+5"/>
148
+        <source>Cut points of the pasted video could not be checked. This indicates an issue with a source video, the state of editing or a bug in the program. Please check the application log file or console output for details.
149
+Try anyway?</source>
150
+        <translation type="unfinished"></translation>
151
+    </message>
152
+    <message>
153
+        <location line="+60"/>
154
         <source>Are you sure?</source>
155
         <translation type="unfinished">
156
             </translation>
157
@@ -1626,21 +1652,52 @@
158
         <translation type="unfinished"></translation>
159
     </message>
160
     <message>
161
-        <location line="+24"/>
162
+        <location line="+30"/>
163
         <source>The end point of the cut is not on a keyframe.
164
 Video saved in copy mode will be corrupted at this point.
165
 Proceed anyway?</source>
166
         <translation type="unfinished"></translation>
167
     </message>
168
     <message>
169
-        <location line="+5"/>
170
+        <location line="+4"/>
171
         <source>The end point of the deletion is not on a keyframe.
172
 Video saved in copy mode will be corrupted at this point.
173
 Proceed anyway?</source>
174
         <translation type="unfinished"></translation>
175
     </message>
176
     <message>
177
-        <location line="+100"/>
178
+        <location line="+6"/>
179
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the cut may result in playback interruption due to reversed display order of frames if saved in copy mode.
180
+Proceed anyway?</source>
181
+        <translation type="unfinished"></translation>
182
+    </message>
183
+    <message>
184
+        <location line="+6"/>
185
+        <source>This video uses non-IDR recovery points instead of IDR as keyframes. Picture reordering information in the video stream is not reset at non-IDR frames. The chosen start and end points of the deletion may result in playback interruption due to reversed display order of frames if saved in copy mode.
186
+Proceed anyway?</source>
187
+        <translation type="unfinished"></translation>
188
+    </message>
189
+    <message>
190
+        <location line="+8"/>
191
+        <source>Codec or codec settings across the cut do not match. Playback of the video saved in copy mode may stop at this point.
192
+Proceed anyway?</source>
193
+        <translation type="unfinished"></translation>
194
+    </message>
195
+    <message>
196
+        <location line="+4"/>
197
+        <source>Codec or codec settings across the deletion do not match. Playback of the video saved in copy mode may stop at this point.
198
+Proceed anyway?</source>
199
+        <translation type="unfinished"></translation>
200
+    </message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_zh_CN.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_zh_CN.ts Changed
201
 
1
@@ -9,7 +9,7 @@
2
         <translation>检查时间戳是否有效..</translation>
3
     </message>
4
     <message>
5
-        <location line="+26"/>
6
+        <location line="+43"/>
7
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
8
         <translation type="unfinished"></translation>
9
     </message>
10
@@ -19,7 +19,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+260"/>
15
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+258"/>
16
         <source>width</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1060,11 +1060,8 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
24
-        <location line="+2"/>
25
-        <location line="+2"/>
26
         <source>-</source>
27
-        <translation>-</translation>
28
+        <translation type="vanished">-</translation>
29
     </message>
30
     <message>
31
         <location filename="../../common/gui_save.cpp" line="+67"/>
32
@@ -1082,12 +1079,12 @@
33
         <translation type="unfinished"></translation>
34
     </message>
35
     <message>
36
-        <location line="+277"/>
37
+        <location line="+276"/>
38
         <source>Failed to save as JPEG</source>
39
         <translation type="unfinished"></translation>
40
     </message>
41
     <message>
42
-        <location line="+77"/>
43
+        <location line="+87"/>
44
         <source>Saving selection as set of JPEG images</source>
45
         <translation type="unfinished"></translation>
46
     </message>
47
@@ -1117,6 +1114,21 @@
48
         <translation type="unfinished"></translation>
49
     </message>
50
     <message>
51
+        <location line="+67"/>
52
+        <source>Cannot get tinyPy script engine</source>
53
+        <translation type="unfinished"></translation>
54
+    </message>
55
+    <message>
56
+        <location line="+7"/>
57
+        <source>Output file not specified</source>
58
+        <translation type="unfinished"></translation>
59
+    </message>
60
+    <message>
61
+        <location line="+13"/>
62
+        <source>Job script %s already exists. Overwrite?</source>
63
+        <translation type="unfinished"></translation>
64
+    </message>
65
+    <message>
66
         <location filename="../../../avidemux_core/ADM_coreUtils/src/avidemutils.cpp" line="+372"/>
67
         <source>1:1</source>
68
         <translation>1:1</translation>
69
@@ -1143,7 +1155,7 @@
70
     </message>
71
     <message>
72
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
73
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+492"/>
74
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+510"/>
75
         <source>CPU</source>
76
         <translation>CPU</translation>
77
     </message>
78
@@ -1158,7 +1170,7 @@
79
         <translation>DTS</translation>
80
     </message>
81
     <message>
82
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+21"/>
83
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+71"/>
84
         <source>Cut</source>
85
         <translation>剪切</translation>
86
     </message>
87
@@ -1168,7 +1180,7 @@
88
         <translation>GMC</translation>
89
     </message>
90
     <message>
91
-        <location filename="../../common/gui_save.cpp" line="-475"/>
92
+        <location filename="../../common/gui_save.cpp" line="-571"/>
93
         <source>Job</source>
94
         <translation>工作</translation>
95
     </message>
96
@@ -1193,13 +1205,13 @@
97
         <translation>MP4</translation>
98
     </message>
99
     <message>
100
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-214"/>
101
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-216"/>
102
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="-19"/>
103
         <source>Low</source>
104
         <translation>低</translation>
105
     </message>
106
     <message>
107
-        <location line="+80"/>
108
+        <location line="+79"/>
109
         <location filename="../../../avidemux_core/ADM_coreAudio/src/ADM_audioStream.cpp" line="-12"/>
110
         <source>PCM</source>
111
         <translation>PCM</translation>
112
@@ -1245,7 +1257,7 @@
113
         <translation>H263</translation>
114
     </message>
115
     <message>
116
-        <location filename="../../common/gui_save.cpp" line="+441"/>
117
+        <location filename="../../common/gui_save.cpp" line="+450"/>
118
         <location line="+83"/>
119
         <source>Done</source>
120
         <translation>完成</translation>
121
@@ -1256,7 +1268,7 @@
122
         <translation>增益</translation>
123
     </message>
124
     <message>
125
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-84"/>
126
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-83"/>
127
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="-45"/>
128
         <source>High</source>
129
         <translation>高</translation>
130
@@ -1267,7 +1279,7 @@
131
         <translation>LPCM</translation>
132
     </message>
133
     <message>
134
-        <location filename="../../common/gui_save.cpp" line="-186"/>
135
+        <location filename="../../common/gui_save.cpp" line="-196"/>
136
         <source>Jpeg</source>
137
         <translation>Jpeg</translation>
138
     </message>
139
@@ -1304,7 +1316,7 @@
140
         <translation>QDM2</translation>
141
     </message>
142
     <message>
143
-        <location filename="../../common/gui_main.cpp" line="+1835"/>
144
+        <location filename="../../common/gui_main.cpp" line="+1901"/>
145
         <source>Oops</source>
146
         <translation>Oops</translation>
147
     </message>
148
@@ -1350,7 +1362,7 @@
149
     </message>
150
     <message>
151
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
152
-        <location filename="../../common/gui_save.cpp" line="-398"/>
153
+        <location filename="../../common/gui_save.cpp" line="-397"/>
154
         <source>No audio track</source>
155
         <translation>没有音轨</translation>
156
     </message>
157
@@ -1376,7 +1388,7 @@
158
         <translation>它没&apos;有LAME!,它需要去建立 FLV视频。</translation>
159
     </message>
160
     <message>
161
-        <location filename="../../common/gui_save.cpp" line="+588"/>
162
+        <location filename="../../common/gui_save.cpp" line="+597"/>
163
         <source>File %s was NOT saved correctly.</source>
164
         <translation>文件 %s 保存不正确。</translation>
165
     </message>
166
@@ -1392,12 +1404,12 @@
167
     </message>
168
     <message>
169
         <location filename="../../common/ADM_commonUI/DIA_plugins.cpp" line="-86"/>
170
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+212"/>
171
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+211"/>
172
         <location line="+3"/>
173
         <location line="+5"/>
174
-        <location filename="../../common/gui_save.cpp" line="-588"/>
175
+        <location filename="../../common/gui_save.cpp" line="-597"/>
176
         <location line="+10"/>
177
-        <location line="+278"/>
178
+        <location line="+277"/>
179
         <location line="+19"/>
180
         <location line="+7"/>
181
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
182
@@ -1410,7 +1422,7 @@
183
         <translation>关闭</translation>
184
     </message>
185
     <message>
186
-        <location filename="../../../avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h" line="+171"/>
187
+        <location filename="../../../avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h" line="+173"/>
188
         <location line="+30"/>
189
         <location filename="../../../avidemux_core/ADM_coreVideoCodec/src/ADM_codecFFsimple.cpp" line="+34"/>
190
         <location line="+35"/>
191
@@ -1423,18 +1435,21 @@
192
         <translation>只显示错误警告</translation>
193
     </message>
194
     <message>
195
-        <location filename="../../common/ADM_editor/src/ADM_segment.cpp" line="+637"/>
196
+        <location filename="../../common/ADM_editor/src/ADM_segment.cpp" line="+653"/>
197
         <location line="+44"/>
198
-        <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp" line="+81"/>
199
+        <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp" line="+80"/>
200
         <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_libva.cpp" line="+144"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/avidemux_zh_TW.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/avidemux_zh_TW.ts Changed
201
 
1
@@ -9,7 +9,7 @@
2
         <translation>檢查時間戳記是否有效..</translation>
3
     </message>
4
     <message>
5
-        <location line="+26"/>
6
+        <location line="+43"/>
7
         <source>This video contains B-frames, but presentation time stamps (PTS) are either missing or monotonically increasing. Avidemux can try to reconstruct correct PTS by decoding the entire video. This may take a lot of time. Proceed?</source>
8
         <translation type="unfinished"></translation>
9
     </message>
10
@@ -19,7 +19,7 @@
11
         <translation type="unfinished"></translation>
12
     </message>
13
     <message>
14
-        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+260"/>
15
+        <location filename="../../common/ADM_editor/src/ADM_edit.cpp" line="+258"/>
16
         <source>width</source>
17
         <translation type="unfinished"></translation>
18
     </message>
19
@@ -1060,11 +1060,8 @@
20
 <context>
21
     <name>adm</name>
22
     <message>
23
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+44"/>
24
-        <location line="+2"/>
25
-        <location line="+2"/>
26
         <source>-</source>
27
-        <translation>-</translation>
28
+        <translation type="vanished">-</translation>
29
     </message>
30
     <message>
31
         <location filename="../../common/gui_save.cpp" line="+67"/>
32
@@ -1082,12 +1079,12 @@
33
         <translation type="unfinished"></translation>
34
     </message>
35
     <message>
36
-        <location line="+277"/>
37
+        <location line="+276"/>
38
         <source>Failed to save as JPEG</source>
39
         <translation type="unfinished"></translation>
40
     </message>
41
     <message>
42
-        <location line="+77"/>
43
+        <location line="+87"/>
44
         <source>Saving selection as set of JPEG images</source>
45
         <translation type="unfinished"></translation>
46
     </message>
47
@@ -1117,6 +1114,21 @@
48
         <translation type="unfinished"></translation>
49
     </message>
50
     <message>
51
+        <location line="+67"/>
52
+        <source>Cannot get tinyPy script engine</source>
53
+        <translation type="unfinished"></translation>
54
+    </message>
55
+    <message>
56
+        <location line="+7"/>
57
+        <source>Output file not specified</source>
58
+        <translation type="unfinished"></translation>
59
+    </message>
60
+    <message>
61
+        <location line="+13"/>
62
+        <source>Job script %s already exists. Overwrite?</source>
63
+        <translation type="unfinished"></translation>
64
+    </message>
65
+    <message>
66
         <location filename="../../../avidemux_core/ADM_coreUtils/src/avidemutils.cpp" line="+372"/>
67
         <source>1:1</source>
68
         <translation>1:1</translation>
69
@@ -1143,7 +1155,7 @@
70
     </message>
71
     <message>
72
         <location filename="../../common/ADM_commonUI/DIA_builtin.cpp" line="+97"/>
73
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+492"/>
74
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+510"/>
75
         <source>CPU</source>
76
         <translation>CPU</translation>
77
     </message>
78
@@ -1158,7 +1170,7 @@
79
         <translation>DTS</translation>
80
     </message>
81
     <message>
82
-        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+21"/>
83
+        <location filename="../../common/ADM_commonUI/myOwnMenu.h" line="+71"/>
84
         <source>Cut</source>
85
         <translation>剪下</translation>
86
     </message>
87
@@ -1168,7 +1180,7 @@
88
         <translation>GMC</translation>
89
     </message>
90
     <message>
91
-        <location filename="../../common/gui_save.cpp" line="-475"/>
92
+        <location filename="../../common/gui_save.cpp" line="-571"/>
93
         <source>Job</source>
94
         <translation>工作</translation>
95
     </message>
96
@@ -1193,13 +1205,13 @@
97
         <translation>MP4</translation>
98
     </message>
99
     <message>
100
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-214"/>
101
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-216"/>
102
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="-19"/>
103
         <source>Low</source>
104
         <translation>低</translation>
105
     </message>
106
     <message>
107
-        <location line="+80"/>
108
+        <location line="+79"/>
109
         <location filename="../../../avidemux_core/ADM_coreAudio/src/ADM_audioStream.cpp" line="-12"/>
110
         <source>PCM</source>
111
         <translation>PCM</translation>
112
@@ -1245,7 +1257,7 @@
113
         <translation>H263</translation>
114
     </message>
115
     <message>
116
-        <location filename="../../common/gui_save.cpp" line="+441"/>
117
+        <location filename="../../common/gui_save.cpp" line="+450"/>
118
         <location line="+83"/>
119
         <source>Done</source>
120
         <translation>完成</translation>
121
@@ -1256,7 +1268,7 @@
122
         <translation>增音</translation>
123
     </message>
124
     <message>
125
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-84"/>
126
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="-83"/>
127
         <location filename="../ADM_userInterfaces/ADM_dialog/DIA_xvid4.cpp" line="-45"/>
128
         <source>High</source>
129
         <translation>高</translation>
130
@@ -1267,7 +1279,7 @@
131
         <translation>LPCM</translation>
132
     </message>
133
     <message>
134
-        <location filename="../../common/gui_save.cpp" line="-186"/>
135
+        <location filename="../../common/gui_save.cpp" line="-196"/>
136
         <source>Jpeg</source>
137
         <translation>Jpeg</translation>
138
     </message>
139
@@ -1304,7 +1316,7 @@
140
         <translation>QDM2</translation>
141
     </message>
142
     <message>
143
-        <location filename="../../common/gui_main.cpp" line="+1835"/>
144
+        <location filename="../../common/gui_main.cpp" line="+1901"/>
145
         <source>Oops</source>
146
         <translation>Oops</translation>
147
     </message>
148
@@ -1350,7 +1362,7 @@
149
     </message>
150
     <message>
151
         <location filename="../../common/gui_autodrive.cpp" line="+48"/>
152
-        <location filename="../../common/gui_save.cpp" line="-398"/>
153
+        <location filename="../../common/gui_save.cpp" line="-397"/>
154
         <source>No audio track</source>
155
         <translation>沒有音軌</translation>
156
     </message>
157
@@ -1376,7 +1388,7 @@
158
         <translation>它沒&apos;有LAME!,它需要去建立 FLV影片。</translation>
159
     </message>
160
     <message>
161
-        <location filename="../../common/gui_save.cpp" line="+588"/>
162
+        <location filename="../../common/gui_save.cpp" line="+597"/>
163
         <source>File %s was NOT saved correctly.</source>
164
         <translation>檔案 %s 儲存不正確。</translation>
165
     </message>
166
@@ -1392,12 +1404,12 @@
167
     </message>
168
     <message>
169
         <location filename="../../common/ADM_commonUI/DIA_plugins.cpp" line="-86"/>
170
-        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+212"/>
171
+        <location filename="../../common/ADM_commonUI/DIA_prefs.cpp" line="+211"/>
172
         <location line="+3"/>
173
         <location line="+5"/>
174
-        <location filename="../../common/gui_save.cpp" line="-588"/>
175
+        <location filename="../../common/gui_save.cpp" line="-597"/>
176
         <location line="+10"/>
177
-        <location line="+278"/>
178
+        <location line="+277"/>
179
         <location line="+19"/>
180
         <location line="+7"/>
181
         <location filename="../../common/gui_savenew.cpp" line="+423"/>
182
@@ -1410,7 +1422,7 @@
183
         <translation>關閉</translation>
184
     </message>
185
     <message>
186
-        <location filename="../../../avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h" line="+171"/>
187
+        <location filename="../../../avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h" line="+173"/>
188
         <location line="+30"/>
189
         <location filename="../../../avidemux_core/ADM_coreVideoCodec/src/ADM_codecFFsimple.cpp" line="+34"/>
190
         <location line="+35"/>
191
@@ -1423,18 +1435,21 @@
192
         <translation>只顯示錯誤警告</translation>
193
     </message>
194
     <message>
195
-        <location filename="../../common/ADM_editor/src/ADM_segment.cpp" line="+637"/>
196
+        <location filename="../../common/ADM_editor/src/ADM_segment.cpp" line="+653"/>
197
         <location line="+44"/>
198
-        <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp" line="+81"/>
199
+        <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_dxva2.cpp" line="+80"/>
200
         <location filename="../../common/ADM_videoCodec/src/ADM_ffmpeg_libva.cpp" line="+144"/>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/qtbase_ca.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/qtbase_ca.ts Changed
201
 
1
@@ -1009,7 +1009,7 @@
2
     </message>
3
     <message>
4
         <source>Show </source>
5
-        <translation>Mostra</translation>
6
+        <translation>Mostra </translation>
7
     </message>
8
     <message>
9
         <source>&amp;Rename</source>
10
@@ -1150,7 +1150,7 @@
11
     </message>
12
     <message>
13
         <source>%1 KB</source>
14
-        <translation type="vanished">%1 KB</translation>
15
+        <translation type="vanished">%1 kB</translation>
16
     </message>
17
     <message>
18
         <source>%1 bytes</source>
19
@@ -1246,11 +1246,11 @@
20
     </message>
21
     <message>
22
         <source>Extra Light</source>
23
-        <translation>Extra fi</translation>
24
+        <translation>Extrafi</translation>
25
     </message>
26
     <message>
27
         <source>Extra Bold</source>
28
-        <translation>Extra negreta</translation>
29
+        <translation>Extranegreta</translation>
30
     </message>
31
     <message>
32
         <source>Extra</source>
33
@@ -1989,17 +1989,13 @@
34
     </message>
35
     <message>
36
         <source>missing section data. This is not a library.</source>
37
-        <translation>manca la secció «data». Això no es cap biblioteca.</translation>
38
+        <translation>manca la secció «data». Això no és cap biblioteca.</translation>
39
     </message>
40
     <message>
41
         <source>Plugin verification data mismatch in &apos;%1&apos;</source>
42
         <translation type="vanished">Error de verificació de dades del connector a «%1»</translation>
43
     </message>
44
     <message>
45
-        <source>Out of memory while loading plugin &apos;%1&apos;.</source>
46
-        <translation>Sense memòria en carregar el connector «%1».</translation>
47
-    </message>
48
-    <message>
49
         <source>Failed to extract plugin meta data from &apos;%1&apos;</source>
50
         <translation>Ha fallat en extreure les metadades del connector des de «%1»</translation>
51
     </message>
52
@@ -2824,7 +2820,7 @@
53
     <name>QPSQLResult</name>
54
     <message>
55
         <source>Query results lost - probably discarded on executing another SQL query.</source>
56
-        <translation>S&apos;han perdut els resultats de la consulta - probablement s&apos;han descartat en executar una altra consulta SQL.</translation>
57
+        <translation>S&apos;han perdut els resultats de la consulta - probablement descartats en executar una altra consulta SQL.</translation>
58
     </message>
59
     <message>
60
         <source>Unable to create query</source>
61
@@ -2832,7 +2828,7 @@
62
     </message>
63
     <message>
64
         <source>Unable to get result</source>
65
-        <translation>No s&apos;ha pogut obtenir el resultat</translation>
66
+        <translation>No s&apos;ha pogut obtenir els resultats</translation>
67
     </message>
68
     <message>
69
         <source>Unable to send query</source>
70
@@ -3632,11 +3628,11 @@
71
     </message>
72
     <message>
73
         <source>Invalid Pages Definition</source>
74
-        <translation>Definició no vàlida de pàgina</translation>
75
+        <translation>Definició no vàlida de les pàgines</translation>
76
     </message>
77
     <message>
78
         <source>%1 does not follow the correct syntax. Please use &apos;,&apos; to separate ranges and pages, &apos;-&apos; to define ranges and make sure ranges do not intersect with each other.</source>
79
-        <translation>%1 no segueix la sintaxi correcta. Useu «,» per separarar intervals i pàgines, «-» per definir intervals i assegureu-vos que els intervals no intersequen entre ells.</translation>
80
+        <translation>%1 no segueix la sintaxi correcta. Useu «,» per separar intervals i pàgines, «-» per definir intervals, i assegureu-vos que els intervals no se sobreposen entre ells.</translation>
81
     </message>
82
     <message>
83
         <source>Print to File (PDF)</source>
84
@@ -3786,7 +3782,7 @@
85
     </message>
86
     <message>
87
         <source>There are conflicts in some advanced options. Do you want to fix them?</source>
88
-        <translation>Hi ha conflictes a diverses opcions avançades. Voleu arreglar-los?</translation>
89
+        <translation>Hi ha conflictes a les opcions avançades. Els voleu solucionar?</translation>
90
     </message>
91
 </context>
92
 <context>
93
@@ -3805,7 +3801,7 @@
94
     </message>
95
     <message>
96
         <source>There are conflicts in some options. Please fix them.</source>
97
-        <translation>Hi ha conflictes a diverses opcions. Esmeneu-los.</translation>
98
+        <translation>Hi ha conflictes a diverses opcions. Si us plau, solucioneu-los.</translation>
99
     </message>
100
 </context>
101
 <context>
102
@@ -3900,7 +3896,7 @@
103
     </message>
104
     <message>
105
         <source>Specify pages or ranges separated by commas. Ranges are specified by two numbers separated by a hyphen. E.g: 3,5-7,9 prints pages 3, 5, 6, 7 and 9.</source>
106
-        <translation>Especifique les pàgines o intervals separats per comes. Els intervals s&apos;especifiquen amb dos nombres separats per un guió. P. ex: 3,5-7,9 imprimeix les pàgines 3, 5, 6, 7 i 9.</translation>
107
+        <translation>Especifiqueu les pàgines o intervals separats per comes. Els intervals s&apos;especifiquen amb dos nombres separats per un guió. P. ex: 3,5-7,9 imprimeix les pàgines 3, 5, 6, 7 i 9.</translation>
108
     </message>
109
 </context>
110
 <context>
111
@@ -4209,7 +4205,7 @@
112
     </message>
113
     <message>
114
         <source>PCRE does not support \L, \l, \N{name}, \U, or \u</source>
115
-        <translation>PCRE not accepta \L, \l, \N{nom}, \U, ni \u</translation>
116
+        <translation>PCRE no accepta \L, \l, \N{nom}, \U, ni \u</translation>
117
     </message>
118
     <message>
119
         <source>number after (?C is &gt; 255</source>
120
@@ -4317,7 +4313,7 @@
121
     </message>
122
     <message>
123
         <source>different names for subpatterns of the same number are not allowed</source>
124
-        <translation>no es permeten noms diferents per subpatrons dels mateix nombre</translation>
125
+        <translation>no es permeten noms diferents per subpatrons del mateix nombre</translation>
126
     </message>
127
     <message>
128
         <source>(*MARK) must have an argument</source>
129
@@ -4409,7 +4405,7 @@
130
     </message>
131
     <message>
132
         <source>unrecognised compile-time option bit(s)</source>
133
-        <translation>bit/s no reconegut/s d&apos;opció en temps de compilació </translation>
134
+        <translation>bit/s no reconegut/s d&apos;opció en temps de compilació</translation>
135
     </message>
136
     <message>
137
         <source>missing ) after (?# comment</source>
138
@@ -4437,7 +4433,7 @@
139
     </message>
140
     <message>
141
         <source>this version of PCRE2 does not have Unicode support</source>
142
-        <translation>aquesta versió del PCRE2 no implementa el Unicode</translation>
143
+        <translation>aquesta versió del PCRE2 no implementa l&apos;Unicode</translation>
144
     </message>
145
     <message>
146
         <source>parentheses are too deeply nested (stack check)</source>
147
@@ -4445,7 +4441,7 @@
148
     </message>
149
     <message>
150
         <source>character code point value in \x{} or \o{} is too large</source>
151
-        <translation>el valor del codi de caràcter de coma en \x{} o \o{} es massa gran</translation>
152
+        <translation>el valor del codi de caràcter de coma en \x{} o \o{} és massa gran</translation>
153
     </message>
154
     <message>
155
         <source>\C is not allowed in a lookbehind assertion</source>
156
@@ -4513,11 +4509,11 @@
157
     </message>
158
     <message>
159
         <source>character code point value in \u.... sequence is too large</source>
160
-        <translation>el valor del codi de caràcter de coma a una seqüència en \u.... es massa gran</translation>
161
+        <translation>el valor del codi de caràcter de coma a una seqüència en \u.... és massa gran</translation>
162
     </message>
163
     <message>
164
         <source>digits missing in \x{} or \o{}</source>
165
-        <translation>manquen els dígits a\x{} o \o{} </translation>
166
+        <translation>manquen els dígits a\x{} o \o{}</translation>
167
     </message>
168
     <message>
169
         <source>syntax error in (?(VERSION condition</source>
170
@@ -4713,11 +4709,11 @@
171
     </message>
172
     <message>
173
         <source>too much recursion for DFA matching</source>
174
-        <translation>hi ha massa recursió per a la coincidència DFA</translation>
175
+        <translation>hi ha massa recursivitat per a la coincidència DFA</translation>
176
     </message>
177
     <message>
178
         <source>backreference condition or recursion test is not supported for DFA matching</source>
179
-        <translation>la condició de referència cap enrere o la prova de recursió no estan admeses a la coincidència DFA</translation>
180
+        <translation>la condició de referència cap enrere o la prova de recursivitat no estan admeses a la coincidència DFA</translation>
181
     </message>
182
     <message>
183
         <source>function is not supported for DFA matching</source>
184
@@ -4765,7 +4761,7 @@
185
     </message>
186
     <message>
187
         <source>nested recursion at the same subject position</source>
188
-        <translation>recursió imbricada en la mateixa posició del subjecte</translation>
189
+        <translation>recursivitat imbricada a la mateixa posició del subjecte</translation>
190
     </message>
191
     <message>
192
         <source>recursion limit exceeded</source>
193
@@ -5141,7 +5137,7 @@
194
     </message>
195
     <message>
196
         <source>ScrollLock</source>
197
-        <translation>BloqDespl</translation>
198
+        <translation>Bloq Despl</translation>
199
     </message>
200
     <message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/qtbase_de.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/qtbase_de.ts Changed
10
 
1
@@ -6443,7 +6443,7 @@
2
     </message>
3
     <message>
4
         <source>The root CA certificate is marked to reject the specified purpose</source>
5
-        <translation>Das oberste Zertifikat der Zertifizierungsstelle weist diesen Fall auf Grund einer speziellen Kennzeichnung zurück</translation>
6
+        <translation>Das oberste Zertifikat der Zertifizierungsstelle weist diesen Fall aufgrund einer speziellen Kennzeichnung zurück</translation>
7
     </message>
8
     <message>
9
         <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
10
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/qtbase_pl.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/qtbase_pl.ts Changed
52
 
1
@@ -743,11 +743,11 @@
2
     <message>
3
         <source>Float</source>
4
         <extracomment>Accessible name for button undocking a dock widget (floating state)</extracomment>
5
-        <translation>Zwolnij</translation>
6
+        <translation>Uwolnij</translation>
7
     </message>
8
     <message>
9
         <source>Undocks and re-attaches the dock widget</source>
10
-        <translation>Zwalnia i ponownie dokuje widżet</translation>
11
+        <translation>Uwalnia i ponownie dokuje widżet</translation>
12
     </message>
13
     <message>
14
         <source>Close</source>
15
@@ -756,7 +756,7 @@
16
     </message>
17
     <message>
18
         <source>Closes the dock widget</source>
19
-        <translation>Zamyka zadokowany widżet</translation>
20
+        <translation type="unfinished"></translation>
21
     </message>
22
 </context>
23
 <context>
24
@@ -3926,7 +3926,7 @@
25
     </message>
26
     <message>
27
         <source>invalid escape sequence in character class</source>
28
-        <translation>nieprawidłowa sekwencja ucieczki w klasie znaków</translation>
29
+        <translation>niepoprawna sekwencja specjalna w klasie znakowej</translation>
30
     </message>
31
     <message>
32
         <source>range out of order in character class</source>
33
@@ -4794,7 +4794,7 @@
34
     </message>
35
     <message>
36
         <source>Home</source>
37
-        <translation>Home</translation>
38
+        <translation>Katalog domowy</translation>
39
     </message>
40
     <message>
41
         <source>End</source>
42
@@ -6379,8 +6379,7 @@
43
     </message>
44
     <message>
45
         <source>Home</source>
46
-        <translatorcomment>Keyboard button name</translatorcomment>
47
-        <translation>Home</translation>
48
+        <translation>Katalog domowy</translation>
49
     </message>
50
     <message>
51
         <source>Cache</source>
52
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/qtbase_ru.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/qtbase_ru.ts Changed
201
 
1
@@ -9,10 +9,41 @@
2
     </message>
3
 </context>
4
 <context>
5
+    <name>MAC_APPLICATION_MENU</name>
6
+    <message>
7
+        <source>About %1</source>
8
+        <translation>О %1</translation>
9
+    </message>
10
+    <message>
11
+        <source>Preferences...</source>
12
+        <translation>Настройки...</translation>
13
+    </message>
14
+    <message>
15
+        <source>Services</source>
16
+        <translation>Службы</translation>
17
+    </message>
18
+    <message>
19
+        <source>Hide %1</source>
20
+        <translation>Скрыть %1</translation>
21
+    </message>
22
+    <message>
23
+        <source>Hide Others</source>
24
+        <translation>Скрыть другое</translation>
25
+    </message>
26
+    <message>
27
+        <source>Show All</source>
28
+        <translation>Показать всё</translation>
29
+    </message>
30
+    <message>
31
+        <source>Quit %1</source>
32
+        <translation>Выйти из %1</translation>
33
+    </message>
34
+</context>
35
+<context>
36
     <name>QAbstractSocket</name>
37
     <message>
38
         <source>Socket operation timed out</source>
39
-        <translation>Время операции истекло</translation>
40
+        <translation>Время на операцию истекло</translation>
41
     </message>
42
     <message>
43
         <source>Operation on socket is not supported</source>
44
@@ -158,6 +189,25 @@
45
     </message>
46
 </context>
47
 <context>
48
+    <name>QAndroidPlatformTheme</name>
49
+    <message>
50
+        <source>Yes</source>
51
+        <translation>Да</translation>
52
+    </message>
53
+    <message>
54
+        <source>Yes to All</source>
55
+        <translation>Да для всех</translation>
56
+    </message>
57
+    <message>
58
+        <source>No</source>
59
+        <translation>Нет</translation>
60
+    </message>
61
+    <message>
62
+        <source>No to All</source>
63
+        <translation>Нет для всех</translation>
64
+    </message>
65
+</context>
66
+<context>
67
     <name>QApplication</name>
68
     <message>
69
         <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
70
@@ -169,6 +219,69 @@
71
     </message>
72
 </context>
73
 <context>
74
+    <name>QCocoaMenuItem</name>
75
+    <message>
76
+        <source>About Qt</source>
77
+        <translation>О Qt</translation>
78
+    </message>
79
+    <message>
80
+        <source>About</source>
81
+        <translatorcomment>здесь и далее (до exit включительно) слова используются для определения пункта меню по началу его надписи (caption).</translatorcomment>
82
+        <translation>О </translation>
83
+    </message>
84
+    <message>
85
+        <source>Config</source>
86
+        <translation>Конфигурация</translation>
87
+    </message>
88
+    <message>
89
+        <source>Preference</source>
90
+        <translation>Предпочтени</translation>
91
+    </message>
92
+    <message>
93
+        <source>Options</source>
94
+        <translation>Параметры</translation>
95
+    </message>
96
+    <message>
97
+        <source>Setting</source>
98
+        <translation>Настройк</translation>
99
+    </message>
100
+    <message>
101
+        <source>Setup</source>
102
+        <translation>Параметр</translation>
103
+    </message>
104
+    <message>
105
+        <source>Quit</source>
106
+        <translation>Выйти</translation>
107
+    </message>
108
+    <message>
109
+        <source>Exit</source>
110
+        <translation>Выход</translation>
111
+    </message>
112
+    <message>
113
+        <source>Cut</source>
114
+        <translation>Вырезать</translation>
115
+    </message>
116
+    <message>
117
+        <source>Copy</source>
118
+        <translation>Копировать</translation>
119
+    </message>
120
+    <message>
121
+        <source>Paste</source>
122
+        <translation>Вставить</translation>
123
+    </message>
124
+    <message>
125
+        <source>Select All</source>
126
+        <translation>Выделить всё</translation>
127
+    </message>
128
+</context>
129
+<context>
130
+    <name>QCocoaTheme</name>
131
+    <message>
132
+        <source>Don&apos;t Save</source>
133
+        <translation>Не сохранять</translation>
134
+    </message>
135
+</context>
136
+<context>
137
     <name>QColorDialog</name>
138
     <message>
139
         <source>Hu&amp;e:</source>
140
@@ -241,22 +354,22 @@
141
     </message>
142
     <message>
143
         <source>Open the combo box selection popup</source>
144
-        <translation>Открыть выпадающий список</translation>
145
+        <translation>Открыть раскрывающийся список</translation>
146
     </message>
147
 </context>
148
 <context>
149
     <name>QCommandLineParser</name>
150
     <message>
151
         <source>Displays version information.</source>
152
-        <translation>Отобразить информацию о версии.</translation>
153
+        <translation>Показать сведения о версии.</translation>
154
     </message>
155
     <message>
156
         <source>Displays this help.</source>
157
-        <translation>Отобразить эту справку.</translation>
158
+        <translation>Показать эту справку.</translation>
159
     </message>
160
     <message>
161
         <source>Unknown option &apos;%1&apos;.</source>
162
-        <translation>Неизвестный параметр &apos;%1&apos;.</translation>
163
+        <translation>Неизвестный параметр «%1».</translation>
164
     </message>
165
     <message>
166
         <source>Unknown options: %1.</source>
167
@@ -264,11 +377,11 @@
168
     </message>
169
     <message>
170
         <source>Missing value after &apos;%1&apos;.</source>
171
-        <translation>Отсутствует значение после &apos;%1&apos;.</translation>
172
+        <translation>Отсутствует значение после «%1».</translation>
173
     </message>
174
     <message>
175
         <source>Unexpected value after &apos;%1&apos;.</source>
176
-        <translation>Неожиданное значение после &apos;%1&apos;.</translation>
177
+        <translation>Неожиданное значение после «%1».</translation>
178
     </message>
179
     <message>
180
         <source>[options]</source>
181
@@ -386,7 +499,7 @@
182
     <message>
183
         <source>Unclassified</source>
184
         <comment>CUPS Banner page</comment>
185
-        <translation>Открытая информация</translation>
186
+        <translation>Без ограничения доступа</translation>
187
     </message>
188
     <message>
189
         <source>Confidential</source>
190
@@ -396,7 +509,7 @@
191
     <message>
192
         <source>Classified</source>
193
         <comment>CUPS Banner page</comment>
194
-        <translation>Ограниченный доступ</translation>
195
+        <translation>С ограничением доступа</translation>
196
     </message>
197
     <message>
198
         <source>Secret</source>
199
@@ -714,7 +827,7 @@
200
     </message>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/i18n/qtbase_zh_TW.ts -> avidemux_2.7.4.tar.gz/avidemux/qt4/i18n/qtbase_zh_TW.ts Changed
201
 
1
@@ -1,2413 +1,2924 @@
2
 <?xml version="1.0" encoding="utf-8"?>
3
 <!DOCTYPE TS>
4
-<TS version="2.0" language="zh_TW">
5
+<TS version="2.1" language="zh_TW">
6
 <context>
7
-    <name>QWidget</name>
8
+    <name>CloseButton</name>
9
     <message>
10
-        <source>*</source>
11
-        <translation>+</translation>
12
+        <source>Close Tab</source>
13
+        <translation>關閉分頁</translation>
14
     </message>
15
 </context>
16
 <context>
17
-    <name>QShortcut</name>
18
+    <name>MAC_APPLICATION_MENU</name>
19
     <message>
20
-        <source>+</source>
21
-        <translation>+</translation>
22
+        <source>About %1</source>
23
+        <translation>關於 %1</translation>
24
     </message>
25
     <message>
26
-        <source>No</source>
27
-        <translation>否</translation>
28
+        <source>Preferences...</source>
29
+        <translation>偏好設定…</translation>
30
     </message>
31
     <message>
32
-        <source>Up</source>
33
-        <translation>上鍵</translation>
34
+        <source>Services</source>
35
+        <translation>服務</translation>
36
     </message>
37
     <message>
38
-        <source>Alt</source>
39
-        <translation>Alt</translation>
40
+        <source>Hide %1</source>
41
+        <translation>隱藏 %1</translation>
42
     </message>
43
     <message>
44
-        <source>F%1</source>
45
-        <translation>F%1</translation>
46
+        <source>Hide Others</source>
47
+        <translation>隱藏其他</translation>
48
     </message>
49
     <message>
50
-        <source>Del</source>
51
-        <translation>Del</translation>
52
+        <source>Show All</source>
53
+        <translation>顯示全部</translation>
54
     </message>
55
     <message>
56
-        <source>End</source>
57
-        <translation>End</translation>
58
+        <source>Quit %1</source>
59
+        <translation>結束 %1</translation>
60
     </message>
61
+</context>
62
+<context>
63
+    <name>Print Device Input Slot</name>
64
     <message>
65
-        <source>Esc</source>
66
-        <translation>Esc</translation>
67
+        <source>Automatic</source>
68
+        <translation>自動</translation>
69
     </message>
70
+</context>
71
+<context>
72
+    <name>Print Device Output Bin</name>
73
     <message>
74
-        <source>Ins</source>
75
-        <translation>Ins</translation>
76
+        <source>Automatic</source>
77
+        <translation>自動</translation>
78
     </message>
79
+</context>
80
+<context>
81
+    <name>QAbstractSocket</name>
82
     <message>
83
-        <source>Tab</source>
84
-        <translation>Tab</translation>
85
+        <source>Socket operation timed out</source>
86
+        <translation>Socket 操作逾時</translation>
87
     </message>
88
     <message>
89
-        <source>Yes</source>
90
-        <translation>是</translation>
91
+        <source>Operation on socket is not supported</source>
92
+        <translation>不支援於 Socket 上操作</translation>
93
     </message>
94
     <message>
95
-        <source>Back</source>
96
-        <translation>返回</translation>
97
+        <source>Host not found</source>
98
+        <translation>找不到主機</translation>
99
     </message>
100
     <message>
101
-        <source>Call</source>
102
-        <translation>呼叫</translation>
103
+        <source>Connection refused</source>
104
+        <translation>連線被拒</translation>
105
     </message>
106
     <message>
107
-        <source>Ctrl</source>
108
-        <translation>Ctrl</translation>
109
+        <source>Connection timed out</source>
110
+        <translation>連線逾時</translation>
111
     </message>
112
     <message>
113
-        <source>Down</source>
114
-        <translation>下鍵</translation>
115
+        <source>Trying to connect while connection is in progress</source>
116
+        <translation>嘗試在連線時連線</translation>
117
     </message>
118
     <message>
119
-        <source>Flip</source>
120
-        <translation>反轉</translation>
121
+        <source>Socket is not connected</source>
122
+        <translation>未連線 Socket</translation>
123
     </message>
124
     <message>
125
-        <source>Help</source>
126
-        <translation>說明</translation>
127
+        <source>Network unreachable</source>
128
+        <translation>無法連到網路</translation>
129
     </message>
130
+</context>
131
+<context>
132
+    <name>QAbstractSpinBox</name>
133
     <message>
134
-        <source>Home</source>
135
-        <translation>Home</translation>
136
+        <source>&amp;Select All</source>
137
+        <translation>全部選擇(&amp;S)</translation>
138
     </message>
139
     <message>
140
-        <source>Left</source>
141
-        <translation>左鍵</translation>
142
+        <source>&amp;Step up</source>
143
+        <translation>單步向上(&amp;S)</translation>
144
     </message>
145
     <message>
146
-        <source>Menu</source>
147
-        <translation>選單</translation>
148
+        <source>Step &amp;down</source>
149
+        <translation>單步向下(&amp;D)</translation>
150
     </message>
151
+</context>
152
+<context>
153
+    <name>QAccessibleActionInterface</name>
154
     <message>
155
-        <source>Meta</source>
156
-        <translation>Meta</translation>
157
+        <source>Press</source>
158
+        <translation>按下</translation>
159
     </message>
160
     <message>
161
-        <source>PgUp</source>
162
-        <translation>PgUp</translation>
163
+        <source>Increase</source>
164
+        <translation>增加</translation>
165
     </message>
166
     <message>
167
-        <source>Stop</source>
168
-        <translation>停止</translation>
169
+        <source>Decrease</source>
170
+        <translation>減少</translation>
171
     </message>
172
     <message>
173
-        <source>Enter</source>
174
-        <translation>Enter</translation>
175
+        <source>ShowMenu</source>
176
+        <translation>顯示選單</translation>
177
     </message>
178
     <message>
179
-        <source>Pause</source>
180
-        <translation>Pause</translation>
181
+        <source>SetFocus</source>
182
+        <translation>設定焦點</translation>
183
     </message>
184
     <message>
185
-        <source>Print</source>
186
-        <translation>Print</translation>
187
+        <source>Toggle</source>
188
+        <translation>切換</translation>
189
     </message>
190
     <message>
191
-        <source>Right</source>
192
-        <translation>右鍵</translation>
193
+        <source>Scroll Left</source>
194
+        <translation>往左捲動</translation>
195
     </message>
196
     <message>
197
-        <source>Shift</source>
198
-        <translation>Shift</translation>
199
+        <source>Scroll Right</source>
200
+        <translation>往右捲動</translation>
201
avidemux_2.7.3.tar.gz/avidemux/qt4/xdg_data/org.avidemux.Avidemux.appdata.xml.in -> avidemux_2.7.4.tar.gz/avidemux/qt4/xdg_data/org.avidemux.Avidemux.appdata.xml.in Changed
9
 
1
@@ -29,6 +29,6 @@
2
     </screenshots>
3
     <content_rating type="oars-1.1"/>
4
     <releases>
5
-        <release version="${AVIDEMUX_VERSION}" date="2019-03-21"/>
6
+        <release version="${AVIDEMUX_VERSION}" date="2019-08-14"/>
7
     </releases>
8
 </component>
9
avidemux_2.7.3.tar.gz/avidemux/winInstaller/ChangeLog.release -> avidemux_2.7.4.tar.gz/avidemux/winInstaller/ChangeLog.release Changed
64
 
1
@@ -7,34 +7,35 @@
2
 </head>
3
 <body>
4
     <div id="inner">
5
-        <h1>Changes in Avidemux v2.7.1 – v2.7.2 Beta</h1>
6
+        <h1>Changes in Avidemux v2.7.2 – v2.7.4</h1>
7
         <table>
8
-            <tr><td>New Demuxer:</td><td>Native AviSynth demuxer (MSVC++ 64 bits Windows builds only)</td></tr>
9
-            <tr><td>New Demuxer:</td><td>VapourSynth demuxer to directly load .vpy scripts (MSVC++, macOS with Homebrew, custom Linux builds)</td></tr>
10
-            <tr><td>New Installer:</td><td>Replace NSIS installer with Qt Installer Framework for native MSVC++ 64 bits Windows builds</td></tr>
11
-            <tr><td>New Encoder:</td><td>Add FFmpeg-based VA-API HW accelerated H.264 encoder (Intel/Linux)</td></tr>
12
-            <tr><td>New Encoder:</td><td>Add FFmpeg-based VA-API HW accelerated HEVC encoder (Intel/Linux)</td></tr>
13
-            <tr><td>FFmpeg:</td><td>Migrate to the 4.x branch</td></tr>
14
-            <tr><td>Decoder:</td><td>As a result of the FFmpeg upgrade, HW accelerated HEVC decoding on macOS is now available when supported by the hardware</td></tr>
15
-            <tr><td>Encoder:</td><td>Fix issues with image quality and skipped frames in the MJPEG encoder</td></tr>
16
-            <tr><td>Demuxer:</td><td>Fix audio delay calculation in the Mp4 demuxer</td></tr>
17
-            <tr><td>Demuxer:</td><td>Fix crash loading large MP4 files with LPCM audio</td></tr>
18
-            <tr><td>Demuxer:</td><td>Fix multiple issues in the ASF demuxer, allow to cancel indexing</td></tr>
19
-            <tr><td>Demuxer:</td><td>Allow to cancel indexing of MKV files</td></tr>
20
-            <tr><td>Demuxer:</td><td>Re-enable multiloading for MPEG-TS streams cut in chunks of 256, 512 MiB, 1, 2 and 4 GiB in size only</td></tr>
21
-            <tr><td>Demuxer:</td><td>Fix MPEG-TS indexer to start a H.264 or HEVC frame with the Access Unit Delimiter</td></tr>
22
-            <tr><td>Muxer:</td><td>Add Annex B to Annex B video stream filter to deal with misplaced frame boundaries</td></tr>
23
-            <tr><td>Muxer:</td><td>Add support for setting rotation flag to the MP4 muxer</td></tr>
24
-            <tr><td>Filter:</td><td>Add rubber band selector to the "Blacken Borders" filter</td></tr>
25
-            <tr><td>Filter:</td><td>Add option to deal with anamorphic display to the subtitle filter, fix issues in SRT to SSA converter</td></tr>
26
-            <tr><td>UI:</td><td>Autosave session on video close, add session restore feature</td></tr>
27
-            <tr><td>UI:</td><td>Add file name extension when saving audio for some audio types</td></tr>
28
-            <tr><td>Audio:</td><td>Make maximum level in the "Normalize" filter customizable</td></tr>
29
-            <tr><td>Audio:</td><td>Improve AAC sampling frequency detection</td></tr>
30
-            <tr><td>Audio:</td><td>Add decoding support for multichannel Opus audio</td></tr>
31
-            <tr><td>Miscellaneous:</td><td>Fix regression playback stuck after going to the previous picture</td></tr>
32
-            <tr><td>Miscellaneous:</td><td>Fix regression "Fade to black" reset when starting filtered playback close to the end of video</td></tr>
33
-            <tr><td>Miscellaneous:</td><td>Fix regression stopping playback rewinds to the start of video if seek back to the last displayed picture fails</td></tr>
34
+            <tr><td>New Feature:</td><td>Detect and warn when cut points in H.264 video streams may result in playback issues despite being on keyframes</td></tr>
35
+            <tr><td>FFmpeg:</td><td>Update to the 4.1.4 release</td></tr>
36
+            <tr><td>Core:</td><td>Fix MSVC++ builds do not run when the path to user directory contains non-ASCII characters</td></tr>
37
+            <tr><td>Decoder:</td><td>Fix DXVA2 HW accelerated decoding on Windows 7</td></tr>
38
+            <tr><td>Decoder:</td><td>Fix DXVA2 HW accelerated decoding stops sometimes on cuts</td></tr>
39
+            <tr><td>Decoder:</td><td>Enable HW accelerated decoding of 8-bit HEVC for recent versions of Intel graphics driver on Windows</td></tr>
40
+            <tr><td>Encoder:</td><td>Fix regression with saved x264 and x265 profiles not found (MSVC++ only)</td></tr>
41
+            <tr><td>Demuxer:</td><td>Dynamically load VapourSynth Script library to avoid error messages on Windows if VapourSynth is not found</td></tr>
42
+            <tr><td>Demuxer:</td><td>Provide correct average audio bitrate in the Mp4 demuxer if the exact value for the particular codec is unknown</td></tr>
43
+            <tr><td>Demuxer:</td><td>Fix crash loading MP4 file with number of audio tracks exceeding the max supported</td></tr>
44
+            <tr><td>Demuxer:</td><td>Support audio tracks in fragmented MP4 files (the variety with empty moov only)</td></tr>
45
+            <tr><td>Demuxer:</td><td>Support E-AC3 audio tracks in MP4 files</td></tr>
46
+            <tr><td>Demuxer:</td><td>Fix ASF demuxer still broken by chance with MSVC++ only, the fix relevant for all platforms</td></tr>
47
+            <tr><td>Demuxer:</td><td>Support more varieties of BMP images</td></tr>
48
+            <tr><td>Muxer:</td><td>Optimize output of the Mp4 muxer for streaming on Windows too</td></tr>
49
+            <tr><td>Muxer:</td><td>Add option to the Mp4 muxer to output fragmented MP4 files</td></tr>
50
+            <tr><td>Muxer:</td><td>Label HEVC video in Mp4 in a way compatible with QuickTime on macOS</td></tr>
51
+            <tr><td>Filter:</td><td>Fix assembly in Yadif deinterlacer with MSVC++</td></tr>
52
+            <tr><td>UI:</td><td>Enable automatic application scaling on Windows for recent Qt versions</td></tr>
53
+            <tr><td>UI:</td><td>Fix silent mode, automatically confirm dialogs instead of choosing the default option</td></tr>
54
+            <tr><td>Audio:</td><td>Support WMAPRO audio codec for decoding</td></tr>
55
+            <tr><td>Audio:</td><td>Support AAC with signal band replication (SBR) in external audio tracks</td></tr>
56
+            <tr><td>Audio:</td><td>Fix saving AAC audio tracks with SBR to a file</td></tr>
57
+            <tr><td>Audio:</td><td>Improve resilience to false positives when probing external audio files for AAC</td></tr>
58
+            <tr><td>Miscellaneous:</td><td>Fix crash with OpenGL or DXVA2 video output in 32 bits Avidemux on Windows (better late than never)</td></tr>
59
+            <tr><td>Miscellaneous:</td><td>Fix regressed handling of empty frames in MPEG-4 and FRAPS video streams</td></tr>
60
+            <tr><td>Miscellaneous:</td><td>Numerous other fixes and polish</td></tr>
61
         </table>
62
     </div>
63
 </body>
64
avidemux_2.7.4.tar.gz/avidemux/winInstaller/qtifw/packages/org.avidemux.run/data Added
2
 
1
+(directory)
2
avidemux_2.7.4.tar.gz/avidemux/winInstaller/qtifw/packages/org.avidemux.run/data/scripts Added
2
 
1
+(directory)
2
avidemux_2.7.4.tar.gz/avidemux/winInstaller/qtifw/packages/org.avidemux.run/data/scripts/auto_uninstall.js Added
25
 
1
@@ -0,0 +1,23 @@
2
+// Controller script to pass to the uninstaller to get it to run automatically.
3
+// It's passed to the maintenance tool during installation if there is already an
4
+// installation present with: <target dir>/maintenancetool.exe --script=<target dir>/scripts/auto_uninstall.qs.
5
+// This is required so that the user doesn't have to see/deal with the uninstaller in the middle of
6
+// an installation.
7
+
8
+function Controller()
9
+{
10
+    gui.clickButton(buttons.NextButton);
11
+    gui.clickButton(buttons.NextButton);
12
+
13
+    installer.uninstallationFinished.connect(this, this.uninstallationFinished);
14
+}
15
+
16
+Controller.prototype.uninstallationFinished = function()
17
+{
18
+    gui.clickButton(buttons.NextButton);
19
+}
20
+
21
+Controller.prototype.FinishedPageCallback = function()
22
+{
23
+    gui.clickButton(buttons.FinishButton);
24
+}
25
avidemux_2.7.3.tar.gz/avidemux/winInstaller/qtifw/packages/org.avidemux.run/meta/installscript.js -> avidemux_2.7.4.tar.gz/avidemux/winInstaller/qtifw/packages/org.avidemux.run/meta/installscript.js Changed
30
 
1
@@ -52,17 +52,26 @@
2
         component.loaded.connect(this, Component.prototype.installerLoaded);
3
         ComponentSelectionPage = gui.pageById(QInstaller.ComponentSelection);
4
        
5
-       var text=installer.value( "TargetDir");
6
-       if (installer.fileExists(text + "/components.xml")) 
7
+       var folder=installer.value( "TargetDir");
8
+       if (installer.fileExists(folder + "/components.xml")) 
9
        {                           
10
            update=true;
11
+           // remove old one
12
+           // https://stackoverflow.com/questions/46455360/workaround-for-qt-installer-framework-not-overwriting-existing-installation
13
+           QMessageBox.question("question","Uninstall","I will now uninstall the previous version of avidemux VC++" ,  QMessageBox.Yes);               
14
+           if (installer.fileExists(folder + "/scripts/auto_uninstall.js")) 
15
+               installer.execute(folder+"/Uninstall Avidemux VC++ 64bits.exe", "--script="+folder+"/scripts/auto_uninstall.js");           
16
+            else
17
+               installer.execute(folder+"/Uninstall Avidemux VC++ 64bits.exe");
18
        }        
19
 
20
         installer.setDefaultPageVisible(QInstaller.TargetDirectory, !update);
21
         installer.setDefaultPageVisible(QInstaller.ComponentSelection, !update);
22
         installer.setDefaultPageVisible(QInstaller.LicenseCheck, !update);
23
+       /*
24
         if (systemInfo.productType === "windows")
25
             installer.setDefaultPageVisible(QInstaller.StartMenuSelection, !update);
26
+           */
27
         installer.setDefaultPageVisible(QInstaller.ReadyForInstallation, false);
28
     }
29
 }
30
avidemux_2.7.3.tar.gz/avidemux/winInstaller/qtifw/split.bash -> avidemux_2.7.4.tar.gz/avidemux/winInstaller/qtifw/split.bash Changed
16
 
1
@@ -1,4 +1,5 @@
2
 #/bin/bash
3
+export bash_path=$(cygpath -ua $(dirname $0))
4
 export src_path=`cygpath -u $1`
5
 export run_path="packages/org.avidemux.run/data/"
6
 export dev_path="packages/org.avidemux.dev/data/" 
7
@@ -16,7 +17,7 @@
8
 echo "Copying"
9
 
10
 cp -Rap $src_path/* $run_path/
11
-
12
+cp -Rap $bash_path/packages/org.avidemux.run/data/scripts  $run_path/
13
 echo "Moving"
14
 mv $run_path/include $dev_path
15
 mv $run_path/*.lib $dev_path
16
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/include/ADM_misc.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/include/ADM_misc.h Changed
9
 
1
@@ -33,6 +33,7 @@
2
 //
3
 ADM_CORE6_EXPORT uint64_t           ADM_getSecondsSinceEpoch(void);
4
 ADM_CORE6_EXPORT const char        *ADM_epochToString(uint64_t epoch);
5
+ADM_CORE6_EXPORT const std::string  &ADM_getTimeDateAsString(const char *format=NULL);
6
 
7
 #ifdef HAVE_GETTIMEOFDAY
8
    #include <sys/time.h>
9
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/include/ADM_win32.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/include/ADM_win32.h Changed
10
 
1
@@ -8,7 +8,7 @@
2
 ADM_CORE6_EXPORT uint8_t win32_netInit(void);
3
 int shutdown_win32(void);
4
 ADM_CORE6_EXPORT bool getWindowsVersion(char* version);
5
-ADM_CORE6_EXPORT void redirectStdoutToFile(void);
6
+ADM_CORE6_EXPORT void redirectStdoutToFile(const char *filename);
7
 
8
 int ansiStringToWideChar(const char *ansiString, int ansiStringLength, wchar_t *wideCharString);
9
 ADM_CORE6_EXPORT int utf8StringToWideChar(const char *utf8String, int utf8StringLength, wchar_t *wideCharString);
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_debug.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_debug.cpp Changed
13
 
1
@@ -48,7 +48,10 @@
2
 #if _WIN32
3
       printf("[%s] %02d:%02d:%02d-%03d %s", func, (int)hh,(int)mn,(int)seconds,(int)mseconds,p);
4
 #else
5
-    printf("%s [%s] %02d:%02d:%02d-%03d  %s%s",color,func,(int)hh,(int)mn,(int)seconds,(int)mseconds,p,ADM_DEFAULT_COLOR);
6
+    if(isatty(STDOUT_FILENO))
7
+        printf("%s [%s] %02d:%02d:%02d-%03d  %s%s",color,func,(int)hh,(int)mn,(int)seconds,(int)mseconds,p,ADM_DEFAULT_COLOR);
8
+    else
9
+        printf(" [%s] %02d:%02d:%02d-%03d  %s",func,(int)hh,(int)mn,(int)seconds,(int)mseconds,p);
10
 #endif
11
 }
12
 
13
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_fileio.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_fileio.cpp Changed
18
 
1
@@ -54,15 +54,7 @@
2
 {
3
    return fwrite(ptr,size,n,sstream);
4
 }
5
-/**
6
-    \fn ADM_eraseFile
7
-*/
8
-uint8_t ADM_eraseFile(const char *file)
9
-{
10
-    if(!unlink(file))
11
-        return true;
12
-    return false;
13
-}
14
+
15
 /**
16
     \fn ADM_fileSize
17
     \brief return filesize, -1 on error
18
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_folder_linux.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_folder_linux.cpp Changed
9
 
1
@@ -132,7 +132,6 @@
2
 
3
 void ADM_initBaseDir(int argc, char *argv[])
4
 {
5
-   char *home = NULL;
6
    const char* homeEnv = getenv("HOME");
7
 
8
    if (!homeEnv)
9
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_folder_unix.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_folder_unix.cpp Changed
41
 
1
@@ -68,6 +68,15 @@
2
    return fopen(file, mode);
3
 }
4
 
5
+/**
6
+    \fn ADM_eraseFile
7
+*/
8
+uint8_t ADM_eraseFile(const char *file)
9
+{
10
+    if(!unlink(file))
11
+        return true;
12
+    return false;
13
+}
14
 
15
 /*----------------------------------------
16
       Create a directory
17
@@ -118,9 +127,12 @@
18
    DIR *dir;
19
    struct dirent *direntry;
20
    int dirmax = 0, len;
21
-   int extlen = strlen(ext);
22
+   int extlen = strlen(ext)+1;
23
+    ADM_assert(extlen>1);
24
 
25
-   ADM_assert(extlen);
26
+    char *dotted=(char *)admAlloca(extlen+1);
27
+    strcpy(dotted+1,ext);
28
+    dotted[0]='.';
29
 
30
    const char *base2 = base;
31
 
32
@@ -144,7 +156,7 @@
33
 
34
        int xbase = len - extlen;
35
 
36
-       if (memcmp(d_name + xbase, ext, extlen))
37
+       if (memcmp(d_name + xbase, dotted, extlen))
38
        {
39
            printf("ignored: %s\n", d_name);
40
            continue;
41
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_folder_win32.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_folder_win32.cpp Changed
24
 
1
@@ -354,5 +354,22 @@
2
     return str.substr(idx+1);
3
 }
4
 
5
+/**
6
+    \fn ADM_eraseFile
7
+    \brief utf8-capable unlink(), so that we can use utf8 string even on win32
8
+*/
9
+uint8_t ADM_eraseFile(const char *file)
10
+{
11
+    int fileNameLength = utf8StringToWideChar(file, -1, NULL);
12
+    wchar_t *wcFile = new wchar_t[fileNameLength];
13
+
14
+    utf8StringToWideChar(file, -1, wcFile);
15
+
16
+    bool r = DeleteFileW(wcFile);
17
+    delete [] wcFile;
18
+    if(!r)
19
+        return 0;
20
+    return 1;
21
+}
22
 
23
 // EOF
24
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_memcpy.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_memcpy.cpp Changed
10
 
1
@@ -17,8 +17,6 @@
2
 */
3
 uint8_t ADM_InitMemcpy(void)
4
 {
5
-  uint64_t          t;
6
-
7
 #undef memcpy
8
         myAdmMemcpy=memcpy;
9
    return 1;
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_memsupport.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_memsupport.cpp Changed
13
 
1
@@ -36,11 +36,6 @@
2
 #undef free
3
 #undef realloc
4
 
5
-static uint32_t ADM_consumed = 0;
6
-static uint32_t ADM_maxConsumed = 0;
7
-static admMutex memAccess("MemAccess");
8
-static int doMemStat = 0;
9
-
10
 static void *ADM_aligned_alloc(size_t size);
11
 static void ADM_aligned_free(void *ptr);
12
 static void *ADM_aligned_memalign(size_t align,size_t size);
13
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_misc.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_misc.cpp Changed
29
 
1
@@ -304,4 +304,27 @@
2
    return (system("shutdown -P 0") == 0);
3
 #endif
4
 }
5
+
6
+
7
+/**
8
+ * 
9
+ * @return 
10
+ */
11
+const std::string &ADM_getTimeDateAsString(const char *format)
12
+{    
13
+    static std::string text; // not thread safe...
14
+    char timestamp[32];
15
+    uint64_t ss=ADM_getSecondsSinceEpoch();
16
+    time_t tme=(time_t)ss;
17
+    struct tm *ct;
18
+    ct=localtime(&tme);
19
+    size_t l=strftime(timestamp,32,format? format : "%F %H%M%S",ct);
20
+    if(l)
21
+        text=std::string(timestamp);
22
+    else
23
+        text=std::string("UNKNOWN");
24
+    return text;
25
+}
26
+
27
+
28
 //EOF
29
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_win32.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_win32.cpp Changed
45
 
1
@@ -38,23 +38,28 @@
2
 {
3
 void gettimeofday(struct timeval *p, TIMZ *tz);
4
 }
5
-
6
-void gettimeofday(struct timeval *p, TIMZ *tz)
7
+// https://stackoverflow.com/questions/10905892/equivalent-of-gettimeday-for-windows
8
+void gettimeofday(struct timeval * tp, TIMZ * tzp)
9
 {
10
-    unsigned long int sec;
11
-    SYSTEMTIME  tme;
12
-
13
-    GetSystemTime(&tme);
14
-
15
-    sec=tme.wSecond;
16
-    sec+=60*tme.wMinute;
17
-    sec+=60*60*tme.wHour;
18
-
19
-    p->tv_sec=sec;
20
-    p->tv_usec=tme.wMilliseconds*1000;
21
-
22
-    return;
23
+    // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's
24
+    // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC)
25
+    // until 00:00:00 January 1, 1970 
26
+    static const uint64_t EPOCH = ((uint64_t)116444736000000000ULL);
27
+
28
+    SYSTEMTIME  system_time;
29
+    FILETIME    file_time;
30
+    uint64_t    time;
31
+
32
+    GetSystemTime(&system_time);
33
+    SystemTimeToFileTime(&system_time, &file_time);
34
+    time = ((uint64_t)file_time.dwLowDateTime);
35
+    time += ((uint64_t)file_time.dwHighDateTime) << 32;
36
+
37
+    tp->tv_sec = (long)((time - EPOCH) / 10000000L);
38
+    tp->tv_usec = (long)(system_time.wMilliseconds * 1000);
39
+    return ;
40
 }
41
+
42
 #endif    // HAVE_GETTIMEOFDAY
43
 
44
 int getpriority(int which, int who)
45
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_win32_mingw.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_win32_mingw.cpp Changed
18
 
1
@@ -10,7 +10,7 @@
2
 #include "ADM_misc.h"
3
 #include <algorithm>
4
 
5
-void redirectStdoutToFile(void)
6
+void redirectStdoutToFile(const char *logFile)
7
 {
8
     // Don't redirect stdout and stderr if SDL hasn't already hijacked it.
9
     // This allows us to optionally compile all EXEs as console applications
10
@@ -40,7 +40,6 @@
11
     remove(stderrPath);
12
 
13
     // Redirect output to log file in the user's profile directory
14
-    const char* logFile = "admlog.txt";
15
     const char* logDir = ADM_getLogDir();
16
     char *logPath = new char[strlen(logDir) + strlen(logFile) + 1];
17
 
18
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/ADM_win32_vs.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/ADM_win32_vs.cpp Changed
37
 
1
@@ -9,7 +9,7 @@
2
 #include "ADM_win32.h"
3
 #include "ADM_misc.h"
4
 #include <algorithm>
5
-void redirectStdoutToFile(void)
6
+void redirectStdoutToFile(const char *logFile)
7
 {
8
     // Don't redirect stdout and stderr if SDL hasn't already hijacked it.
9
     // This allows us to optionally compile all EXEs as console applications
10
@@ -39,10 +39,21 @@
11
     remove(stderrPath);
12
 
13
     // Redirect output to log file in the user's profile directory
14
-    const char* logFile = "admlog.txt";
15
-
16
+ #if 1
17
     std::string filePath=std::string(ADM_getLogDir())+std::string(logFile);
18
-
19
-    freopen(filePath.c_str(),"w",stdout);
20
- 
21
+#else
22
+    std::string filePath=std::string("f:\\tmp\\élém\\")+std::string(logFile);
23
+#endif
24
+
25
+    int length = utf8StringToWideChar(filePath.c_str(), -1, NULL);
26
+    wchar_t *filePath2 = new wchar_t[length+1];
27
+    wchar_t mode[] = L"w";
28
+    utf8StringToWideChar(filePath.c_str(), -1, filePath2);
29
+    FILE *newFD=_wfreopen(filePath2, mode,stdout);
30
+    delete[] filePath2;
31
+    if (!newFD)
32
+    {
33
+        assert(0);
34
+        ADM_assert(0);
35
+    }
36
 }
37
avidemux_2.7.3.tar.gz/avidemux_core/ADM_core/src/TLK_clock.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_core/src/TLK_clock.cpp Changed
9
 
1
@@ -36,7 +36,6 @@
2
 
3
 static bool inited=false;
4
 static struct timeval _itimev;
5
-static uint32_t getAbsTime( void );
6
 
7
 #ifndef _WIN32
8
 #include <unistd.h>
9
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/include/ADM_audioAccessFileAACADTS.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/include/ADM_audioAccessFileAACADTS.h Changed
11
 
1
@@ -36,8 +36,8 @@
2
 {
3
 protected:
4
                 FILE            *_fd;
5
+                int             _offset;
6
                 uint64_t        payloadSize;
7
-                uint64_t        fileSize;
8
                 uint64_t        durationUs;
9
                 bool            inited;
10
                 audioClock      *clock;
11
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioAccessFileAACADTS.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioAccessFileAACADTS.cpp Changed
52
 
1
@@ -26,12 +26,13 @@
2
 {
3
     aac=new  ADM_adts2aac();    
4
     // ----- extract data frequency etc.. to initialize clock
5
+    fseek(_fd,_offset,SEEK_SET);
6
 #define PROBE_SIZE 8000
7
     uint8_t buffer[PROBE_SIZE+1];
8
     int n=fread(buffer,1,PROBE_SIZE,_fd);
9
     if(n<=0) return false;
10
-    fseek(_fd,0,SEEK_SET);
11
-    ADM_info("Probing AAC/ADTS with %d bytes\n",n);
12
+    fseek(_fd,_offset,SEEK_SET);
13
+    ADM_info("Probing AAC/ADTS with %d bytes at offset %d\n",n,_offset);
14
     if(!aac->addData(n,buffer)) return false;
15
     if(ADM_adts2aac::ADTS_OK!=aac->getAACFrame(NULL,NULL))
16
     {
17
@@ -59,12 +60,12 @@
18
     clock= new audioClock(headerInfo.frequency);
19
     
20
     // ----- build time map
21
-    fseek(_fd,0,SEEK_SET);
22
-    adtsIndexer dexer(_fd,headerInfo.frequency,headerInfo.channels);
23
+    fseek(_fd,_offset,SEEK_SET);
24
+    adtsIndexer dexer(_fd,_offset,headerInfo.frequency,headerInfo.channels);
25
     ADM_info("Indexing adts/aac file\n");
26
     dexer.index(seekPoints );  
27
     ADM_info("found %d seekPoints\n",seekPoints.size());
28
-    fseek(_fd,0,SEEK_SET);
29
+    fseek(_fd,_offset,SEEK_SET);
30
     payloadSize=dexer.getPayloadSize();
31
     // 
32
     // compute duration
33
@@ -88,13 +89,11 @@
34
 
35
 ADM_audioAccessFileAACADTS::ADM_audioAccessFileAACADTS(const char *fileName,int offset)
36
 {
37
-        fileSize=ADM_fileSize(fileName)-offset;
38
-        _fd=ADM_fopen(fileName,"rb");
39
-        ADM_assert(_fd);
40
-        clock=NULL;
41
-        inited=init();;
42
-        
43
-        
44
+    _offset=(offset>0)? offset : 0;
45
+    _fd=ADM_fopen(fileName,"rb");
46
+    ADM_assert(_fd);
47
+    clock=NULL;
48
+    inited=init();
49
 }
50
 /**
51
     \fn
52
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioAccessFileAACADTS_indexer.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioAccessFileAACADTS_indexer.cpp Changed
78
 
1
@@ -13,7 +13,7 @@
2
  *                                                                         *
3
  ***************************************************************************/
4
 
5
-#define AAC_SEEK_PERIOD (10000000LL) // 10 sec
6
+#define AAC_SEEK_PERIOD (200000LL) // 0.2 sec
7
 
8
 /**
9
  * \class adtsIndexer
10
@@ -23,9 +23,10 @@
11
 {
12
 public:
13
     
14
-            adtsIndexer(FILE *fd,int fq,int chan)
15
+            adtsIndexer(FILE *fd,int off,int fq,int chan)
16
             {
17
                 f=fd;
18
+                startOffset=off;
19
                 this->fq=fq;
20
                 this->channels=chan;
21
                 payload=0;
22
@@ -42,6 +43,7 @@
23
     
24
 protected:
25
     FILE *f;
26
+    int  startOffset;
27
     int  fq;
28
     int  channels;
29
     int  payload;
30
@@ -55,9 +57,7 @@
31
  */
32
 bool adtsIndexer::index(std::vector<aacAdtsSeek>& seekPoints)
33
 {
34
-#define CHUNK_SIZE (5*1024)
35
-   uint8_t  buffer[CHUNK_SIZE];
36
-   int      fileOffset=0;;
37
+   uint8_t  buffer[ADTS_MAX_AAC_FRAME_SIZE];
38
    uint64_t lastPoint=0;
39
    int      len;
40
    
41
@@ -67,23 +67,24 @@
42
    int offset;
43
 
44
    start.dts=0;
45
-   start.position=0;
46
+   start.position=startOffset;
47
    seekPoints.push_back(start); // initial start
48
    
49
    while(1)
50
    {
51
        ADM_adts2aac::ADTS_STATE s=aac.getAACFrame(&len,buffer,&offset);
52
+       offset+=startOffset;
53
        switch(s)
54
        {
55
            case ADM_adts2aac::ADTS_OK:
56
             {
57
                uint64_t currentPoint=clk.getTimeUs();
58
-               if( (currentPoint-lastPoint)>AAC_SEEK_PERIOD) // one seek point every 10 s
59
+               if( (currentPoint-lastPoint)>AAC_SEEK_PERIOD) // one seek point every 200 ms
60
                {
61
                    start.dts=currentPoint;
62
                    start.position=offset;
63
                    seekPoints.push_back(start);
64
-                   lastPoint=currentPoint;   
65
+                   lastPoint=currentPoint;
66
                }
67
                 payload+=len;
68
                 clk.advanceBySample(1024);
69
@@ -100,7 +101,7 @@
70
            case ADM_adts2aac::ADTS_MORE_DATA_NEEDED:
71
            {
72
               
73
-               int n=fread(buffer,1,CHUNK_SIZE,f);
74
+               int n=fread(buffer,1,ADTS_MAX_AAC_FRAME_SIZE,f);
75
                if(n<=0)
76
                    return true;
77
                if(!aac.addData(n,buffer))
78
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioIdentify.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioIdentify.cpp Changed
71
 
1
@@ -165,7 +165,6 @@
2
              }
3
           }
4
 
5
-       uint32_t length;
6
        wRead32(t32);
7
        ADM_info(" %lu bytes data \n", totalSize);
8
        info.blockalign=1;
9
@@ -317,35 +316,52 @@
10
  */
11
 static bool idAAACADTS(int bufferSize,const uint8_t *data,WAVHeader &info,uint32_t &offset)
12
 {
13
+    int firstOffset,expected,sync=0;
14
     ADM_adts2aac aac;
15
+    uint8_t out[ADTS_MAX_AAC_FRAME_SIZE];
16
     const uint8_t *start=data;
17
     const uint8_t *end=data+bufferSize;
18
+    offset=firstOffset=expected=0;
19
     while(start<end)
20
     {
21
         int incoming=500;
22
-        int outLen;
23
+        int off,outLen=0;
24
         if(start+500>end) incoming=end-start;
25
-        ADM_adts2aac::ADTS_STATE state=aac.convert2(incoming,start,&outLen,NULL);
26
+        bool r=false;
27
+        if(incoming>0)
28
+            r=aac.addData(incoming,start);
29
+        ADM_adts2aac::ADTS_STATE state=aac.getAACFrame(&outLen,out,&off);
30
         start+=incoming;
31
         switch(state)
32
         {
33
-            case ADM_adts2aac::ADTS_ERROR: 
34
+            case ADM_adts2aac::ADTS_ERROR:
35
+                    return false;
36
+            case ADM_adts2aac::ADTS_MORE_DATA_NEEDED:
37
+                    if(r) continue;
38
                     return false;
39
-                    break;
40
-            case ADM_adts2aac::ADTS_MORE_DATA_NEEDED: 
41
-                    continue;
42
-                    break;
43
             case ADM_adts2aac::ADTS_OK:
44
                     // Got sync
45
+                    if(!sync)
46
+                        firstOffset=off;
47
+                    else if(off>expected)
48
+                    {
49
+                        ADM_warning("Skipped at least %d bytes between frames, assuming a false positive.\n",off-expected);
50
+                        return false;
51
+                    }
52
+                    sync++;
53
+                    expected=off+outLen+9; // ADTS header max size
54
+                    ADM_info("Sync %d at offset %d, frame size %d\n",sync,off,outLen);
55
+                    if(sync<3)
56
+                        continue;
57
                     info.encoding=WAV_AAC;
58
                     info.channels=aac.getChannels();
59
                     info.blockalign=0;
60
                     info.bitspersample=16;
61
                     info.byterate=128000>>3;
62
                     info.frequency=aac.getFrequency();
63
-                    ADM_info("Detected as AAC, fq=%d, channels=%d\n",info.frequency,info.channels);
64
+                    offset=firstOffset;
65
+                    ADM_info("Detected as AAC, fq=%d, channels=%d, offset=%d\n",info.frequency,info.channels,offset);
66
                     return true;
67
-                    break;
68
             default:
69
                 ADM_assert(0);
70
                 break;
71
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioWriteAAC.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioWriteAAC.cpp Changed
19
 
1
@@ -97,10 +97,16 @@
2
     {
3
         if(l>0)
4
         {
5
-            profileMinus1=d[0]>>5;
6
+            profileMinus1=d[0]>>3;
7
             if(profileMinus1)
8
                 profileMinus1--;
9
             ADM_info("AAC profile minus 1= %d\n",profileMinus1);
10
+            int fqIdxFromConfig=((d[0]&7)<<1)+(d[1]>>7);
11
+            if(fqIdxFromConfig<13 && samplingFrequencyIndex!=fqIdxFromConfig) // explicit frequency not handled
12
+            {
13
+                ADM_warning("Using frequency index from extradata = %d (header says %d).\n",fqIdxFromConfig,samplingFrequencyIndex);
14
+                samplingFrequencyIndex=fqIdxFromConfig;
15
+            }
16
         }else
17
             ADM_warning("No valid AAC extra data");
18
     }else
19
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioXiphUtils.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudio/src/ADM_audioXiphUtils.cpp Changed
16
 
1
@@ -153,7 +153,6 @@
2
  */
3
 int admExtraData2xiph(int l, uint8_t *src, uint8_t *dstOrg)
4
 {
5
-    int outLen=1;
6
     int length[3];
7
     uint8_t *dst=dstOrg;
8
     ADM_info("insize=%d\n",l);
9
@@ -191,4 +190,4 @@
10
     
11
     
12
     
13
-}
14
\ No newline at end of file
15
+}
16
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudioParser/include/ADM_aacadts.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudioParser/include/ADM_aacadts.h Changed
11
 
1
@@ -21,7 +21,8 @@
2
 /**
3
     \class ADM_adts2aac
4
 */
5
-#define ADTS_BUFFER_SIZE 16000
6
+#define ADTS_MAX_AAC_FRAME_SIZE 8192
7
+#define ADTS_BUFFER_SIZE (2*ADTS_MAX_AAC_FRAME_SIZE)
8
 
9
 
10
 class ADM_AUDIOPARSER6_EXPORT ADM_adts2aac
11
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_aacadts.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_aacadts.cpp Changed
44
 
1
@@ -176,11 +176,11 @@
2
     int nbFrames=0;
3
     bool crc=false;
4
     int match;
5
-    for( p=(buffer.at(tail));p<(buffer.at(head-2));p++)
6
+    for( p=(buffer.at(tail));p<(buffer.at(head-6));p++)
7
     {
8
-        if(p[0]!=0xff || ((p[1]&0xf0)!=0xf0))
9
+        if(p[0]!=0xff || (p[1]&0xf0)!=0xf0 || p[1]&6)
10
             continue;
11
-        
12
+
13
         match=p-buffer.at(0); // offset of syncword
14
         packetLen=((p[3]&0x3)<<11)+(p[4]<<3)+(p[5]>>5);
15
         nbFrames=1+(p[6]&3);
16
@@ -198,15 +198,15 @@
17
             found=true;
18
             break;
19
         }
20
-        if(match+packetLen+2>head && match+packetLen!=head)
21
+        if(match+packetLen+3>head && match+packetLen!=head)
22
         {
23
             aprintf("[ADTS]** not enough data **\n");
24
             return ADTS_MORE_DATA_NEEDED;
25
         }
26
         // do we have sync at the end ?
27
-        if(p[packetLen]!=0xff)
28
+        if(p[packetLen]!=0xff || (p[packetLen+1]&0xf0)!=0xf0 || p[packetLen+1]&6)
29
         {
30
-            aprintf("[ADTS] no ff marker at the end\n");
31
+            aprintf("[ADTS] no syncword at the end or layer!=0\n");
32
             continue;
33
         }
34
         aprintf("[ADTS] End marker found\n");
35
@@ -217,7 +217,7 @@
36
     if(found==false)
37
     {
38
         aprintf("[ADTS]No sync\n");
39
-        tail=head-1;
40
+        tail=head-6;
41
         return ADTS_MORE_DATA_NEEDED;
42
     }
43
     if(!hasExtra)
44
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_aacinfo.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_aacinfo.cpp Changed
36
 
1
@@ -21,6 +21,11 @@
2
 
3
 
4
 #include "ADM_default.h"
5
+
6
+extern "C" {
7
+#include "libavcodec/avcodec.h"
8
+}
9
+
10
 #include <math.h>
11
 #include "ADM_getbits.h"
12
 #include "ADM_aacinfo.h"
13
@@ -73,7 +78,11 @@
14
     {
15
         return false;
16
     }
17
-    getBits bits(size,data); // get a copy, needed to extract extra data
18
+    int paddedSize=size+AV_INPUT_BUFFER_PADDING_SIZE;
19
+    uint8_t *padded=new uint8_t[paddedSize];
20
+    memset(padded,0,paddedSize);
21
+    memcpy(padded,data,size);
22
+    getBits bits(size,padded); // get a copy, needed to extract extra data
23
     int audioObjectType=getAudioObjectType(&bits);
24
     int fq=getSamplingFrequency(&bits);
25
     int channelConfiguration=bits.get(4);
26
@@ -138,6 +147,9 @@
27
         }
28
     }
29
 
30
+    delete [] padded;
31
+    padded=NULL;
32
+
33
     if(!channelConfiguration)
34
     {
35
         ADM_error("AOT Specific Config not handled!\n");
36
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_dcainfo.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_dcainfo.cpp Changed
10
 
1
@@ -51,7 +51,7 @@
2
 {
3
 uint8_t *end=buf+len-4-DTS_HEADER_SIZE;
4
 uint8_t *cur=buf-1;
5
-uint32_t size,len1,len2,flags,sr,framesize=0,index,nbBlocks;
6
+uint32_t len1,len2,flags,framesize=0,index,nbBlocks;
7
              // Assume 16 bits big endian
8
             // Search for 7F FE 80 01 as sync start
9
             *syncoff=0;
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_eac3info.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreAudioParser/src/ADM_eac3info.cpp Changed
73
 
1
@@ -21,10 +21,14 @@
2
 /**
3
     \fn ADM_EAC3GetInfo
4
 */
5
-bool ADM_EAC3GetInfo(const uint8_t *buf, uint32_t len, uint32_t *syncoff, ADM_EAC3_INFO *info, bool plainAC3)
6
+bool ADM_EAC3GetInfo(const uint8_t *data, uint32_t len, uint32_t *syncoff, ADM_EAC3_INFO *info, bool plainAC3)
7
 {
8
     uint32_t of=0;
9
     *syncoff=0;
10
+    uint8_t *buf=new uint8_t[len+AV_INPUT_BUFFER_PADDING_SIZE];
11
+    memset(buf,0,len+AV_INPUT_BUFFER_PADDING_SIZE);
12
+    memcpy(buf,data,len);
13
+#define CLEANUP delete [] buf; buf=NULL; av_free(hdr); hdr=NULL;
14
     // printf("\n Syncing on %d \n",len);
15
     // Search for startcode
16
     // 0x0b 0x77
17
@@ -33,20 +37,20 @@
18
         if(len<7)
19
         {
20
             ADM_warning("Not enough info to find a52 syncword\n");
21
+            delete [] buf;
22
+            buf=NULL;
23
             return false;
24
         }
25
-        if( *buf!=0x0b || *(buf+1)!=0x77)
26
+        if(*(buf+of)!=0x0b || *(buf+of+1)!=0x77)
27
         {
28
             len--;
29
-            buf++;
30
             of++;
31
             continue;
32
         }
33
         AC3HeaderInfo *hdr=NULL;
34
-        if(avpriv_ac3_parse_header(&hdr,buf,len)<0)
35
+        if(avpriv_ac3_parse_header(&hdr,buf+of,len)<0)
36
         {
37
             len--;
38
-            buf++;
39
             of++;
40
             ADM_info("Sync failed... continuing\n");
41
             continue;
42
@@ -54,15 +58,13 @@
43
         if(!plainAC3 && hdr->bitstream_id<=10) // this is not EAC3 but plain ac3
44
         {
45
             ADM_info("Bitstream ID = %d: not EAC3\n",hdr->bitstream_id);
46
-            av_free(hdr);
47
-            hdr=NULL;
48
+            CLEANUP
49
             return false;
50
         }
51
         if(plainAC3 && hdr->bitstream_id>10) // this is not AC3 but EAC3
52
         {
53
             ADM_info("Bitstream ID = %d: not AC3\n",hdr->bitstream_id);
54
-            av_free(hdr);
55
-            hdr=NULL;
56
+            CLEANUP
57
             return false;
58
         }
59
 //            printf("Sync found at offset %"PRIu32"\n",of);
60
@@ -72,9 +74,10 @@
61
         info->channels=hdr->channels;
62
         info->frameSizeInBytes=hdr->frame_size;
63
         info->samples=265*6; // ??
64
-        av_free(hdr);
65
-        hdr=NULL;
66
+        CLEANUP
67
         return true;
68
     }
69
+    delete [] buf;
70
+    buf=NULL;
71
     return true;
72
 }
73
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreDemuxerMpeg/include/ADM_indexFile.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreDemuxerMpeg/include/ADM_indexFile.h Changed
10
 
1
@@ -24,7 +24,7 @@
2
     \class indexFile
3
     \brief Read a index file easily
4
 */
5
-#define ADM_INDEX_FILE_VERSION 5
6
+#define ADM_INDEX_FILE_VERSION 6
7
 #define ADM_INDEX_BUFFER (20*1024)
8
 /**
9
     \class dmxToken
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreDemuxerMpeg/src/dmx_io.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreDemuxerMpeg/src/dmx_io.cpp Changed
14
 
1
@@ -365,7 +365,11 @@
2
         ADM_assert(_off>=_head);
3
         ADM_assert(_off<=_tail);
4
 
5
-        if(_head>=_size-1) return 0;
6
+        if(_head>=_size-1)
7
+        {
8
+            memset(buffer,0,len);
9
+            return 0;
10
+        }
11
 
12
 // Check we do not go out of bound
13
         if(_off+len>=_size)
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreImage/include/ADM_imageFlags.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreImage/include/ADM_imageFlags.h Changed
21
 
1
@@ -17,9 +17,10 @@
2
 
3
 
4
 #define AVI_KEY_FRAME   0x10
5
-#define AVI_B_FRAME        0x4000   
6
+#define AVI_B_FRAME     0x4000
7
 #define AVI_P_FRAME     0x0
8
-#define AVI_FRAME_TYPE_MASK (AVI_KEY_FRAME+AVI_B_FRAME+AVI_P_FRAME)
9
+#define AVI_NON_REF_FRAME 0x400
10
+#define AVI_FRAME_TYPE_MASK (AVI_KEY_FRAME+AVI_B_FRAME+AVI_P_FRAME+AVI_NON_REF_FRAME)
11
 
12
 /**
13
     For demuxers, it is the field type/frame
14
@@ -32,4 +33,4 @@
15
 #define AVI_STRUCTURE_TYPE_MASK (AVI_TOP_FIELD+AVI_BOTTOM_FIELD+AVI_FIELD_STRUCTURE)
16
 
17
 #define AVI_ERR_FRAME   0x8888
18
-#endif
19
\ No newline at end of file
20
+#endif
21
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreImage/src/ADM_image.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreImage/src/ADM_image.cpp Changed
10
 
1
@@ -48,6 +48,8 @@
2
         flags=0;
3
         _aspect=ADM_ASPECT_1_1;
4
         imgCurNb++;
5
+        if(imgCurNb>imgMaxNb)
6
+            imgMaxNb=imgCurNb;
7
         _noPicture=0;
8
         _colorspace=ADM_COLOR_YV12;
9
         Pts=0;
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreImage/src/ADM_imageUtils.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreImage/src/ADM_imageUtils.cpp Changed
98
 
1
@@ -151,10 +151,6 @@
2
 {
3
     int step=w/4;
4
     int left=w-4*step;
5
-    uint8_t *xsrc=src;
6
-    uint8_t *xdst=dst;
7
-    uint8_t *xdst2=dst2;
8
-
9
 
10
     for(int y=0;y<h;y++)
11
     {
12
@@ -208,7 +204,6 @@
13
 {
14
         int mod8=w>>3;
15
         int leftOver=w&7;
16
-        int x;
17
         for(int y=0;y<h;y++)
18
         {
19
                 adm_uv_to_nv12_mmx(srcu,srcv,dst,mod8);
20
@@ -254,7 +249,6 @@
21
 {
22
         int mod8=w>>3;
23
         int leftOver=w&7;
24
-        int x;
25
         for(int y=0;y<h;y++)
26
         {
27
                 uint8_t *ssrc=src;
28
@@ -355,16 +349,13 @@
29
  */
30
 bool    ADMImage::convertToNV12(uint8_t *yData, uint8_t *uvData, int strideY, int strideUV)
31
 {
32
-        // Y
33
-        int w=_width;
34
-        int h=_height;
35
         int sstride=GetPitch(PLANAR_Y);
36
         int dstride=strideY;
37
         uint8_t *src=GetReadPtr(PLANAR_Y);
38
         uint8_t *dst=yData;
39
         for(int y=0;y<_height;y++)
40
         {
41
-            memcpy(dst,src,w);
42
+            memcpy(dst,src,_width);
43
             src+=sstride;
44
             dst+=dstride;
45
         }
46
@@ -466,10 +457,10 @@
47
     uint8_t dst2[50],dst2b[50];
48
 
49
     for(int i=0;i<50;i++) src[i]=(i*0x55) ^( i+1);
50
-    memset(dst,50,0);
51
-    memset(dst2,50,0);
52
-    memset(dstb,50,0);
53
-    memset(dst2b,50,0);
54
+    memset(dst,0,50);
55
+    memset(dst2,0,50);
56
+    memset(dstb,0,50);
57
+    memset(dst2b,0,50);
58
 
59
 
60
 #define ROW_SIZE 23
61
@@ -495,10 +486,10 @@
62
     uint8_t dst2[50],dst2b[50];
63
 
64
     for(int i=0;i<50;i++) src[i]=(i*0x55) ^( i+1);
65
-    memset(dst,50,0);
66
-    memset(dst2,50,0);
67
-    memset(dstb,50,0);
68
-    memset(dst2b,50,0);
69
+    memset(dst,0,50);
70
+    memset(dst2,0,50);
71
+    memset(dstb,0,50);
72
+    memset(dst2b,0,50);
73
 
74
 
75
 
76
@@ -527,8 +518,8 @@
77
     uint8_t dst2[SRC_SIZE];
78
 
79
     for(int i=0;i<SRC_SIZE;i++) src[i]=i;
80
-    memset(dst,SRC_SIZE,0);
81
-    memset(dst2,SRC_SIZE,0);
82
+    memset(dst,0,SRC_SIZE);
83
+    memset(dst2,0,SRC_SIZE);
84
 
85
 
86
     yuv444_MMX(src,dst,ROW_SIZE,1,ROW_SIZE,4*ROW_SIZE);
87
@@ -563,8 +554,8 @@
88
           srcu[i]=i;
89
           srcv[i]=0x80^i;
90
       }
91
-      memset(dst,SRC_SIZE,0);
92
-      memset(dst2,SRC_SIZE,0);
93
+      memset(dst,0,SRC_SIZE);
94
+      memset(dst2,0,SRC_SIZE);
95
 
96
 
97
       uv_to_nv12_mmx(ROW_SIZE,1,ROW_SIZE>>1,ROW_SIZE>>1,srcu,srcv,ROW_SIZE,dst2);
98
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreImage/src/ADM_imageUtils_asm.asm -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreImage/src/ADM_imageUtils_asm.asm Changed
34
 
1
@@ -99,7 +99,7 @@
2
         add            dst2q,4
3
         sub            w4d,1
4
         jnz             .again
5
-        ret
6
+        RET
7
 ;
8
 ;
9
 ;
10
@@ -134,7 +134,7 @@
11
        add            dstvq,8
12
        sub            w8q,1
13
        jnz            .nv12_again
14
-       ret
15
+       RET
16
 
17
 ;yuv444_MMX
18
 ;  xdst=dst;
19
@@ -189,7 +189,7 @@
20
             add            dstq,8
21
             sub            w8q,1
22
             jnz            .again3
23
-            ret
24
+            RET
25
 
26
 
27
 ;eof
28
@@ -234,4 +234,4 @@
29
   add            vq,8
30
   sub            w8q,1
31
   jnz            .nv12
32
-  ret
33
+  RET
34
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreImage/src/ADM_pp.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreImage/src/ADM_pp.cpp Changed
10
 
1
@@ -190,7 +190,7 @@
2
         {
3
               
4
                 uint8_t *src,*dst;
5
-                uint32_t stridein,strideout,right;
6
+                uint32_t right;
7
 
8
                 right=ww;
9
                 // Luma
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreJobs/src/ADM_coreJobs.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreJobs/src/ADM_coreJobs.cpp Changed
11
 
1
@@ -149,7 +149,8 @@
2
     {
3
         ADM_info("Bad database version...\n");
4
         dbCleanup();
5
-        unlink(dbFile);
6
+        if(!ADM_eraseFile(dbFile))
7
+            ADM_warning("Could not delete %s\n",dbFile);
8
         if(true==ADM_jobInitializeDb())
9
         {
10
             if(false==dbInit())
11
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreMuxer/src/ADM_coreMuxerFfmpeg.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreMuxer/src/ADM_coreMuxerFfmpeg.cpp Changed
18
 
1
@@ -446,7 +446,7 @@
2
     uint64_t lastVideoDts=0;
3
     uint64_t lastVideoDtsLav=0;
4
     uint64_t videoIncrement;
5
-    bool ret;
6
+    bool ret=true;
7
     uint32_t written=0;
8
     bool result=true;
9
     int missingPts=0;
10
@@ -561,7 +561,6 @@
11
                 WAVHeader *info=a->getInfo();
12
                 if(!info) // no more track
13
                     continue;
14
-                uint32_t fq=info->frequency;
15
 
16
                 while(1)
17
                 {
18
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreSubtitles/src/ADM_subLoader.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreSubtitles/src/ADM_subLoader.cpp Changed
47
 
1
@@ -79,9 +79,10 @@
2
 
3
 
4
 /**
5
- *      \fn updateTiming
6
+ *      \fn updateTiming // unused
7
  *      \brief srt does not provide 'end display' timeing information, make a guess
8
  */
9
+#if 0
10
 static bool updateSrtTiming(ListOfSubtitleLines &lines)
11
 {
12
     int n=lines.size();
13
@@ -96,9 +97,8 @@
14
     if(n)
15
         lines[n-1].stop=lines[n-1].start+HOLD_ON_TIMER;
16
     return true;
17
-    
18
-    
19
 }
20
+#endif
21
 /**
22
  * \fn loadSrt
23
  * @param file
24
@@ -113,7 +113,6 @@
25
         ADM_warning("Cannot open subtitle %s\n,file");
26
         return false;
27
     }
28
-    bool status=true;
29
     char buffer[1024];
30
     SRT_STATE state=STATE_LINENO;
31
     subtitleTextEntry entry;
32
@@ -142,14 +141,12 @@
33
                         if(length<2) 
34
                         { 
35
                             ADM_warning("Inconsistent file\n");
36
-                            status=false;
37
                             break;
38
                         }
39
                         uint64_t start,end;
40
                         if(!splitSrtTiming(buffer,start,end))
41
                         {
42
                              ADM_warning("Inconsistent timing line\n");
43
-                             status=false;
44
                              break;
45
                         }
46
                         entry.start=start;
47
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUI/include/DIA_coreToolkit.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUI/include/DIA_coreToolkit.h Changed
19
 
1
@@ -39,7 +39,7 @@
2
 // Ask for yes/no. Yes will return 1, No will return 0
3
 ADM_COREUI6_EXPORT int             GUI_YesNo(const char *primary, const char *secondary_format, ...);
4
 // About the same as GUI_YesNo, the button will be ok/cancel
5
-ADM_COREUI6_EXPORT int             GUI_Question(const char *alertstring);
6
+ADM_COREUI6_EXPORT int             GUI_Question(const char *alertstring, bool insuppressible=false);
7
 // Give some time to the UI to handle its events
8
 ADM_COREUI6_EXPORT void            GUI_Sleep(uint32_t ms);
9
 // Ask to choose between choice1 and choice2
10
@@ -51,7 +51,7 @@
11
 // Set the ui in silent mode. All popups & questions will be answered with their default value
12
 ADM_COREUI6_EXPORT void            GUI_Quiet(void);
13
 // Is the UI in quiet mode ?
14
-uint8_t            GUI_isQuiet(void);
15
+ADM_COREUI6_EXPORT uint8_t         GUI_isQuiet(void);
16
 //
17
 ADM_COREUI6_EXPORT void            UI_purge(void);
18
 //
19
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUI/include/DIA_coreUI_internal.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUI/include/DIA_coreUI_internal.h Changed
10
 
1
@@ -147,7 +147,7 @@
2
 typedef void            CREATE_GUI_ERROR_HIG(const char *primary, const char *secondary_format);
3
 typedef int             CREATE_GUI_CONFIRMATION_HIG(const char *button_confirm, const char *primary, const char *secondary_format);
4
 typedef int             CREATE_GUI_YESNO(const char *primary, const char *secondary_format);
5
-typedef int             CREATE_GUI_QUESTION(const char *alertstring);
6
+typedef int             CREATE_GUI_QUESTION(const char *alertstring, bool insuppressible);
7
 typedef int             CREATE_GUI_ALTERNATE(const char *title,const char *choice1,const char *choice2);
8
 typedef void            CREATE_GUI_VERBOSE(void);
9
 typedef void            CREATE_GUI_QUIET(void);
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUI/src/DIA_coreToolkit.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUI/src/DIA_coreToolkit.cpp Changed
20
 
1
@@ -129,13 +129,14 @@
2
    return Toolkit->yesno(primary,text);    
3
 }
4
 /**
5
- *     \fn GUI_Question
6
- *  \brief About the same as GUI_YesNo, the button will be ok/cancel
7
+ *  \fn GUI_Question
8
+ *  \brief About the same as GUI_YesNo, the button will be ok/cancel. If the second arg is true,
9
+ *  \      reject the dialog in silent mode / override the message level preference.
10
  */
11
-int             GUI_Question(const char *alertstring)
12
+int             GUI_Question(const char *alertstring, bool insuppressible)
13
 {
14
    ADM_assert(Toolkit);
15
-   return Toolkit->question(alertstring);  
16
+   return Toolkit->question(alertstring,insuppressible);
17
 }
18
 
19
 //
20
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/include/ADM_compressedImage.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/include/ADM_compressedImage.h Changed
9
 
1
@@ -12,6 +12,7 @@
2
 #include "ADM_default.h"
3
 
4
 #define ADM_COMPRESSED_NO_PTS ADM_NO_PTS
5
+#define ADM_COMPRESSED_MAX_DATA_LENGTH (MAXIMUM_SIZE * MAXIMUM_SIZE * 3)
6
 class ADMCompressedImage
7
 {
8
   
9
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/include/ADM_videoInfoExtractor.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/include/ADM_videoInfoExtractor.h Changed
26
 
1
@@ -34,7 +34,12 @@
2
     uint32_t darNum;
3
     uint32_t darDen;
4
     bool     hasStructInfo;
5
+    bool     hasPocInfo;
6
     uint32_t CpbDpbToSkip;
7
+    uint32_t log2MaxFrameNum;
8
+    uint32_t log2MaxPocLsb;
9
+    bool     frameMbsOnlyFlag;
10
+    uint32_t refFrames;
11
 }ADM_SPSInfo;
12
 
13
 /**
14
@@ -64,9 +69,9 @@
15
 ADM_COREUTILS6_EXPORT bool    extractSPSInfo(uint8_t *data, uint32_t len,ADM_SPSInfo *info);
16
 ADM_COREUTILS6_EXPORT bool    extractSPSInfo_mp4Header(uint8_t *data, uint32_t len,ADM_SPSInfo *info);
17
 
18
-ADM_COREUTILS6_EXPORT uint8_t extractH264FrameType(uint32_t nalSize,uint8_t *buffer,uint32_t len,uint32_t *flags,uint32_t *recovery=NULL);
19
+ADM_COREUTILS6_EXPORT uint8_t extractH264FrameType(uint8_t *buffer,uint32_t len,uint32_t *flags,int *pocLsb,ADM_SPSInfo *sps,uint32_t *recovery=NULL);
20
 ADM_COREUTILS6_EXPORT uint8_t extractH265FrameType(uint32_t nalSize,uint8_t *buffer,uint32_t len,uint32_t *flags);
21
-ADM_COREUTILS6_EXPORT uint8_t extractH264FrameType_startCode(uint32_t nalSize,uint8_t *buffer,uint32_t len,uint32_t *flags);
22
+ADM_COREUTILS6_EXPORT uint8_t extractH264FrameType_startCode(uint8_t *buffer,uint32_t len,uint32_t *flags,int *pocLsb,ADM_SPSInfo *sps,uint32_t *recovery=NULL);
23
 ADM_COREUTILS6_EXPORT bool    ADM_getH264SpsPpsFromExtraData(uint32_t extraLen,uint8_t *extra,
24
                                     uint32_t *spsLen,uint8_t **spsData,
25
                                     uint32_t *ppsLen,uint8_t **ppsData); // return a copy of pps/sps extracted
26
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/include/prefs2_list.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/include/prefs2_list.h Changed
14
 
1
@@ -6,9 +6,11 @@
2
 FEATURES_AUDIOBAR_USES_MASTER,     //bool
3
 FEATURES_THREADING_LAVC,   //uint32_t
4
 FEATURES_CPU_CAPS,     //uint32_t
5
+FEATURES_CACHE_SIZE,   //uint32_t
6
 FEATURES_MPEG_NO_LIMIT,    //bool
7
-FEATURES_ALTERNATE_MP3_TAG,    //bool
8
 FEATURES_DXVA2,    //bool
9
+FEATURES_DXVA2_OVERRIDE_BLACKLIST_VERSION,     //bool
10
+FEATURES_DXVA2_OVERRIDE_BLACKLIST_PROFILE,     //bool
11
 FEATURES_VDPAU,    //bool
12
 FEATURES_XVBA,     //bool
13
 FEATURES_LIBVA,    //bool
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_codecType.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_codecType.cpp Changed
200
 
1
@@ -23,11 +23,7 @@
2
 */
3
 bool  isMpeg4Compatible (uint32_t fourcc)
4
 {
5
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
6
-                       {divx4=1; }
7
-
8
-  uint8_t divx4 = 0;
9
-
10
+#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) return true
11
   CHECK ("FMP4");
12
   CHECK ("fmp4");
13
   CHECK ("DIVX");
14
@@ -39,10 +35,7 @@
15
   CHECK ("M4S2");
16
   CHECK ("3IV2");
17
   CHECK ("SEDG");
18
-
19
-  return divx4;
20
-
21
-#undef CHECK
22
+  return false;
23
 }
24
 #ifdef ADM_BIG_ENDIAN
25
 #define SWAP32(x) x=R32(x)
26
@@ -55,18 +48,13 @@
27
 
28
 bool isMpeg12Compatible (uint32_t fourcc)
29
 {
30
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
31
-                       {mpeg=1; }
32
-
33
-  uint8_t mpeg = 0;
34
   CHECK ("MPEG");
35
   CHECK ("mpg1");
36
   CHECK ("mpg2");
37
   SWAP32 (fourcc);
38
   if (fourcc == 0x10000002 || fourcc==0x10000001) //Mplayer fourcc
39
-    mpeg = 1;
40
-  return mpeg;
41
-#undef CHECK
42
+    return true;
43
+  return false;
44
 }
45
 /**
46
     \fn isH264Compatible
47
@@ -74,20 +62,13 @@
48
 
49
 bool isH264Compatible (uint32_t fourcc)
50
 {
51
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
52
-                                                {h264=1; }
53
-
54
-  uint8_t h264 = 0;
55
-
56
   CHECK ("X264");
57
   CHECK ("x264");
58
   CHECK ("h264");
59
   CHECK ("H264");
60
   CHECK ("AVC1");
61
   CHECK ("avc1");
62
-  return h264;
63
-
64
-#undef CHECK
65
+  return false;
66
 }
67
 
68
 /**
69
@@ -96,11 +77,6 @@
70
 
71
 bool isH265Compatible (uint32_t fourcc)
72
 {
73
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
74
-                                                {h265=1; }
75
-
76
-  uint8_t h265 = 0;
77
-
78
   CHECK ("X265");
79
   CHECK ("x265");
80
   CHECK ("h265");
81
@@ -109,9 +85,7 @@
82
   CHECK ("hevc");
83
   CHECK ("HVC1");
84
   CHECK ("hvc1");
85
-  return h265;
86
-
87
-#undef CHECK
88
+  return false;
89
 }
90
 
91
 /**
92
@@ -120,11 +94,6 @@
93
 
94
 bool isMSMpeg4Compatible (uint32_t fourcc)
95
 {
96
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
97
-                       {divx3=1; }
98
-
99
-  uint8_t divx3 = 0;
100
-
101
   CHECK ("MP43");
102
   CHECK ("mp43");
103
   CHECK ("div3");
104
@@ -132,27 +101,16 @@
105
   CHECK ("DIV4");
106
   CHECK ("div4");
107
   CHECK ("COL1");
108
-
109
-  return divx3;
110
-
111
-#undef CHECK
112
+  return false;
113
 }
114
 /**
115
     \fn isVC1Compatible
116
 */
117
 bool isVC1Compatible    (uint32_t fourcc)
118
 {
119
-
120
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
121
-                       {divx3=1; }
122
-
123
-  uint8_t divx3 = 0;
124
-
125
   CHECK ("VC1 ");
126
   CHECK ("WVC1");
127
-  return divx3;
128
-
129
-#undef CHECK
130
+  return false;
131
 }
132
 /**
133
     \fn isVP6Compatible
134
@@ -160,42 +118,22 @@
135
 
136
 bool isVP6Compatible (uint32_t fourcc)
137
 {
138
-
139
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
140
-                       {divx3=1; }
141
-
142
-  uint8_t divx3 = 0;
143
-
144
   CHECK ("VP6F");
145
   CHECK ("VP6 ");
146
   CHECK ("VP61");
147
   CHECK ("VP62");
148
-
149
-  return divx3;
150
-
151
-#undef CHECK
152
+  return false;
153
 }
154
 
155
-
156
-
157
 /**
158
     \fn isVP9Compatible
159
 */
160
 
161
 bool isVP9Compatible (uint32_t fourcc)
162
 {
163
-
164
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
165
-                       {vp9=1; }
166
-
167
-  uint8_t vp9 = 0;
168
-
169
   CHECK ("VP9 ");
170
   CHECK ("VP90");
171
-
172
-  return vp9;
173
-
174
-#undef CHECK
175
+  return false;
176
 }
177
 
178
 /**
179
@@ -204,19 +142,11 @@
180
 
181
 bool isDVCompatible (uint32_t fourcc)
182
 {
183
-#define CHECK(x) if(fourCC::check(fourcc,(uint8_t *)x)) \
184
-                       {dv=1; }
185
-
186
-  uint8_t dv = 0;
187
-
188
   CHECK ("dvsd");
189
   CHECK ("DVSD");
190
   CHECK ("dvpp");
191
   CHECK ("CDVC");
192
   CHECK ("cdvc");
193
-
194
-  return dv;
195
-
196
-#undef CHECK
197
+  return false;
198
 }
199
 //EOF
200
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_coreCodecMapping.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_coreCodecMapping.cpp Changed
12
 
1
@@ -114,6 +114,10 @@
2
     {
3
       return AV_CODEC_ID_MPEG4;
4
     }
5
+if (isVP9Compatible (fid) == 1)
6
+    {
7
+      return AV_CODEC_ID_VP9;
8
+    }
9
 
10
     uint32_t nb=sizeof(ffCodec)/sizeof(ffVideoCodec);
11
     for(int i=0;i<nb;i++)
12
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_file.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_file.cpp Changed
17
 
1
@@ -66,13 +66,10 @@
2
  ADM_assert(_fill<ADM_FILE_BUFFER);
3
    // MOD Feb 2005 by GMV
4
    // uint32_t c;
5
-   uint64_t c;
6
    // END MOD Feb 2005 by GMV
7
-        
8
-     
9
         flush();
10
-#ifdef ADMF_DEBUG           
11
-        c=ftello(_out);
12
+#ifdef ADMF_DEBUG
13
+        uint64_t c=ftello(_out);
14
         ADM_assert(c==_curPos);
15
         printf("[%lu] Ftell :%lu \n",this,c);
16
 #endif        
17
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractor.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractor.cpp Changed
30
 
1
@@ -41,7 +41,6 @@
2
          uint32_t * h, uint32_t * time_inc)
3
 {
4
   // Search startcode
5
-  uint8_t b;
6
   uint32_t idx = 0;
7
   uint32_t mw, mh;
8
   uint32_t timeVal;
9
@@ -340,7 +339,7 @@
10
   uint32_t globalOff = 0;
11
   uint32_t voptype;
12
   uint8_t code;
13
-  uint32_t w, h, t;
14
+  uint32_t w, h;
15
   uint32_t modulo, time_inc, vopcoded, vopType;
16
   *nb = 0;
17
   while (begin < end - 3)
18
@@ -489,11 +488,6 @@
19
 bool extractVolHeader(uint8_t *data,uint32_t dataSize,uint8_t **volStart, uint32_t *volLen)
20
 {
21
     // Search startcode
22
-    uint8_t b;
23
-    uint32_t idx=0;
24
-    uint32_t mw,mh;
25
-    uint32_t time_inc;
26
-    
27
     mpeg4unit unit[10];
28
     int nbUnit=splitMpeg4(data,dataSize,unit,10);
29
     if(!nbUnit)
30
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractorH264.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractorH264.cpp Changed
201
 
1
@@ -24,7 +24,7 @@
2
 #include "libavcodec/avcodec.h"
3
 #include "libavcodec/ff_spsinfo.h"
4
 #include "libavutil/mem.h"
5
-extern int ff_h264_info(AVCodecParserContext *parser,ffSpsInfo *ndo);
6
+extern int ff_h264_info(AVCodecParserContext *parser, int ticksPerFrame, ffSpsInfo *ndo);
7
 }
8
 
9
 #include "ADM_Video.h"
10
@@ -32,7 +32,6 @@
11
 #include "fourcc.h"
12
 //#include "ADM_mp4.h"
13
 
14
-#define aprintf(...) {}
15
 #include "ADM_getbits.h"
16
 #include "ADM_videoInfoExtractor.h"
17
 #include "ADM_h264_tag.h"
18
@@ -48,8 +47,11 @@
19
 #define check(...) {}
20
 #endif
21
 
22
-static ADMCountdown msgRateLimiter(100);
23
-static ADMCountdown limiterReset(199);
24
+#if 0
25
+#define seiprintf ADM_info
26
+#else
27
+#define seiprintf(...) {}
28
+#endif
29
 
30
 /**
31
     \fn ADM_getH264SpsPpsFromExtraData
32
@@ -462,11 +464,9 @@
33
 */
34
 static bool getRecoveryFromSei(uint32_t nalSize, uint8_t *org,uint32_t *recoveryLength)
35
 {
36
-    static int count=0;
37
-    if(msgRateLimiter.done() && limiterReset.done())
38
-        count=0;
39
-    uint8_t *payloadBuffer=(uint8_t *)malloc(nalSize+16);
40
-    int     originalNalSize=nalSize+16;
41
+    int originalNalSize=nalSize+16;
42
+    uint8_t *payloadBuffer=(uint8_t *)malloc(originalNalSize+AV_INPUT_BUFFER_PADDING_SIZE);
43
+    memset(payloadBuffer,0,originalNalSize+AV_INPUT_BUFFER_PADDING_SIZE);
44
     uint8_t *payload=payloadBuffer;
45
     bool r=false;
46
     nalSize=ADM_unescapeH264(nalSize,org,payload);
47
@@ -477,67 +477,53 @@
48
         return false;
49
     }
50
 
51
-#define RATE_LIMITED_WARNING(x) if(!count)\
52
-    { \
53
-        ADM_warning(#x"\n"); \
54
-        msgRateLimiter.reset(); \
55
-    } \
56
-    if(msgRateLimiter.done() && count) \
57
-    { \
58
-        ADM_warning(#x" (message repeated %d times)\n",count); \
59
-        msgRateLimiter.reset(); \
60
-        count=0; \
61
-    } \
62
-    count++; \
63
-    limiterReset.reset();
64
-
65
     uint8_t *tail=payload+nalSize;
66
     *recoveryLength=16;
67
     while( payload<tail)
68
     {
69
-                uint32_t sei_type=0,sei_size=0;
70
-                while(payload[0]==0xff)
71
-                {
72
-                        sei_type+=0xff;payload++;
73
-                        if(payload+2>=tail)
74
-                        {
75
-                            RATE_LIMITED_WARNING(Cannot decode SEI)
76
-                            goto abtSei;
77
-                        }
78
-                };
79
-                sei_type+=payload[0];payload++;
80
-                if(payload>=tail)
81
-                {
82
-                            RATE_LIMITED_WARNING(Cannot decode SEI)
83
-                            goto abtSei;
84
-                }
85
-                while(payload[0]==0xff)
86
-                {
87
-                    sei_size+=0xff;payload++;
88
-                    if(payload+1>=tail)
89
-                        {
90
-                            RATE_LIMITED_WARNING(Cannot decode SEI (2))
91
-                            goto abtSei;
92
-                        }
93
-                };
94
-                sei_size+=payload[0];payload++;
95
-                aprintf("  [SEI] Type : 0x%x size:%d\n",sei_type,sei_size);
96
-                if(payload+sei_size>tail) break;
97
-                switch(sei_type) // Recovery point
98
-                {
99
-                       case 6:
100
-                        {
101
-                            getBits bits(sei_size,payload);
102
-                            payload+=sei_size;
103
-                            *recoveryLength=bits.getUEG();
104
-                            r=true;
105
-                            count=0;
106
-                            break;
107
-                        }
108
-                        default:
109
-                            payload+=sei_size;
110
-                            break;
111
-                }
112
+        uint32_t sei_type=0,sei_size=0;
113
+        while(payload[0]==0xff)
114
+        {
115
+            sei_type+=0xff;payload++;
116
+            {
117
+                seiprintf("Not enough data.\n");
118
+                goto abtSei;
119
+            }
120
+        }
121
+        sei_type+=payload[0];payload++;
122
+        if(payload>=tail)
123
+        {
124
+            seiprintf("No data left after decoding SEI type.\n");
125
+            goto abtSei;
126
+        }
127
+        while(payload[0]==0xff)
128
+        {
129
+            sei_size+=0xff;payload++;
130
+            if(payload+1>=tail)
131
+            {
132
+                seiprintf("Not enough data left after decoding SEI size.\n");
133
+                goto abtSei;
134
+            }
135
+        }
136
+        sei_size+=payload[0];payload++;
137
+        seiprintf("  [SEI] Type : 0x%x size:%d\n",sei_type,sei_size);
138
+        if(payload+sei_size>tail) break;
139
+        switch(sei_type)
140
+        {
141
+            case 6: // Recovery point
142
+            {
143
+                getBits bits(sei_size,payload);
144
+                int distance=bits.getUEG();
145
+                seiprintf("Recovery distance: %d\n",distance);
146
+                *recoveryLength=distance;
147
+                r=true;
148
+                goto abtSei;
149
+                break;
150
+            }
151
+            default:
152
+                payload+=sei_size;
153
+                break;
154
+        }
155
     }
156
 abtSei:
157
     free(payloadBuffer);
158
@@ -546,19 +532,33 @@
159
 /**
160
     \fn getNalType
161
     \brief Return the slice type. The stream is escaped by the function. If recovery==0
162
-            I as considered IDR else as P.
163
+           or frame_num==0 I is considered IDR else as P.
164
 */
165
-static bool getNalType (uint8_t * head, uint8_t * tail, uint32_t * flags,int recovery)
166
+static bool getNalType (uint8_t *head, uint8_t *tail, uint32_t *flags, ADM_SPSInfo *sps, int *poc_lsb, int recovery)
167
 {
168
-    uint8_t *out=(uint8_t *)malloc(tail-head);
169
+    if(tail<=head)
170
+        return false;
171
+    uint8_t *out=(uint8_t *)malloc(tail-head+AV_INPUT_BUFFER_PADDING_SIZE);
172
+    memset(out,0,tail-head+AV_INPUT_BUFFER_PADDING_SIZE);
173
     int size=ADM_unescapeH264(tail-head,head,out);
174
 
175
     getBits bits(size,out);
176
     uint32_t sliceType;
177
-    *flags = 0;
178
+    int frame = -1;
179
+    *poc_lsb = -1;
180
 
181
     bits.getUEG();               // first mb in slice
182
     sliceType = bits.getUEG31(); // get_ue_golomb_31??
183
+    if(sps && sps->hasPocInfo && sps->log2MaxFrameNum > 3 && sps->log2MaxFrameNum < 17) // sanity check
184
+    {
185
+        bits.getUEG(); // skip PPS id
186
+        frame = bits.get(sps->log2MaxFrameNum);
187
+        if(!sps->frameMbsOnlyFlag && bits.get(1))
188
+            bits.get(1); // skip field_pic_flag
189
+        if(*flags & AVI_KEY_FRAME) // from NAL
190
+            bits.getUEG(); // skip idr_pic_id
191
+        *poc_lsb = bits.get(sps->log2MaxPocLsb);
192
+    }
193
     if (sliceType > 9)
194
     {
195
       ADM_warning ("Weird Slice %d\n", sliceType);
196
@@ -574,7 +574,7 @@
197
         case 0: *flags=  AVI_P_FRAME;break;
198
         case 1: *flags = AVI_B_FRAME;break;
199
         case 2: case 4:
200
-                if(!recovery) *flags=AVI_KEY_FRAME;
201
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractorH265.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/ADM_infoExtractorH265.cpp Changed
14
 
1
@@ -71,9 +71,10 @@
2
 H265Parser::H265Parser  (int len,uint8_t *data)
3
 {
4
     originalLength=len;
5
-    myLen=len+AV_INPUT_BUFFER_PADDING_SIZE;
6
+#define NAL_H265_CRA_NUT_LENGTH 10
7
+    myLen=len+AV_INPUT_BUFFER_PADDING_SIZE+NAL_H265_CRA_NUT_LENGTH;
8
     myData=new uint8_t[myLen];
9
-    memset(myData,0x2,myLen);
10
+    memset(myData,0,myLen);
11
     memcpy(myData,data,len);
12
     parser=NULL;
13
     ctx=NULL;
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs.cpp Changed
20
 
1
@@ -31,8 +31,6 @@
2
 #define CONFIG "config3"
3
 #define FILE_SIZE_MAX (20*1024)
4
 
5
-static char *checkDirAccess(char *home);
6
-extern char *ADM_escape(const ADM_filename *incoming);
7
 class preferences *prefs;
8
 static my_prefs_struct myPrefs;
9
 
10
@@ -211,7 +209,8 @@
11
    if(true==my_prefs_struct_jserialize(tmp.c_str(),&myPrefs))
12
     {
13
         ADM_copyFile(tmp.c_str(),path.c_str());
14
-        ADM_eraseFile(tmp.c_str());
15
+        if(!ADM_eraseFile(tmp.c_str()))
16
+            ADM_warning("Could not delete temporary file %s\n",tmp.c_str());
17
         return RC_OK;
18
     }
19
     ADM_error("Cannot save prefs\n");
20
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2.conf -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2.conf Changed
14
 
1
@@ -24,9 +24,11 @@
2
 bool:audiobar_uses_master,             0,      0,      1
3
 uint32_t:threading_lavc,               0,      0,      32
4
 uint32_t:cpu_caps,                   4294967295,      0,      4294967295
5
+uint32_t:cache_size,                   16,     8,      16
6
 bool:mpeg_no_limit,                    0,      0,      1
7
-bool:alternate_mp3_tag,                1,      0,      1
8
 bool:dxva2,                            0,      0,      1
9
+bool:dxva2_override_blacklist_version, 0,      0,      1
10
+bool:dxva2_override_blacklist_profile, 0,      0,      1
11
 bool:vdpau,                            0,      0,      1
12
 bool:xvba,                             0,      0,      1
13
 bool:libva,                            0,      0,      1
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2.h Changed
14
 
1
@@ -13,9 +13,11 @@
2
    bool audiobar_uses_master;
3
    uint32_t threading_lavc;
4
    uint32_t cpu_caps;
5
+   uint32_t cache_size;
6
    bool mpeg_no_limit;
7
-   bool alternate_mp3_tag;
8
    bool dxva2;
9
+   bool dxva2_override_blacklist_version;
10
+   bool dxva2_override_blacklist_profile;
11
    bool vdpau;
12
    bool xvba;
13
    bool libva;
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_desc.cpp Changed
14
 
1
@@ -8,9 +8,11 @@
2
  {"features.audiobar_uses_master",offsetof(my_prefs_struct,features.audiobar_uses_master),"bool",ADM_param_bool},
3
  {"features.threading_lavc",offsetof(my_prefs_struct,features.threading_lavc),"uint32_t",ADM_param_uint32_t},
4
  {"features.cpu_caps",offsetof(my_prefs_struct,features.cpu_caps),"uint32_t",ADM_param_uint32_t},
5
+ {"features.cache_size",offsetof(my_prefs_struct,features.cache_size),"uint32_t",ADM_param_uint32_t},
6
  {"features.mpeg_no_limit",offsetof(my_prefs_struct,features.mpeg_no_limit),"bool",ADM_param_bool},
7
- {"features.alternate_mp3_tag",offsetof(my_prefs_struct,features.alternate_mp3_tag),"bool",ADM_param_bool},
8
  {"features.dxva2",offsetof(my_prefs_struct,features.dxva2),"bool",ADM_param_bool},
9
+ {"features.dxva2_override_blacklist_version",offsetof(my_prefs_struct,features.dxva2_override_blacklist_version),"bool",ADM_param_bool},
10
+ {"features.dxva2_override_blacklist_profile",offsetof(my_prefs_struct,features.dxva2_override_blacklist_profile),"bool",ADM_param_bool},
11
  {"features.vdpau",offsetof(my_prefs_struct,features.vdpau),"bool",ADM_param_bool},
12
  {"features.xvba",offsetof(my_prefs_struct,features.xvba),"bool",ADM_param_bool},
13
  {"features.libva",offsetof(my_prefs_struct,features.libva),"bool",ADM_param_bool},
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_json.cpp Changed
14
 
1
@@ -16,9 +16,11 @@
2
 json.addBool("audiobar_uses_master",key->features.audiobar_uses_master);
3
 json.addUint32("threading_lavc",key->features.threading_lavc);
4
 json.addUint32("cpu_caps",key->features.cpu_caps);
5
+json.addUint32("cache_size",key->features.cache_size);
6
 json.addBool("mpeg_no_limit",key->features.mpeg_no_limit);
7
-json.addBool("alternate_mp3_tag",key->features.alternate_mp3_tag);
8
 json.addBool("dxva2",key->features.dxva2);
9
+json.addBool("dxva2_override_blacklist_version",key->features.dxva2_override_blacklist_version);
10
+json.addBool("dxva2_override_blacklist_profile",key->features.dxva2_override_blacklist_profile);
11
 json.addBool("vdpau",key->features.vdpau);
12
 json.addBool("xvba",key->features.xvba);
13
 json.addBool("libva",key->features.libva);
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_pref.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreUtils/src/prefs2_pref.h Changed
14
 
1
@@ -19,9 +19,11 @@
2
 { FEATURES_AUDIOBAR_USES_MASTER,"features.audiobar_uses_master"       ,ADM_param_bool      ,"0",   0,  1},
3
 { FEATURES_THREADING_LAVC,"features.threading_lavc"                   ,ADM_param_uint32_t  ,"0",   0,  32},
4
 { FEATURES_CPU_CAPS,"features.cpu_caps"                               ,ADM_param_uint32_t  ,"4294967295",  0,  4294967295},
5
+{ FEATURES_CACHE_SIZE,"features.cache_size"                           ,ADM_param_uint32_t  ,"16",  8,  16},
6
 { FEATURES_MPEG_NO_LIMIT,"features.mpeg_no_limit"                     ,ADM_param_bool      ,"0",   0,  1},
7
-{ FEATURES_ALTERNATE_MP3_TAG,"features.alternate_mp3_tag"             ,ADM_param_bool      ,"1",   0,  1},
8
 { FEATURES_DXVA2,"features.dxva2"                                     ,ADM_param_bool      ,"0",   0,  1},
9
+{ FEATURES_DXVA2_OVERRIDE_BLACKLIST_VERSION,"features.dxva2_override_blacklist_version",ADM_param_bool     ,"0",   0,  1},
10
+{ FEATURES_DXVA2_OVERRIDE_BLACKLIST_PROFILE,"features.dxva2_override_blacklist_profile",ADM_param_bool     ,"0",   0,  1},
11
 { FEATURES_VDPAU,"features.vdpau"                                     ,ADM_param_bool      ,"0",   0,  1},
12
 { FEATURES_XVBA,"features.xvba"                                       ,ADM_param_bool      ,"0",   0,  1},
13
 { FEATURES_LIBVA,"features.libva"                                     ,ADM_param_bool      ,"0",   0,  1},
14
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreLibVA/src/ADM_coreLibVA.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreLibVA/src/ADM_coreLibVA.cpp Changed
57
 
1
@@ -455,7 +455,6 @@
2
 {
3
     Display *dis=(Display *)x->display;
4
     ADM_coreLibVA::display=vaGetDisplay(dis);
5
-    int maj=0,min=0,patch=0;
6
     ADM_info("[LIBVA] Initializing LibVA library ...\n");
7
 
8
 
9
@@ -914,7 +913,6 @@
10
 bool        admLibVA::putX11Surface(ADM_vaSurface *img,int widget,int displayWidth,int displayHeight)
11
 {
12
     int xError;
13
-    VASurfaceStatus status;
14
     CHECK_WORKING(false);
15
     CHECK_ERROR(vaPutSurface ( ADM_coreLibVA::display, img->surface,(Drawable)widget,0,0,img->w, img->h,0,0,displayWidth,displayHeight,
16
                               NULL,0 // clip & and num clip
17
@@ -934,7 +932,6 @@
18
 {
19
 
20
     int xError;
21
-    VASurfaceStatus status;
22
     CHECK_WORKING(false);
23
     CHECK_ERROR(vaPutImage(ADM_coreLibVA::display,
24
                            dst->surface,
25
@@ -958,7 +955,6 @@
26
 {
27
 
28
     int xError;
29
-    VASurfaceStatus status;
30
     CHECK_WORKING(false);
31
     CHECK_ERROR(vaGetImage(ADM_coreLibVA::display,
32
                            dst->surface,
33
@@ -983,7 +979,6 @@
34
 bool   admLibVA::uploadToImage( ADMImage *src,VAImage *dest)
35
 {
36
     int xError;
37
-    VASurfaceStatus status;
38
     CHECK_WORKING(false);
39
     uint8_t *ptr=NULL;
40
     CHECK_ERROR(vaMapBuffer(ADM_coreLibVA::display, dest->buf, (void**)&ptr))
41
@@ -1021,7 +1016,6 @@
42
 bool   admLibVA::downloadFromImage( ADMImage *src,VAImage *dest,ADMColorScalerSimple *color)
43
 {
44
     int xError;
45
-    VASurfaceStatus status;
46
     CHECK_WORKING(false);
47
     uint8_t *ptr=NULL;
48
     CHECK_ERROR(vaMapBuffer(ADM_coreLibVA::display, dest->buf, (void**)&ptr))
49
@@ -1124,7 +1118,6 @@
50
 {
51
     int xError;
52
     bool r=false;
53
-    VASurfaceStatus status;
54
     CHECK_WORKING(false);
55
     uint8_t *ptr=NULL;
56
 
57
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreLibVA/src/ADM_coreLibVA_test.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreLibVA/src/ADM_coreLibVA_test.cpp Changed
24
 
1
@@ -63,7 +63,6 @@
2
  */
3
 static bool tryIndirectUpload(const char *title, ADM_vaSurface &admSurface,VAImage *image, ADMImage &image1)
4
 {
5
-    bool work=false;
6
     ADM_info("%s indirect upload... \n",title);
7
     if(!admLibVA::uploadToImage(&image1,image))
8
     {
9
@@ -88,7 +87,6 @@
10
  */
11
 static bool tryIndirectDownload(const char *title, ADM_vaSurface &admSurface,VAImage *image, ADMImage &image2)
12
 {
13
-    bool work=false;
14
     ADM_info("%s indirect download... \n",title);
15
     if(!admLibVA::surfaceToImage(&admSurface,image))
16
     {
17
@@ -148,4 +146,4 @@
18
         admLibVA::destroyImage(image);
19
         image=NULL;
20
         return r;
21
-}
22
\ No newline at end of file
23
+}
24
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_codec.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_codec.h Changed
12
 
1
@@ -76,6 +76,10 @@
2
   {
3
     return false;
4
   }
5
+  virtual bool keepFeeding(void) // Does the decoder expect more input?
6
+  {
7
+    return false;
8
+  }
9
   virtual bool endOfStreamReached(void)
10
   {
11
     return false;
12
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h Changed
28
 
1
@@ -59,6 +59,7 @@
2
            bool         hurryUp;
3
            bool         _drain;
4
            bool         _done;
5
+           bool         _keepFeeding;
6
            bool         _endOfStream;
7
            bool         _setBpp;
8
            bool         _setFcc;
9
@@ -115,7 +116,8 @@
10
       //  virtual uint32_t getSpecificMpeg4Info (void);
11
         virtual uint8_t getPARWidth (void);
12
         virtual uint8_t getPARHeight (void);
13
-        virtual bool decodeErrorHandler(int code, bool headerOnly=false);
14
+        virtual bool decodeErrorHandler(int code);
15
+        virtual bool keepFeeding(void) { return _keepFeeding; }
16
         virtual bool endOfStreamReached(void) { return _endOfStream; }
17
         virtual void setEndOfStream(bool reached) { _endOfStream=reached; }
18
         virtual bool getDrainingState(void) { return _drain; }
19
@@ -148,7 +150,7 @@
20
 FF_SIMPLE_DECLARE(decoderFF_ffhuff,)
21
 FF_SIMPLE_DECLARE(decoderFFficv, bool uncompress(ADMCompressedImage *in, ADMImage *out);)
22
 FF_SIMPLE_DECLARE(decoderFFPng,)
23
-FF_SIMPLE_DECLARE(decoderFFMpeg4, bool uncompress (ADMCompressedImage * in, ADMImage * out);
24
+FF_SIMPLE_DECLARE(decoderFFMpeg4, bool uncompress(ADMCompressedImage *in, ADMImage *out);
25
                                 // mpeg4 can have B-frame
26
                                 virtual bool bFramePossible (void)   {  return 1;   })
27
 FF_SIMPLE_DECLARE(decoderFFMpeg12,
28
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffVp9.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffVp9.cpp Changed
10
 
1
@@ -51,7 +51,7 @@
2
 {
3
     uint8_t *parsedPointer=NULL;
4
     int      parsedLen=0;
5
-    bool result;
6
+    bool result=false;
7
     // run parser on it..
8
     int offset=0;
9
     xlog("Parse %d\n",in->dataLength);
10
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffmp43.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffmp43.cpp Changed
201
 
1
@@ -26,22 +26,18 @@
2
     #define LAV_VERBOSITY_LEVEL AV_LOG_INFO
3
 #endif
4
 
5
-extern "C"
6
-{
7
-    static void ADM_releaseBuffer(struct AVCodecContext *avctx, AVFrame *pic);
8
-    static int  ADM_getBuffer(AVCodecContext *avctx, AVFrame *pic);
9
-}
10
-
11
 #define aprintf(...) {}
12
 
13
 
14
 //****************************
15
 extern uint8_t DIA_lavDecoder (bool *swapUv);
16
+#if 0
17
 extern "C"
18
 {
19
   int av_is_voppacked (AVCodecContext * avctx, int *vop_packed, int *gmc,
20
               int *qpel);
21
 };
22
+#endif
23
 /**
24
     \fn clonePic
25
     \brief Convert AvFrame to ADMImage
26
@@ -170,6 +166,7 @@
27
   hurryUp=false;
28
   _drain=false;
29
   _done=false;
30
+  _keepFeeding=false;
31
   _endOfStream=false;
32
   _setBpp=false;
33
   _setFcc=false;
34
@@ -328,7 +325,7 @@
35
     \fn decodeErrorHandler
36
     \brief Evaluate return value of avcodec_receive_frame
37
 */
38
-bool decoderFF::decodeErrorHandler(int code, bool headerOnly)
39
+bool decoderFF::decodeErrorHandler(int code)
40
 {
41
     if(code<0)
42
     {
43
@@ -336,25 +333,30 @@
44
         {
45
             case AVERROR_EOF:
46
                 ADM_warning("[lavc] End of video stream reached\n");
47
-                setEndOfStream(true);
48
+                _keepFeeding=false;
49
+                _endOfStream=true;
50
                 flush();
51
                 return false;
52
             case AVERROR(EAGAIN):
53
+#ifdef ADM_DEBUG
54
                 ADM_info("[lavc] The decoder expects more input before output can be produced\n");
55
+#endif
56
+                _keepFeeding=true;
57
                 return false;
58
             case AVERROR(EINVAL):
59
                 ADM_error("[lavc] Codec not opened\n");
60
                 return false;
61
             default:
62
-                if(!headerOnly)
63
-                {
64
-                    char er[2048]={0};
65
-                    av_make_error_string(er, sizeof(er)-1, code);
66
-                    ADM_warning("Error %d in lavcodec (%s)\n",code,er);
67
-                    return false;
68
-                }
69
+            {
70
+                char er[2048]={0};
71
+                av_make_error_string(er, sizeof(er)-1, code);
72
+                ADM_warning("Error %d in lavcodec (%s)\n",code,er);
73
+                return false;
74
+            }
75
         }
76
     }
77
+    _keepFeeding=false;
78
+    _endOfStream=false;
79
     return true;
80
 }
81
 
82
@@ -364,7 +366,6 @@
83
 */
84
 bool   decoderFF::uncompress (ADMCompressedImage * in, ADMImage * out)
85
 {
86
-  uint8_t *oBuff[3];
87
   int ret = 0;
88
   out->_noPicture = 0;
89
   if(hwDecoder)
90
@@ -372,30 +373,16 @@
91
  
92
   //printf("Frame size : %d\n",in->dataLength);
93
 
94
-  if (in->dataLength == 0 && !_allowNull)  // Null frame, silently skipped
95
+    if (in->dataLength == 0 && !_allowNull) // Null frame, silently skipped
96
     {
97
-
98
-      printf ("[Codec] null frame\n");
99
-        // search the last image
100
-        if (_context->coded_frame &&
101
-            _context->coded_frame->data &&
102
-            _context->coded_frame->data[0]
103
-            )
104
-          {
105
-            printf("[Codec] Cloning older pic\n");
106
-            clonePic (_context->coded_frame, out);
107
-            out->Pts=ADM_COMPRESSED_NO_PTS;
108
-          }
109
-        else
110
-            {
111
-                out->_noPicture = 1;
112
-                out->Pts=ADM_COMPRESSED_NO_PTS;
113
-                printf("[Codec] No Picture\n");
114
-            }
115
-          return 1;
116
+        printf ("[Codec] null frame\n");
117
+        out->_noPicture = 1;
118
+        out->Pts=ADM_COMPRESSED_NO_PTS;
119
+        printf("[Codec] No Picture\n");
120
+        return 1;
121
     }
122
-   // Put a safe value....
123
-   out->Pts=in->demuxerPts;
124
+    // Put a safe value....
125
+    out->Pts=in->demuxerPts;
126
     _context->reordered_opaque=in->demuxerPts;
127
   //_frame.opaque=(void *)out->Pts;
128
   //printf("Incoming Pts :%"PRId64"\n",out->Pts);
129
@@ -422,74 +409,53 @@
130
 
131
     ret = avcodec_receive_frame(_context, _frame);
132
 
133
-    if(!ret)
134
-        _endOfStream=false;
135
-    if(!decodeErrorHandler(ret,hurryUp))
136
-        return false;
137
+    out->_qStride = 0; // Default = no quant
138
 
139
-  if(!bFramePossible())
140
-  {
141
-    // No delay, the value is sure, no need to hide it in opaque
142
-    _frame->reordered_opaque=(int64_t)in->demuxerPts;
143
-  }
144
-  out->_qStride = 0;       //Default = no quant
145
-#if 0
146
-  if (0 > ret && !hurryUp)
147
+    if (ret && !hurryUp)
148
     {
149
-      printf ("\n[lavc] error in lavcodec decoder!\n");
150
-      printf ("[lavc] Err: %d, size :%d\n", ret, in->dataLength);
151
-      return 0;
152
+        // Some encoder code a vop header with the
153
+        // vop flag set to 0
154
+        // it is meant to mean frame skipped but very dubious
155
+#define MPEG4_EMPTY_FRAME_THRESHOLD 19 // MAX_NVOP_SIZE
156
+#define FRAPS_EMPTY_FRAME_THRESHOLD  8 // assumption
157
+        if ((in->dataLength <= MPEG4_EMPTY_FRAME_THRESHOLD && codecId == AV_CODEC_ID_MPEG4) ||
158
+            (in->dataLength <= FRAPS_EMPTY_FRAME_THRESHOLD && codecId == AV_CODEC_ID_MPEG4))
159
+        {
160
+            printf ("[lavc] Probably placeholder frame (data length: %u)\n",in->dataLength);
161
+            out->_Qp = 2;
162
+            out->Pts=ADM_NO_PTS; // not sure
163
+            out->_noPicture = 1;
164
+            return true;
165
+        }
166
+        // allow null means we allow null frame in and so potentially
167
+        // have no frame out for a time
168
+        // in that case silently fill with black and returns it as KF
169
+        if (_allowNull)
170
+        {
171
+            out->flags = AVI_KEY_FRAME;
172
+       if (!_refCopy)
173
+                out->blacken();
174
+       else
175
+           out->_noPicture = 1;
176
+            printf ("\n[lavc] ignoring that we got no picture\n");
177
+       return 1;
178
+        }
179
     }
180
-#endif
181
-  if (ret && !hurryUp)
182
+    if (hurryUp)
183
     {
184
-      // Some encoder code a vop header with the
185
-      // vop flag set to 0
186
-      // it is meant to mean frame skipped but very dubious
187
-      if (in->dataLength <= 8)
188
-        if(codecId == AV_CODEC_ID_MPEG4||codecId==AV_CODEC_ID_FRAPS)
189
-   {
190
-     printf ("[lavc] Probably pseudo black frame...\n");
191
-     out->_Qp = 2;
192
-     out->flags = 0;   // assume P ?
193
-          if(_context->coded_frame)
194
-            clonePic (_context->coded_frame, out);
195
-          else
196
-             out->_noPicture = 1;
197
-          out->Pts=ADM_NO_PTS; // not sure
198
-     return 1;
199
-   }
200
-      // allow null means we allow null frame in and so potentially
201
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoEncoder/src/ADM_coreVideoEncoder.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoEncoder/src/ADM_coreVideoEncoder.cpp Changed
24
 
1
@@ -196,11 +196,11 @@
2
     size_t lastSlash;
3
 
4
      lastSlash=s.find_last_of("/");
5
-     if(lastSlash!=-1)
6
+     if(lastSlash!=std::string::npos)
7
         s.replace(0,lastSlash+1,std::string(""));
8
 #ifdef _WIN32
9
      size_t lastBackSlash=s.find_last_of("\\");
10
-     if(lastBackSlash!=-1)
11
+     if(lastBackSlash!=std::string::npos)
12
         s.replace(0,lastBackSlash+1,std::string(""));
13
 #endif
14
     ADM_info("Stripping : %s => %s\n",input.c_str(),s.c_str());
15
@@ -265,7 +265,7 @@
16
         getFileNameAndExt(s,file);
17
         lastDot=file.find_last_of('.');
18
         // Remove extension
19
-        if(lastDot!=-1)
20
+        if(lastDot!=std::string::npos)
21
             file.replace(lastDot,file.size(),std::string(""));
22
         listOut.push_back(file);
23
     }
24
avidemux_2.7.3.tar.gz/avidemux_core/ADM_coreVideoEncoder/src/ADM_coreVideoEncoderFFmpeg.cpp -> avidemux_2.7.4.tar.gz/avidemux_core/ADM_coreVideoEncoder/src/ADM_coreVideoEncoderFFmpeg.cpp Changed
63
 
1
@@ -422,32 +422,42 @@
2
 */
3
 bool ADM_coreVideoEncoderFFmpeg::loadStatFile(const char *file)
4
 {
5
-  printf("[FFmpeg] Loading stat file :%s\n",file);
6
-  FILE *_statfile = ADM_fopen (file, "rb");
7
-  int statSize;
8
+    ADM_info("Loading stat file %s\n",file);
9
+    FILE *_statfile = ADM_fopen (file, "rb");
10
 
11
-  if (!_statfile)
12
+    if (!_statfile)
13
     {
14
-      printf ("[ffmpeg] internal file does not exists ?\n");
15
-      return false;
16
+        ADM_error ("Cannot open stat file. Does it exist?\n");
17
+        return false;
18
     }
19
 
20
-  fseek (_statfile, 0, SEEK_END);
21
-  statSize = ftello (_statfile);
22
-  fseek (_statfile, 0, SEEK_SET);
23
-  _context->stats_in = (char *) av_malloc(statSize+1);
24
-  _context->stats_in[statSize] = 0;
25
-  fread (_context->stats_in, statSize, 1, _statfile);
26
-  fclose(_statfile);
27
-
28
+    fseek (_statfile, 0, SEEK_END);
29
+    uint64_t statSize = ftello (_statfile);
30
+    if (statSize >= INT_MAX - 32) // enforce the av_malloc limit
31
+    {
32
+        ADM_error ("Stat file too large.\n");
33
+        fclose(_statfile);
34
+        return false;
35
+    }
36
+    fseek (_statfile, 0, SEEK_SET);
37
+    _context->stats_in = (char *) av_malloc(statSize+1);
38
+    _context->stats_in[statSize] = 0;
39
+    if (!fread (_context->stats_in, statSize, 1, _statfile))
40
+    {
41
+        ADM_error ("Cannot read stat file.\n");
42
+        fclose(_statfile);
43
+        return false;
44
+    }
45
+    fclose(_statfile);
46
 
47
     int i;
48
     char *p=_context->stats_in;
49
-   for(i=-1; p; i++){
50
-            p= strchr(p+1, ';');
51
-        }
52
-  printf("[FFmpeg] stat file loaded ok, %d frames found\n",i);
53
-  return true;
54
+    for(i=-1; p; i++)
55
+    {
56
+        p= strchr(p+1, ';');
57
+    }
58
+    ADM_info ("Stat file loaded ok, %d frames found.\n",i);
59
+    return true;
60
 }
61
 /**
62
         \fn postEncode
63
avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/ffmpeg-4.1.4.tar.bz2 Added
avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/attic Added
2
 
1
+(directory)
2
avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/attic/libavcodec_h263dec.c.patch Changed
2
 
1
(renamed from avidemux_core/ffmpeg_package/patches/libavcodec_h263dec.c.patch)
2
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/patches/libavcodec_ff_spsinfo.h.patch -> avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/libavcodec_ff_spsinfo.h.patch Changed
23
 
1
@@ -2,7 +2,7 @@
2
 ===================================================================
3
 --- libavcodec/ff_spsinfo.h    (revision 0)
4
 +++ libavcodec/ff_spsinfo.h    (revision 0)
5
-@@ -0,0 +1,17 @@
6
+@@ -0,0 +1,22 @@
7
 +#ifndef FF_SPS_INFO_H
8
 +#define FF_SPS_INFO_H
9
 +
10
@@ -14,7 +14,12 @@
11
 +  int darNum;
12
 +  int darDen;
13
 +  int hasStructInfo;
14
++  int hasPocInfo;
15
 +  int CpbDpbToSkip;
16
++  int log2MaxFrameNum;
17
++  int log2MaxPocLsb;
18
++  int frameMbsOnlyFlag;
19
++  int refFrames;
20
 +}ffSpsInfo;
21
 +
22
 +
23
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/patches/libavcodec_h264_parser.c.patch -> avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/libavcodec_h264_parser.c.patch Changed
70
 
1
@@ -1,13 +1,13 @@
2
---- libavcodec/h264_parser.c.org   2017-03-10 18:39:39.106069071 +0100
3
-+++ libavcodec/h264_parser.c   2017-03-10 18:38:20.586520540 +0100
4
-@@ -64,6 +64,102 @@
5
+--- libavcodec/h264_parser.c.orig  2019-04-01 13:16:31.000000000 +0200
6
++++ libavcodec/h264_parser.c   2019-07-15 23:20:28.365062563 +0200
7
+@@ -64,6 +64,112 @@
8
      int last_frame_num, last_picture_structure;
9
  } H264ParseContext;
10
  
11
 +#include "ff_spsinfo.h" // MEANX
12
 +#include <assert.h>
13
 + // MEANX
14
-+int ff_h264_info(AVCodecParserContext *parser,ffSpsInfo *info);
15
++int ff_h264_info(AVCodecParserContext *parser, int ticksPerFrame, ffSpsInfo *info);
16
 +/**
17
 +    \fn AVCodecParserContext
18
 + *  \brief find a valid sps,take the 1st one that look sok
19
@@ -42,7 +42,7 @@
20
 + * @param info
21
 + * @return 
22
 + */
23
-+int ff_h264_info(AVCodecParserContext *parser,ffSpsInfo *info)
24
++int ff_h264_info(AVCodecParserContext *parser, int ticksPerFrame, ffSpsInfo *info)
25
 +{
26
 +    H264ParseContext *ctx = parser->priv_data;    
27
 +    int f;   
28
@@ -60,7 +60,10 @@
29
 +    {
30
 +            float scale=sps->time_scale ;
31
 +            float ticks=sps->num_units_in_tick;
32
-+            info->fps1000 =  (uint32_t) ((scale/ticks) *    1000.);
33
++            float fps = scale/ticks;
34
++            if(ticksPerFrame>1)
35
++                fps /= ticksPerFrame;
36
++            info->fps1000 = (uint32_t)(fps * 1000.);
37
 +#undef printf
38
 +            printf("Scale : %d, tick=%d, fps=%d\n",(int)scale,(int)ticks,(int)info->fps1000);
39
 +    }else
40
@@ -71,7 +74,9 @@
41
 +    // D.2.2 SEI Timing present if CpbDbpDelayPresentFlag=1 or pictStructPresent=1
42
 +    // CpbDbpDelayPresentFlag =1 if nal_hdr or vcl_hrd or ???
43
 +    f=sps->nal_hrd_parameters_present_flag | sps->vcl_hrd_parameters_present_flag;
44
-+    info->hasStructInfo=f | sps->pic_struct_present_flag;;
45
++    info->hasStructInfo=f | sps->pic_struct_present_flag;
46
++    // Check whether POC is explicitely set in slice header
47
++    info->hasPocInfo=!sps->poc_type;
48
 +    // While decoding SEI, if CpbDpbDelaysPresentFlags is there we skip cpb_removal_delay + dpb_output_delay
49
 +
50
 +    info->CpbDpbToSkip=0;
51
@@ -79,6 +84,10 @@
52
 +    {
53
 +        info->CpbDpbToSkip=sps->cpb_removal_delay_length+sps->dpb_output_delay_length;
54
 +    }
55
++    info->log2MaxFrameNum=sps->log2_max_frame_num;
56
++    info->log2MaxPocLsb=sps->log2_max_poc_lsb;
57
++    // Needed to determine the offset of poc_lsb
58
++    info->frameMbsOnlyFlag=sps->frame_mbs_only_flag;
59
 +//#warning fixme sar vs dar
60
 +    info->darNum=sps->sar.num;
61
 +    info->darDen=sps->sar.den;
62
@@ -96,6 +105,7 @@
63
 +         info->height-=sps->crop_bottom*mul;
64
 +
65
 +    }
66
++    info->refFrames=sps->ref_frame_count;
67
 +    return 1;
68
 +}
69
 +// /MEANX
70
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/patches/libavformat_matroskaenc.c.patch -> avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/libavformat_matroskaenc.c.patch Changed
18
 
1
@@ -1,5 +1,5 @@
2
---- libavformat/matroskaenc.c.orig 2017-10-15 17:59:38.000000000 +0200
3
-+++ libavformat/matroskaenc.c  2017-10-20 22:27:11.015317538 +0200
4
+--- libavformat/matroskaenc.c.orig 2019-07-08 19:45:30.000000000 +0200
5
++++ libavformat/matroskaenc.c  2019-07-25 00:44:53.173020711 +0200
6
 @@ -636,6 +636,8 @@
7
  
8
  static int put_xiph_codecpriv(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par)
9
@@ -39,7 +39,7 @@
10
  }
11
  
12
  static int put_wv_codecpriv(AVIOContext *pb, AVCodecParameters *par)
13
-@@ -1220,7 +1245,25 @@
14
+@@ -1222,7 +1247,25 @@
15
      put_ebml_uint (pb, MATROSKA_ID_TRACKUID,
16
                     mkv->is_dash ? mkv->dash_track_number : i + 1);
17
      put_ebml_uint (pb, MATROSKA_ID_TRACKFLAGLACING , 0);    // no lacing (yet)
18
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/patches/libavformat_matroskaenc_vp9.c.patch -> avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/libavformat_matroskaenc_vp9.c.patch Changed
11
 
1
@@ -1,6 +1,6 @@
2
---- libavformat/matroskaenc.c.orig 2017-10-20 22:29:56.999241777 +0200
3
-+++ libavformat/matroskaenc.c  2017-10-20 22:42:09.200595010 +0200
4
-@@ -2793,7 +2793,7 @@
5
+--- libavformat/matroskaenc.c.orig 2019-07-25 00:44:53.173020711 +0200
6
++++ libavformat/matroskaenc.c  2019-07-25 00:47:39.962891400 +0200
7
+@@ -2795,7 +2795,7 @@
8
          if (pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0)
9
              ret = ff_stream_add_bitstream_filter(st, "aac_adtstoasc", NULL);
10
      } else if (st->codecpar->codec_id == AV_CODEC_ID_VP9) {
11
avidemux_2.7.3.tar.gz/avidemux_core/ffmpeg_package/patches/libavutil_file_open.c.patch -> avidemux_2.7.4.tar.gz/avidemux_core/ffmpeg_package/patches/libavutil_file_open.c.patch Changed
29
 
1
@@ -1,13 +1,22 @@
2
---- libavutil/file_open.c  2018-12-02 15:01:27.570412023 +0100
3
-+++ libavutil/file_open.c  2018-12-02 14:59:47.483523875 +0100
4
-@@ -39,6 +39,10 @@
5
+--- libavutil/file_open.c.orig 2019-04-01 13:16:31.000000000 +0200
6
++++ libavutil/file_open.c  2019-04-16 19:17:10.696158476 +0200
7
+@@ -38,12 +38,19 @@
8
+ #include <share.h>
9
  #include <errno.h>
10
  #include "wchar_filename.h"
11
- 
12
++#include "avstring.h"
13
++
14
 +#ifdef _MSC_VER
15
 +#undef HAVE_MKSTEMP // MEANX
16
 +#endif
17
-+
18
+ 
19
  static int win32_open(const char *filename_utf8, int oflag, int pmode)
20
  {
21
      int fd;
22
+     wchar_t *filename_w;
23
+ 
24
++    av_strstart(filename_utf8, "//", &filename_utf8); // remove leading double slashes - eum.
25
++
26
+     /* convert UTF-8 to wide chars */
27
+     if (utf8towchar(filename_utf8, &filename_w))
28
+         return -1;
29
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_audioDecoders/ADM_ad_lav/ADM_ad_lav.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_audioDecoders/ADM_ad_lav/ADM_ad_lav.cpp Changed
111
 
1
@@ -24,7 +24,6 @@
2
 #include "fourcc.h"
3
 #include "ADM_audioXiphUtils.h"
4
 
5
-#define SCRATCH_PAD_SIZE (100*1000*2)
6
 #define ADMWA_BUF (4*1024*16) // 64 kB internal
7
 /**
8
  * \class ADM_AudiocoderLavcodec
9
@@ -40,10 +39,10 @@
10
                 ADM_outputFlavor        outputFlavor;
11
                 AVCodecContext          *_context;
12
                 AVFrame                 *_frame;
13
+                uint8_t                 *_paddedExtraData;
14
                 uint8_t    _buffer[ ADMWA_BUF];
15
                 uint32_t   _tail,_head;
16
                 uint32_t   _blockalign;
17
-                uint8_t scratchPad[SCRATCH_PAD_SIZE];
18
     uint32_t    channels;
19
     bool        decodeToS16(float **outptr,uint32_t *nbOut);
20
     bool        decodeToFloat(float **outptr,uint32_t *nbOut);
21
@@ -109,6 +108,7 @@
22
     ADM_info(" [ADM_AD_LAV] Using decoder for type 0x%x\n",info->encoding);
23
     ADM_info(" [ADM_AD_LAV] #of channels %d\n",info->channels);
24
     _tail=_head=0;
25
+    _paddedExtraData=NULL;
26
     channels=info->channels;
27
     _blockalign=0;
28
     _frame=av_frame_alloc();
29
@@ -185,20 +185,24 @@
30
     _context->bit_rate = info->byterate*8;
31
     _context->sample_fmt=AV_SAMPLE_FMT_FLT;
32
     _context->request_sample_fmt=AV_SAMPLE_FMT_FLT;
33
-    
34
+
35
     if(fourcc==WAV_OGG_VORBIS)
36
     {
37
         // Need to translate from adm to xiph
38
         int xiphLen=(int)l+(l/255)+4+5;
39
-        uint8_t *xiph=new uint8_t[xiphLen];
40
+        uint8_t *xiph=new uint8_t[xiphLen+AV_INPUT_BUFFER_PADDING_SIZE];
41
+        memset(xiph,0,xiphLen+AV_INPUT_BUFFER_PADDING_SIZE);
42
         xiphLen=ADMXiph::admExtraData2xiph(l,d,xiph);
43
-        _context->extradata=xiph;
44
-        _context->extradata_size=xiphLen;
45
-    }else
46
+        _paddedExtraData=xiph;
47
+        l=xiphLen;
48
+    }else if(l)
49
     {
50
-        _context->extradata=(uint8_t *)d;
51
-        _context->extradata_size=(int)l;    
52
+        _paddedExtraData=new uint8_t[l+AV_INPUT_BUFFER_PADDING_SIZE];
53
+        memset(_paddedExtraData,0,l+AV_INPUT_BUFFER_PADDING_SIZE);
54
+        memcpy(_paddedExtraData,d,l);
55
     }
56
+    _context->extradata=_paddedExtraData;
57
+    _context->extradata_size=l;
58
 
59
     if (!_blockalign) 
60
     {
61
@@ -277,11 +281,16 @@
62
     \fn dtor
63
 */
64
  ADM_AudiocoderLavcodec::~ADM_AudiocoderLavcodec()
65
- {
66
-        avcodec_close(_context);
67
-        av_free(_context);
68
-        _context=NULL;
69
-        av_frame_free(&_frame);
70
+{
71
+    avcodec_close(_context);
72
+    av_free(_context);
73
+    _context=NULL;
74
+    av_frame_free(&_frame);
75
+    if(_paddedExtraData)
76
+    {
77
+        delete [] _paddedExtraData;
78
+       _paddedExtraData=NULL;
79
+    }
80
 }
81
 /**
82
     \fn decodeToS16
83
@@ -442,7 +451,8 @@
84
     AVPacket pkt;
85
     av_init_packet(&pkt);
86
     int nbChunk,res=0;
87
-    while(_tail-_head>=_blockalign)
88
+    bool eof=false;
89
+    while(_tail-_head>=_blockalign && !eof)
90
     {
91
         nbChunk=(_tail-_head)/_blockalign;
92
         pkt.size=nbChunk*_blockalign;
93
@@ -458,14 +468,15 @@
94
             if(res==AVERROR(EAGAIN)) break; // we need to send more input
95
             if(res==AVERROR_EOF)
96
             {
97
-                return 1;
98
+                eof=true;
99
+                break;
100
             }
101
             if(res<0)
102
             {
103
                 char er[2048]={0};
104
                 av_make_error_string(er, sizeof(er)-1, res);
105
                 ADM_warning("[ADM_ad_lav] decoding error: %s\n",er);
106
-                return 1;
107
+                break;
108
             }
109
 
110
             bool invalid=false;
111
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp Changed
10
 
1
@@ -251,7 +251,7 @@
2
                 if(rpt)
3
                         memcpy(readBuffer,_tracks[0].headerRepeat,rpt);
4
                 parser->readBin(readBuffer+rpt,size-3);
5
-                extractH264FrameType(2,readBuffer,rpt+size-3,&flags,&_H264Recovery); // Nal size is not used in that case
6
+                extractH264FrameType(readBuffer,rpt+size-3,&flags,NULL,NULL,&_H264Recovery);
7
                 if(flags & AVI_KEY_FRAME)
8
                 {
9
                     printf("[MKV/H264] Frame %" PRIu32" is a keyframe\n",(uint32_t)Track->index.size());
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv_audio.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv_audio.cpp Changed
36
 
1
@@ -18,6 +18,7 @@
2
 
3
 #include "ADM_mkv.h"
4
 #include "ADM_a52info.h"
5
+#include "ADM_eac3info.h"
6
 #include "ADM_dcainfo.h"
7
 
8
 #include "ADM_vidMisc.h"
9
@@ -46,6 +47,26 @@
10
   _currentLace=_maxLace=0;
11
   goToBlock(0);
12
 
13
+  /* Check that it is really EAC3 */
14
+  if(_track->wavHeader.encoding==WAV_EAC3)
15
+  {
16
+     if(getPacket(ac3Buffer, &len, 20000, &timecode))
17
+     {
18
+        uint32_t syncoff;
19
+        ADM_EAC3_INFO efo;
20
+        if(ADM_EAC3GetInfo(ac3Buffer, len, &syncoff, &efo, false))
21
+        {
22
+            track->wavHeader.channels=efo.channels;
23
+            track->wavHeader.frequency=efo.frequency;
24
+            track->wavHeader.byterate=efo.byterate;
25
+        }else
26
+        {
27
+            track->wavHeader.encoding=WAV_AC3;
28
+        }
29
+     }
30
+     goToBlock(0);
31
+  }
32
+
33
   /* In case of AC3, do not trust the header...*/
34
   if(_track->wavHeader.encoding==WAV_AC3)
35
   {
36
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.cpp Changed
28
 
1
@@ -89,7 +89,7 @@
2
     id=0;
3
     memset(&_rdWav,0,sizeof(_rdWav));
4
     delay=0;
5
-
6
+    totalDataSize=0;
7
 }
8
 MP4Track::~MP4Track()
9
 {
10
@@ -380,7 +380,7 @@
11
         if(!lookupMainAtoms((void*) atom))
12
         {
13
           printf("Cannot find needed atom\n");   
14
-          if(!_tracks[0].fragments.size() || !indexVideoFragments(0)) // fixme audio
15
+          if(!_tracks[0].fragments.size() || !indexVideoFragments(0))
16
           {
17
             fclose(_fd);
18
             _fd=NULL;
19
@@ -392,6 +392,8 @@
20
               {
21
                   if(_tracks[i].fragments.size())
22
                       indexAudioFragments(i);
23
+                  if(_tracks[i].index==NULL)
24
+                      nbAudioTrack--;
25
               }
26
           }
27
         }
28
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4.h Changed
26
 
1
@@ -75,6 +75,7 @@
2
     uint32_t    extraDataSize;
3
     uint8_t     *extraData;
4
     WAVHeader   _rdWav;
5
+    uint64_t    totalDataSize;
6
     int64_t     delay; // in movie scale units
7
     int64_t     startOffset; // media time in track scale units
8
     std::vector <mp4Fragment>     fragments;
9
@@ -122,6 +123,7 @@
10
 #define _3GP_MAX_TRACKS 8
11
 #define VDEO _tracks[0]
12
 #define ADIO _tracks[nbAudioTrack+1]._rdWav
13
+#define AUDIO_BYTERATE_UNSET 0xFFFFFFFF
14
 /**
15
  * 
16
  */
17
@@ -193,7 +195,7 @@
18
           int                           lookupIndex(int desc)          ;
19
           bool                          parseTrun(int trackNo,adm_atom &son,const mp4TrafInfo &info);
20
           uint8_t                       decodeVideoAtom(void *ztom);
21
-          uint8_t                       parseMdia(void *ztom,uint32_t *trackType);
22
+          uint8_t                       parseMdia(void *ztom,uint32_t *trackType,uint32_t *trackId);
23
           uint8_t                       parseEdts(void *ztom,uint32_t trackType);
24
           uint8_t                       parseStbl(void *ztom,uint32_t trackType,uint32_t trackScale);
25
           uint8_t                       decodeEsds(void *ztom,uint32_t trackType);
26
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Analyzer.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Analyzer.cpp Changed
129
 
1
@@ -208,6 +208,7 @@
2
     uint32_t container;
3
     uint32_t w,h;
4
     uint32_t trackType=TRACK_OTHER;
5
+    uint32_t trackId=0;
6
     _currentDelay=0;
7
     _currentStartOffset=0;
8
 
9
@@ -235,7 +236,8 @@
10
                 else
11
                     tom->skipBytes(8);
12
 
13
-                aprintf("Track Id: %" PRIu32"\n", son.read32());
14
+                trackId = son.read32();
15
+                aprintf("[parseTrack] Track Id: %" PRIu32"\n", trackId);
16
                 son.skipBytes(4);
17
 
18
                 uint64_t duration = (version == 1) ? son.read64() : son.read32();
19
@@ -253,7 +255,7 @@
20
             }
21
             case ADM_MP4_MDIA:
22
             {
23
-                if(!parseMdia(&son,&trackType))
24
+                if(!parseMdia(&son,&trackType,&trackId))
25
                     return false;
26
                 break;
27
             }
28
@@ -274,7 +276,7 @@
29
       \fn parseMdia
30
       \brief Parse mdia header
31
 */
32
-uint8_t MP4Header::parseMdia(void *ztom,uint32_t *trackType)
33
+uint8_t MP4Header::parseMdia(void *ztom,uint32_t *trackType,uint32_t *trackId)
34
 {
35
     adm_atom *tom=(adm_atom *)ztom;
36
     ADMAtoms id;
37
@@ -347,10 +349,14 @@
38
                         _movieDuration=trackDuration;
39
                         _videoScale=trackScale;
40
                         _tracks[0].scale=_videoScale;
41
+                        _tracks[0].id=*trackId;
42
                         break;
43
                     case MKFCCR('s','o','u','n'): // 'soun'
44
                         _tracks[1+nbAudioTrack].delay=_currentDelay;
45
                         _tracks[1+nbAudioTrack].startOffset=_currentStartOffset;
46
+                        _tracks[1+nbAudioTrack].id=*trackId;
47
+                        if(!*trackId)
48
+                            ADM_warning("Invalid track ID for audio track %d\n",1+nbAudioTrack);
49
                         *trackType=TRACK_AUDIO;
50
                         ADM_info("hdlr audio found \n ");
51
                         break;
52
@@ -851,7 +857,8 @@
53
                                     while(!son.isDone())
54
                                     {
55
                                         adm_atom avcc(&son);
56
-                                        printf("Reading hev1, got %s\n",fourCC::tostringBE(avcc.getFCC()));
57
+                                        const char *hevc = (entryName == MKFCCR('h','e','v','1'))? "hev1" : "hvc1";
58
+                                        printf("Reading %s, got %s\n",hevc,fourCC::tostringBE(avcc.getFCC()));
59
                                         if( avcc.getFCC()== MKFCCR('h','v','c','C'))
60
                                         {
61
                                             VDEO.extraDataSize=avcc.getRemainingSize();
62
@@ -938,7 +945,7 @@
63
                             // Put some defaults
64
                             ADIO.encoding=1234;
65
                             ADIO.frequency=44100;
66
-                            ADIO.byterate=128000>>3;
67
+                            ADIO.byterate=AUDIO_BYTERATE_UNSET;
68
                             ADIO.channels=2;
69
                             ADIO.bitspersample=16;
70
 
71
@@ -1029,7 +1036,10 @@
72
                                 case MKFCCR('a','c','-','3'):
73
                                 case MKFCCR('s','a','c','3'):
74
                                     audioCodec(AC3);
75
-                                    ADIO.byterate=128000>>3;
76
+
77
+                                    break;
78
+                                case MKFCCR('e','c','-','3'):
79
+                                    audioCodec(EAC3);
80
 
81
                                     break;
82
                                 case MKFCCR('l','p','c','m'):
83
@@ -1068,7 +1078,6 @@
84
                                     break;
85
                                 case MKFCCR('.','m','p','3'): //.mp3
86
                                     audioCodec(MP3);
87
-                                    ADIO.byterate=128000>>3;
88
 
89
                                     break;
90
                                 case MKFCCR('r','a','w',' '):
91
@@ -1280,18 +1289,29 @@
92
               info.SzIndentical=info.SzIndentical*ADIO.channels;
93
             }
94
 #endif
95
+            if(nbAudioTrack>=_3GP_MAX_TRACKS-1)
96
+            {
97
+                ADM_warning("Maximum number of tracks reached, cannot add audio track.\n");
98
+                r=1;
99
+                break;
100
+            }
101
             r=indexify(&(_tracks[1+nbAudioTrack]),trackScale,&info,1,&nbo);
102
             ADM_info("Indexed audio, nb blocks:%u\n",nbo);
103
+            nbAudioTrack++;
104
+            _tracks[nbAudioTrack].scale=trackScale;
105
             if(r)
106
             {
107
-                nbo=_tracks[1+nbAudioTrack].nbIndex;
108
-                if(nbo)
109
-                    _tracks[1+nbAudioTrack].nbIndex=nbo;
110
-                else
111
-                    _tracks[1+nbAudioTrack].nbIndex=info.nbSz;
112
-                ADM_info("Indexed audio, nb blocks:%u (final)\n",_tracks[1+nbAudioTrack].nbIndex);
113
-                _tracks[1+nbAudioTrack].scale=trackScale;
114
-                nbAudioTrack++;
115
+                nbo=_tracks[nbAudioTrack].nbIndex;
116
+                if(!nbo)
117
+                    _tracks[nbAudioTrack].nbIndex=info.nbSz;
118
+                ADM_info("Indexed audio, nb blocks:%u (final)\n",_tracks[nbAudioTrack].nbIndex);
119
+            }else
120
+            {
121
+                if(_tracks[nbAudioTrack].index)
122
+                {
123
+                    delete [] _tracks[nbAudioTrack].index;
124
+                    _tracks[nbAudioTrack].index=NULL;
125
+                }
126
             }
127
 
128
             break;
129
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Fragments.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Fragments.cpp Changed
119
 
1
@@ -85,7 +85,7 @@
2
 {        
3
         ADMAtoms id;
4
         uint32_t container;
5
-        aprintf("[TRAF]\n");
6
+        aprintf("[TRAF] Starting at 0x%" PRIx64"\n",moofStart);
7
         uint32_t trafFlags=0;
8
         mp4TrafInfo info;
9
         int trackIndex=-1;
10
@@ -128,11 +128,12 @@
11
                             info.baseOffset=moofStart;
12
                             aprintf("base is moof at %llx\n",(long long int)info.baseOffset);
13
                     }
14
-                    trackIndex=lookupIndex((!info.trackID)? 0 : info.trackID-1);
15
+                    trackIndex=lookupIndex(info.trackID);
16
                     if(-1==trackIndex)
17
                     {
18
-                        ADM_warning("Cannot find track for %d\n",info.sampleDesc);
19
+                        ADM_warning("Cannot find track with id %d\n",info.trackID);
20
                     }
21
+                    break;
22
                 }
23
                 case ADM_MP4_TFDT:
24
                 {
25
@@ -148,8 +149,6 @@
26
                     break;
27
                 default:break;
28
             }
29
-           
30
-            aprintf("[MOOF]Found atom %s \n",fourCC::tostringBE(son.getFCC()));
31
             son.skipAtom();
32
         }     
33
         tom.skipAtom();
34
@@ -171,14 +170,14 @@
35
     std::vector <mp4Fragment>   &fragList=_tracks[trackNo].fragments;
36
     if(flags & 0x1)
37
     {
38
-            firstOffset+=tom.read32()&0xffff; // Signed!
39
+            firstOffset+=tom.read32(); // Signed!
40
     }
41
     if(flags & 0x4)    
42
             firstSampleFlags=tom.read32(); // Signed!
43
     else 
44
             firstSampleFlags=info.defaultFlags;
45
    
46
-    aprintf("[TRUN] count=%d, offset=0x%x,synth=0x%x, flags=%x\n",count,firstOffset,(long long int)firstOffset+info.baseOffset,firstSampleFlags);
47
+    aprintf("[TRUN] count=%d, offset=0x%" PRIx64", base=0x%" PRIx64", flags=%x\n",count,firstOffset,info.baseOffset,firstSampleFlags);
48
     for(int i=0;i<count;i++)
49
     {
50
        mp4Fragment frag;
51
@@ -213,16 +212,16 @@
52
     trk->index=new MP4Index[trk->nbIndex];
53
     uint64_t sum=0;
54
     int intra=0;
55
-    for(int i=0;i<trk->nbIndex;i++)
56
+    for(uint32_t i=0;i<trk->nbIndex;i++)
57
     {
58
         MP4Index *dex=trk->index+i;
59
         dex->offset=fragList[i].offset;
60
         dex->size=fragList[i].size;
61
-        
62
+        trk->totalDataSize+=fragList[i].size;
63
+
64
         double dts=sum;
65
         double ctts=fragList[i].composition;
66
-        dts=sum;
67
-        
68
+
69
         dts=dts/_videoScale;
70
         dts*=1000000.;
71
         ctts=ctts/_videoScale;
72
@@ -237,7 +236,8 @@
73
         else
74
             dex->intra=0;    
75
         sum+=fragList[i].duration;
76
-        aprintf("[FRAG] offset=0x%llx size=%d dts=%s pts=%s\n",dex->offset,(int)dex->size,ADM_us2plain(dex->dts),ADM_us2plain(dex->pts));
77
+        aprintf("[FRAG] Video entry %u offset=0x%llx size=%d dts=%s ",i,dex->offset,(int)dex->size,ADM_us2plain(dex->dts));
78
+        aprintf("pts=%s\n",ADM_us2plain(dex->pts));
79
     }
80
     printf("Found %d intra\n",intra);
81
     MP4Index *ff=trk->index;
82
@@ -258,20 +258,31 @@
83
     trk->nbIndex=fragList.size();
84
     trk->index=new MP4Index[trk->nbIndex];
85
     uint64_t sum=0;
86
-    for(int i=0;i<trk->nbIndex;i++)
87
+    for(uint32_t i=0;i<trk->nbIndex;i++)
88
     {
89
         MP4Index *dex=trk->index+i;
90
         dex->offset=fragList[i].offset;
91
         dex->size=fragList[i].size;
92
+        trk->totalDataSize+=fragList[i].size;
93
         
94
         double dts=sum;
95
-        dts=sum;
96
+        dts/=trk->scale;
97
+        dts*=1000000.;
98
         dex->dts=dts;
99
-        dex->pts=dex->dts+fragList[i].composition*10;
100
+        dex->pts=dex->dts;
101
+        if(fragList[i].composition)
102
+        {
103
+            dts=fragList[i].composition;
104
+            dts/=trk->scale;
105
+            dts*=1000000.;
106
+            dex->pts+=dts;
107
+        }
108
         dex->intra=0;    
109
         sum+=fragList[i].duration;
110
-        aprintf("[FRAG] offset=0x%llx size=%d dts=%s pts=%s\n",dex->offset,(int)dex->size,ADM_us2plain(dex->dts),ADM_us2plain(dex->pts));
111
-    }   
112
+        aprintf("[FRAG] Audio entry %d offset=0x%llx size=%d dts=%s ",i,dex->offset,(int)dex->size,ADM_us2plain(dex->dts));
113
+        aprintf("pts=%s\n",ADM_us2plain(dex->pts));
114
+    }
115
+    fragList.clear();
116
     return true;
117
 }
118
 // EOF
119
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Indexer.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Indexer.cpp Changed
45
 
1
@@ -122,14 +122,14 @@
2
 bool   MP4Header::processAudio( MP4Track *track,  uint32_t trackScale,  
3
                                     MPsampleinfo *info,uint32_t *nbOut)
4
 {
5
-    uint64_t audioClock=0;
6
-    
7
-    uint32_t totalBytes=info->SzIndentical*info->nbSz;
8
+    uint64_t totalBytes=info->SzIndentical*info->nbSz;
9
     uint32_t totalSamples=0;
10
     double   skewFactor=1;
11
-    ADM_info("All the same size: %u (total size %u bytes)\n",info->SzIndentical,totalBytes);
12
+    ADM_info("All the same size: %u (total size %" PRIu64" bytes)\n",info->SzIndentical,totalBytes);
13
     ADM_info("Byte per frame =%d\n",(int)info->bytePerFrame);
14
     ADM_info("SttsC[0] = %d, sttsN[0]=%d\n",info->SttsC[0],info->SttsN[0]);
15
+
16
+    track->totalDataSize=totalBytes;
17
     
18
     if(info->nbStts!=1) 
19
     {
20
@@ -204,7 +204,8 @@
21
     if(info->nbCo)
22
         track->index[0].pts=0;
23
     ADM_info("Found %u bytes, spread over %d blocks\n",totalBytes,info->nbCo);
24
-    //
25
+    track->totalDataSize=totalBytes;
26
+
27
     // split large chunk into smaller ones if needed
28
     splitAudio(track,info, trackScale);
29
 
30
@@ -291,12 +292,14 @@
31
             aprintf("\t size for all %u frames : %u\n",info->nbSz,info->SzIndentical);
32
             for(i=0;i<info->nbSz;i++)
33
                 track->index[i].size=info->SzIndentical;
34
+            track->totalDataSize+=info->nbSz*info->SzIndentical;
35
         }else // Different size
36
         {
37
             for(i=0;i<info->nbSz;i++)
38
             {
39
                 track->index[i].size=info->Sz[i];
40
                 aprintf("\t size : %d : %u\n",i,info->Sz[i]);
41
+                track->totalDataSize+=info->Sz[i];
42
             }
43
         }
44
    // if no sample to chunk we map directly
45
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4audio.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4audio.cpp Changed
71
 
1
@@ -44,34 +44,48 @@
2
 */
3
  ADM_mp4AudioAccess::ADM_mp4AudioAccess(const char *name,MP4Track *track)
4
 {
5
-   _nb_chunks=track->nbIndex;
6
-   _fd=ADM_fopen(name,"rb");
7
+    _nb_chunks=track->nbIndex;
8
+    _fd=ADM_fopen(name,"rb");
9
     ADM_assert(_fd);
10
-   _current_index=0;
11
-   _index=track->index;
12
-   _msg_counter = 0;
13
-   _msg_ratelimit = new ADMCountdown(200);
14
-   _msg_ratelimit->reset();
15
+    _current_index=0;
16
+    _index=track->index;
17
+    _msg_counter = 0;
18
+    _msg_ratelimit = new ADMCountdown(200);
19
+    _msg_ratelimit->reset();
20
 
21
-   extraDataLen=track->extraDataSize;
22
-   extraData=track->extraData;
23
+    extraDataLen=track->extraDataSize;
24
+    extraData=track->extraData;
25
 
26
-   // Check if MP3 track is actually MP2
27
-   if (track->_rdWav.encoding == WAV_MP3 && _nb_chunks && _index[0].size >= 4)
28
-   {
29
-       uint8_t sample[4];
30
-
31
-       fseeko(_fd, _index[0].offset, SEEK_SET);
32
-       if(fread(&sample, 1, 4, _fd) < 4) return;
33
+    // Check if MP3 track is actually MP2
34
+    if(track->_rdWav.encoding == WAV_MP3 && _nb_chunks && _index[0].size >= 4)
35
+    {
36
+        uint8_t sample[4];
37
 
38
-       uint32_t fcc = sample[0] << 24 | sample[1] << 16 | sample[2] << 8 | sample[3];
39
-       int layer = 4 - ((fcc >> 17) & 0x3);
40
+        fseeko(_fd, _index[0].offset, SEEK_SET);
41
+        if(fread(&sample, 1, 4, _fd) < 4) return;
42
 
43
-       if (layer == 2)
44
-           track->_rdWav.encoding = WAV_MP2;
45
-   }
46
+        uint32_t fcc = sample[0] << 24 | sample[1] << 16 | sample[2] << 8 | sample[3];
47
+        int layer = 4 - ((fcc >> 17) & 0x3);
48
 
49
+        if (layer == 2)
50
+            track->_rdWav.encoding = WAV_MP2;
51
+    }
52
 
53
+    if(track->_rdWav.byterate == AUDIO_BYTERATE_UNSET)
54
+    {
55
+        track->_rdWav.byterate = 128000 >> 3; // dummy value
56
+        ADM_info("Estimating audio byterate...\n");
57
+        uint64_t duration = _index[_nb_chunks-1].dts;
58
+        if(duration != ADM_NO_PTS && duration > 100000) // at least 0.1 s
59
+        {
60
+            double d = duration;
61
+            d /= 1000;
62
+            d = track->totalDataSize / d;
63
+            d *= 1000;
64
+            if(d > 0 && d < (192000 * 32)) // anything beyond 7.1 at 192 kHz float must be clearly bogus
65
+                track->_rdWav.byterate = (uint32_t)d;
66
+        }
67
+    }
68
 }
69
 /**
70
     \fn ADM_mp4AudioAccess
71
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegPS/ADM_ps.cpp Changed
57
 
1
@@ -43,7 +43,8 @@
2
     if(r==ADM_IGN)
3
     {
4
         ADM_warning("Indexing cancelled by the user, deleting the index file. Bye.\n");
5
-        remove(idxName);
6
+        if(!ADM_eraseFile(idxName))
7
+            ADM_warning("Could not delete %s\n",idxName);
8
         free(idxName);
9
         return r;
10
     }
11
@@ -59,6 +60,7 @@
12
     char *type;
13
     uint64_t startDts;
14
     uint32_t version=0;
15
+    bool reindex=false;
16
     indexFile index;
17
     r=0;
18
 
19
@@ -77,7 +79,8 @@
20
     version=index.getAsUint32("Version");
21
     if(version!=ADM_INDEX_FILE_VERSION)
22
     {
23
-        GUI_Error_HIG(QT_TRANSLATE_NOOP("psdemuxer","Error"), QT_TRANSLATE_NOOP("psdemuxer","This file's index has been created with an older version of avidemux.\nPlease delete the idx2 file and reopen."));
24
+        if(GUI_Question(QT_TRANSLATE_NOOP("psdemuxer","This file's index has been created with an older version of avidemux.\nThe file must be re-indexed. Proceed?")))
25
+            reindex=true;
26
         goto abt;
27
     }
28
     type=index.getAsString("Type");
29
@@ -162,11 +165,22 @@
30
     }
31
 abt:
32
     index.close();
33
-    free(idxName);
34
-    if(r)
35
-        ADM_info("Loaded %s successfully\n",name);
36
-    else
37
-        ADM_warning("Loading %s failed\n",name);
38
+    if(reindex)
39
+    {
40
+        uint8_t success=ADM_eraseFile(idxName);
41
+        free(idxName);
42
+        if(success)
43
+            r=open(name);
44
+        else
45
+            ADM_error("Can't delete old index file.\n");
46
+    }else
47
+    {
48
+        free(idxName);
49
+        if(r)
50
+            ADM_info("Loaded %s successfully\n",name);
51
+        else
52
+            ADM_warning("Loading %s failed\n",name);
53
+    }
54
     return r;
55
 }
56
 
57
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_ts.cpp Changed
82
 
1
@@ -25,9 +25,7 @@
2
 #define MY_CLASS tsHeader
3
 #include "ADM_coreDemuxerMpegTemplate.cpp.h"
4
 
5
-
6
-
7
-uint32_t ADM_UsecFromFps1000(uint32_t fps1000);
8
+extern uint8_t tsIndexer(const char *file);
9
 
10
 /**
11
       \fn open
12
@@ -37,14 +35,35 @@
13
 uint8_t tsHeader::open(const char *name)
14
 {
15
     char *idxName=(char *)malloc(strlen(name)+6);
16
-    bool r=false;
17
+    uint8_t r=1;
18
+
19
+    sprintf(idxName,"%s.idx2",name);
20
+    if(!ADM_fileExist(idxName))
21
+        r=tsIndexer(name);
22
+    if(r==ADM_IGN)
23
+    {
24
+        ADM_warning("Indexing cancelled by the user, deleting the index file. Bye.\n");
25
+        if(!ADM_eraseFile(idxName))
26
+            ADM_warning("Could not delete %s\n",idxName);
27
+        free(idxName);
28
+        return r;
29
+    }
30
+    if(!r)
31
+    {
32
+        ADM_error("Indexing of %s failed, aborting\n",name);
33
+        // Currently, indexer returns 0 only if it can't create the .idx2 file, nothing to remove.
34
+        free(idxName);
35
+        return r;
36
+    }
37
+
38
     FP_TYPE appendType=FP_DONT_APPEND;
39
-    uint32_t append;
40
     char *type;
41
     uint64_t startDts;
42
     uint32_t version=0;
43
+    bool reindex=false;
44
+    uint32_t append;
45
+    r=0;
46
 
47
-    sprintf(idxName,"%s.idx2",name);
48
     indexFile index;
49
     if(!index.open(idxName))
50
     {
51
@@ -67,7 +86,8 @@
52
     version=index.getAsUint32("Version");
53
     if(version!=ADM_INDEX_FILE_VERSION)
54
     {
55
-        GUI_Error_HIG(QT_TRANSLATE_NOOP("tsdemuxer","Error"),QT_TRANSLATE_NOOP("tsdemuxer","This file's index has been created with an older version of avidemux.\nPlease delete the idx2 file and reopen."));
56
+        if(GUI_Question(QT_TRANSLATE_NOOP("tsdemuxer","This file's index has been created with an older version of avidemux.\nThe file must be re-indexed. Proceed?")))
57
+            reindex=true;
58
         goto abt;
59
     }
60
     append=index.getAsUint32("Append");
61
@@ -127,9 +147,18 @@
62
         }
63
     }
64
 abt:
65
-    free(idxName);
66
     index.close();
67
-    printf("[tsDemuxer] Loaded %d\n",r);
68
+    if(reindex)
69
+    {
70
+        uint8_t success=ADM_eraseFile(idxName);
71
+        free(idxName);
72
+        if(success)
73
+            r=open(name);
74
+        else
75
+            ADM_error("Can't delete old index file.\n");
76
+    }else
77
+        free(idxName);
78
+    printf("[tsDemuxer] open() returned %d\n",r);
79
     return r;
80
 }
81
 
82
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndex.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndex.cpp Changed
29
 
1
@@ -43,8 +43,7 @@
2
 */
3
 uint8_t   tsIndexer(const char *file)
4
 {
5
-bool r;
6
-
7
+    uint8_t r;
8
     ADM_TS_TRACK *tracks;
9
     uint32_t nbTracks;
10
     listOfTsAudioTracks audioTrack;
11
@@ -55,7 +54,7 @@
12
             if(TS_guessContent(file,&nbTracks,&tracks)==false) 
13
             {
14
                 printf("[Ts Indexer] Brute force scan failed\n");
15
-                return false;
16
+                return 0;
17
             }
18
     }
19
     ADM_assert(tracks);
20
@@ -102,7 +101,7 @@
21
     if(!dx)
22
     {
23
         ADM_warning("Unsupported video codec \n");
24
-        r=false;
25
+        r=0;
26
     }else
27
     {
28
         r=dx->run( file,&(tracks[0]));
29
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndex.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndex.h Changed
46
 
1
@@ -144,7 +144,7 @@
2
 public:
3
                 TsIndexerBase(listOfTsAudioTracks *tr);
4
         virtual ~TsIndexerBase();
5
-virtual bool    run(const char *file,ADM_TS_TRACK *videoTrac)=0;                
6
+virtual uint8_t run(const char *file,ADM_TS_TRACK *videoTrac)=0;
7
         bool    writeVideo(TSVideo *video,ADM_TS_TRACK_TYPE trkType);
8
         bool    writeAudio(void);
9
         bool    writeSystem(const char *filename,bool append=false);
10
@@ -190,7 +190,7 @@
11
                 {
12
                   
13
                 } 
14
-        bool    run(const char *file,ADM_TS_TRACK *videoTrac);
15
+        uint8_t run(const char *file,ADM_TS_TRACK *videoTrac);
16
         bool    updatePicStructure(TSVideo &video,const uint32_t t)
17
                         {
18
                                             switch(t)
19
@@ -223,7 +223,7 @@
20
                         {
21
                           
22
                         }
23
-        bool            run(const char *file,ADM_TS_TRACK *videoTrac);
24
+        uint8_t         run(const char *file,ADM_TS_TRACK *videoTrac);
25
                         TsIndexerVC1(listOfTsAudioTracks *tr) : TsIndexerBase(tr)
26
                         {
27
 
28
@@ -243,7 +243,7 @@
29
                 {
30
                   
31
                 }
32
-        bool    run(const char *file,ADM_TS_TRACK *videoTrac);
33
+        uint8_t run(const char *file,ADM_TS_TRACK *videoTrac);
34
                 TsIndexerMpeg2(listOfTsAudioTracks *tr) : TsIndexerBase(tr)
35
                 {
36
 
37
@@ -271,7 +271,7 @@
38
                 {
39
                   
40
                 }
41
-        bool    run(const char *file,ADM_TS_TRACK *videoTrac);
42
+        uint8_t run(const char *file,ADM_TS_TRACK *videoTrac);
43
                 TsIndexerH265(listOfTsAudioTracks *tr) : TsIndexerBase(tr)
44
                 {
45
 
46
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH264.cpp Changed
152
 
1
@@ -85,53 +85,48 @@
2
     TS_PESpacket SEI_nal(0);
3
     while(keepRunning)
4
     {
5
-      int startCode=pkt->findStartCode();
6
+        int startCode=pkt->findStartCode();
7
 
8
-      if(!pkt->stillOk())
9
-      {
10
-          keepRunning=false;
11
-          continue;
12
-      }
13
-      if(startCode&0x80) continue; // Marker missing
14
-      startCode&=0x1f;
15
-      if(startCode!=NAL_SPS) 
16
-          continue;
17
+        if(!pkt->stillOk())
18
+        {
19
+            keepRunning=false;
20
+            continue;
21
+        }
22
+        if(startCode&0x80) continue; // Marker missing
23
+        startCode&=0x1f;
24
+        if(startCode!=NAL_SPS)
25
+            continue;
26
 
27
         // Got SPS!
28
-
29
-        uint32_t xA,xR;
30
         // Get info
31
         pkt->getInfo(&tmpInfo);
32
         // Read just enough...
33
+        SEI_nal.empty();
34
+        uint32_t code=0xffff+0xffff0000;
35
+        while(((code&0xffffff)!=1) && pkt->stillOk())
36
+        {
37
+            uint8_t r=pkt->readi8();
38
+            code=(code<<8)+r;
39
+            SEI_nal.pushByte(r);
40
+        }
41
+        if(!pkt->stillOk()) break;
42
+        pkt->seek(tmpInfo.startAt,tmpInfo.offset-5);
43
+        if (extractSPSInfo(SEI_nal.payload, SEI_nal.payloadSize-3,&spsInfo))
44
         {
45
-          SEI_nal.empty();
46
-          uint32_t code=0xffff+0xffff0000;
47
-          while(((code&0xffffff)!=1) && pkt->stillOk())
48
-          {
49
-                  uint8_t r=pkt->readi8();
50
-                  code=(code<<8)+r;
51
-                  SEI_nal.pushByte(r);
52
-          }
53
-          if(!pkt->stillOk()) break;;
54
-          pkt->seek(tmpInfo.startAt,tmpInfo.offset-5);
55
-          if (extractSPSInfo(SEI_nal.payload, SEI_nal.payloadSize-4,&spsInfo))
56
-          {
57
             ADM_info("[TsIndexer] Found video %" PRIu32"x%" PRIu32", fps=%" PRIu32"\n",video.w,video.h,video.fps);
58
             ADM_info("[TsIndexer] SPS says %" PRIu32"x%" PRIu32"\n",spsInfo.width,spsInfo.height);
59
             seq_found=1;
60
             video.w=spsInfo.width;
61
             video.h=spsInfo.height;
62
             video.fps=spsInfo.fps1000;
63
-            xA=spsInfo.darNum;
64
-            xR=spsInfo.darDen;
65
             writeVideo(&video,ADM_TS_H264);
66
             writeAudio();
67
             qfprintf(index,"[Data]");
68
             // Rewind
69
 
70
             break;
71
-        };
72
-      }
73
+        }
74
+        pkt->seek(tmpInfo.startAt,tmpInfo.offset);
75
     }
76
     return seq_found;
77
 }
78
@@ -139,7 +134,7 @@
79
     \fn run
80
     \brief Index H264 stream
81
 */
82
-bool TsIndexerH264::run(const char *file, ADM_TS_TRACK *videoTrac)
83
+uint8_t TsIndexerH264::run(const char *file, ADM_TS_TRACK *videoTrac)
84
 {
85
     bool seq_found=false;
86
     bool firstSps=true;
87
@@ -147,7 +142,7 @@
88
     TSVideo video;
89
     indexerData data;
90
 
91
-    bool result=false;
92
+    uint8_t result=0;
93
     bool bAppend=false;
94
 
95
     beginConsuming=0;
96
@@ -170,8 +165,8 @@
97
 
98
     if(!index)
99
     {
100
-        printf("[PsIndex] Cannot create %s\n",indexName.c_str());
101
-        return false;
102
+        ADM_error("[TsIndexerH264] Cannot create %s\n",indexName.c_str());
103
+        return 0;
104
     }
105
 
106
     uint64_t lastAudOffset=0;
107
@@ -292,7 +287,10 @@
108
 
109
                 decodingImage=false;
110
                 if(!addUnit(data,unitTypeSei,thisUnit,startCodeLength))
111
-                    keepRunning=false;
112
+                {
113
+                    result=ADM_IGN;
114
+                    goto the_end;
115
+                }
116
                 fourBytes=true;
117
                 goto resume;
118
             }
119
@@ -329,7 +327,10 @@
120
                     }
121
                 }
122
                 if(!addUnit(data,unitTypeSps,thisUnit,startCodeLength))
123
-                    keepRunning=false;
124
+                {
125
+                    result=ADM_IGN;
126
+                    goto the_end;
127
+                }
128
             }
129
                 break;
130
 
131
@@ -385,7 +386,10 @@
132
                 audCount=0;
133
 
134
                 if(!addUnit(data,unitTypePic,thisUnit,startCodeLength))
135
-                    keepRunning=false;
136
+                {
137
+                    result=ADM_IGN;
138
+                    goto the_end;
139
+                }
140
                 // reset to default
141
                 thisUnit.imageStructure=pictureFrame;
142
                 thisUnit.recoveryCount=0xff;
143
@@ -396,7 +400,7 @@
144
                 break;
145
         }
146
     } // End while
147
-    result=true;
148
+    result=1;
149
 the_end:
150
     printf("\n");
151
     qfprintf(index,"\n[End]\n");
152
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexH265.cpp Changed
86
 
1
@@ -106,8 +106,7 @@
2
  */
3
 static bool findGivenStartCode(tsPacketLinearTracker *pkt,int match, const char *name)
4
 {
5
-    bool keepRunning=true;    
6
-    while(keepRunning)
7
+    while(true)
8
     {
9
       int startCode=pkt->findStartCode();
10
       if(!pkt->stillOk())
11
@@ -157,7 +156,6 @@
12
  */
13
 bool TsIndexerH265::findH265VPS(tsPacketLinearTracker *pkt,TSVideo &video)
14
 {    
15
-    bool keepRunning=true;
16
     dmxPacketInfo packetInfo;
17
     uint8_t headerBuffer[512+5]={0,0,0,1,(NAL_H265_VPS<<1)}; // we are forcing some bits to be zero...
18
     // This is a bit naive...
19
@@ -282,7 +280,7 @@
20
     \fn run
21
     \brief Index H265 stream
22
 */
23
-bool TsIndexerH265::run(const char *file,ADM_TS_TRACK *videoTrac)
24
+uint8_t TsIndexerH265::run(const char *file,ADM_TS_TRACK *videoTrac)
25
 {
26
     TSVideo video;
27
     indexerData data;
28
@@ -310,7 +308,7 @@
29
         return false;
30
     }
31
 
32
-    bool result=false;
33
+    uint8_t result=0;
34
     bool bAppend=false;
35
     bool seq_found=false;
36
     bool firstSps=true;
37
@@ -336,7 +334,6 @@
38
     fullSize=pkt->getSize();
39
     gui=createProcessing(QT_TRANSLATE_NOOP("tsdemuxer","Indexing"),pkt->getSize());
40
     int lastRefIdc=0;
41
-    bool keepRunning=true;
42
     //******************
43
     // 1 search SPS
44
     //******************
45
@@ -355,7 +352,7 @@
46
     // 2 Index
47
     //******************
48
     bool fourBytes;
49
-    while(keepRunning)
50
+    while(true)
51
     {
52
         fourBytes=false;
53
         int startCode=pkt->findStartCode2(fourBytes);
54
@@ -424,7 +421,10 @@
55
                     thisUnit.imageType=picType;
56
                     thisUnit.unitType=unitTypePic;
57
                     if(!addUnit(data,unitTypePic,thisUnit,startCodeLength))
58
-                        keepRunning=false;
59
+                    {
60
+                        result=ADM_IGN;
61
+                        goto the_end;
62
+                    }
63
                     // reset to default
64
                     thisUnit.imageStructure=pictureFrame;
65
                     thisUnit.recoveryCount=0xff;
66
@@ -455,14 +455,17 @@
67
                     thisUnit.consumedSoFar=lastAudOffset;
68
                 }
69
                 if(!addUnit(data,unitTypeSps,thisUnit,startCodeLength))
70
-                    keepRunning=false;
71
+                {
72
+                    result=ADM_IGN;
73
+                    goto the_end;
74
+                }
75
                 break;
76
             }
77
             default:
78
                 break;
79
         }
80
     } // End while
81
-    result=true;
82
+    result=1;
83
 the_end:
84
         printf("\n");
85
         qfprintf(index,"\n[End]\n");
86
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexMpeg2.cpp Changed
110
 
1
@@ -37,7 +37,7 @@
2
 /**
3
     \fn runMpeg2
4
 */  
5
-bool TsIndexerMpeg2::run(const char *file,ADM_TS_TRACK *videoTrac)
6
+uint8_t TsIndexerMpeg2::run(const char *file,ADM_TS_TRACK *videoTrac)
7
 {
8
 uint32_t temporal_ref,val;
9
 uint8_t buffer[50*1024];
10
@@ -50,6 +50,7 @@
11
 indexerData  data;    
12
 dmxPacketInfo tmpInfo;
13
 
14
+uint8_t result=1;
15
 bool bAppend=false;
16
 
17
     listOfUnits.clear();
18
@@ -70,8 +71,8 @@
19
 
20
     if(!index)
21
     {
22
-        printf("[PsIndex] Cannot create %s\n",indexName.c_str());
23
-        return false;
24
+        printf("[TsIndexerMpeg2] Cannot create %s\n",indexName.c_str());
25
+        return 0;
26
     }
27
     
28
     pkt=new tsPacketLinearTracker(videoTrac->trackPid, audioTracks);
29
@@ -93,13 +94,12 @@
30
     fullSize=pkt->getSize();
31
     int startCode;
32
     decodingImage=false;
33
-    bool keepRunning=true;
34
 #define likely(x) x
35
 #define unlikely(x) x
36
     int lastStartCode=0xb3;
37
 
38
 #define REMEMBER() { lastStartCode=startCode;}   
39
-      while(keepRunning)
40
+      while(true)
41
       {
42
         startCode=pkt->findStartCode();
43
         if(!pkt->stillOk()) break;
44
@@ -115,7 +115,10 @@
45
                                 pkt->getInfo(&thisUnit.packetInfo);
46
                                 thisUnit.consumedSoFar=pkt->getConsumed();
47
                                 if(!addUnit(data,unitTypeSps,thisUnit,4))
48
-                                    keepRunning=false;
49
+                                {
50
+                                    result=ADM_IGN;
51
+                                    goto the_end;
52
+                                }
53
                                 pkt->forward(8);  // Ignore
54
                                 continue;
55
                           }
56
@@ -139,7 +142,10 @@
57
                           pkt->getInfo(&thisUnit.packetInfo);
58
                           thisUnit.consumedSoFar=pkt->getConsumed();
59
                           if(!addUnit(data,unitTypeSps,thisUnit,4+4+4))
60
-                              keepRunning=false;
61
+                          {
62
+                              result=ADM_IGN;
63
+                              goto the_end;
64
+                          }
65
                           continue;
66
                           break;
67
 //#warning FIXME, update pic field info.... It triggers a end-of-pic message as it is
68
@@ -192,7 +198,10 @@
69
                           pkt->getInfo(&thisUnit.packetInfo);
70
                           thisUnit.consumedSoFar=pkt->getConsumed();
71
                           if(!addUnit(data,unitTypeSps,thisUnit,4))
72
-                              keepRunning=false;
73
+                          {
74
+                              result=ADM_IGN;
75
+                              goto the_end;
76
+                          }
77
                           break;                                            
78
                   case 0x00 : // picture
79
                         {
80
@@ -219,7 +228,10 @@
81
                           thisUnit.consumedSoFar=pkt->getConsumed();
82
                           thisUnit.imageType=type;
83
                           if(!addUnit(data,unitTypePic,thisUnit,4+2))
84
-                              keepRunning=false;
85
+                          {
86
+                              result=ADM_IGN;
87
+                              goto the_end;
88
+                          }
89
                           pkt->invalidatePtsDts();
90
                           data.nbPics++;
91
                         }
92
@@ -228,7 +240,7 @@
93
                     break;
94
                   }
95
       }
96
-    
97
+the_end:
98
         printf("\n");
99
         qfprintf(index,"\n[End]\n");
100
         qfprintf(index,"\n# Found %" PRIu32" images \n",data.nbPics); // Size
101
@@ -239,7 +251,7 @@
102
         audioTracks=NULL;
103
         delete pkt;
104
         pkt=NULL;
105
-        return 1; 
106
+        return result;
107
 }
108
 
109
 /********************************************************************************************/
110
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsIndexVC1.cpp Changed
75
 
1
@@ -23,7 +23,7 @@
2
     \fn runVC1
3
     \brief Index VC1 stream
4
 */  
5
-bool TsIndexerVC1::run(const char *file,ADM_TS_TRACK *videoTrac)
6
+uint8_t TsIndexerVC1::run(const char *file,ADM_TS_TRACK *videoTrac)
7
 {
8
 uint32_t temporal_ref,val;
9
 uint8_t buffer[50*1024];
10
@@ -64,6 +64,7 @@
11
     data.pkt=pkt;
12
     fullSize=pkt->getSize();
13
     gui= createProcessing(QT_TRANSLATE_NOOP("tsdemuxer","Indexing"),pkt->getSize());
14
+    uint8_t result=1;
15
     int startCode;
16
     decodingImage=false;
17
 #define likely(x) x
18
@@ -81,7 +82,11 @@
19
                           {
20
                               pkt->getInfo(&thisUnit.packetInfo);
21
                               thisUnit.consumedSoFar=pkt->getConsumed();
22
-                              addUnit(data,unitTypeSps,thisUnit,4);
23
+                              if(!addUnit(data,unitTypeSps,thisUnit,4))
24
+                              {
25
+                                  result=ADM_IGN;
26
+                                  goto the_end;
27
+                              }
28
                               decodingImage=false;
29
                               break;
30
                           }
31
@@ -113,7 +118,11 @@
32
                           
33
                           pkt->getInfo(&thisUnit.packetInfo);
34
                           thisUnit.consumedSoFar=pkt->getConsumed();
35
-                          addUnit(data,unitTypeSps,thisUnit,seqSize+4);
36
+                          if(!addUnit(data,unitTypeSps,thisUnit,seqSize+4))
37
+                          {
38
+                              result=ADM_IGN;
39
+                              goto the_end;
40
+                          }
41
                           decodingImage=false;
42
                           
43
                           continue;
44
@@ -136,7 +145,11 @@
45
                           if(!decodeVC1Pic(bits,fType,sType)) continue;
46
                           thisUnit.imageType=fType;
47
                           updatePicStructure(video,sType);
48
-                          addUnit(data,unitTypePic,thisUnit,4);
49
+                          if(!addUnit(data,unitTypePic,thisUnit,4))
50
+                          {
51
+                              result=ADM_IGN;
52
+                              goto the_end;
53
+                          }
54
                           decodingImage=true;
55
                           data.nbPics++;
56
                         }
57
@@ -145,7 +158,7 @@
58
                     break;
59
                   }
60
       }
61
-    
62
+the_end:
63
         printf("\n");
64
 //        Mark(&data,&info,2);
65
         qfprintf(index,"\n[End]\n");
66
@@ -157,7 +170,7 @@
67
         audioTracks=NULL;
68
         delete pkt;
69
         pkt=NULL;
70
-        return 1; 
71
+        return result;
72
 }
73
 /**
74
     \fn decodeVc1Seq
75
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsPlugin.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsPlugin.cpp Changed
78
 
1
@@ -27,74 +27,21 @@
2
 
3
 static bool detectTs(const char *file);
4
 static bool checkMarker(uint8_t *buffer, uint32_t bufferSize,uint32_t block);
5
-uint8_t   tsIndexer(const char *file);
6
+
7
 /**
8
     \fn Probe
9
 */
10
 
11
 extern "C"  uint32_t ADM_PLUGIN_EXPORT        probe(uint32_t magic, const char *fileName)
12
 {
13
-char *index=(char *)malloc(strlen(fileName)+6);
14
-int count=0;
15
     printf("[TS Demuxer] Probing...\n");
16
     if( !detectTs(fileName))
17
     {
18
         printf(" [TS Demuxer] Not a ts file\n");
19
-        free(index);
20
         return false;
21
     }
22
-    sprintf(index,"%s.idx2",fileName);
23
-again:    
24
-    if(ADM_fileExist(index)) 
25
-    {
26
-        printf(" [TS Demuxer] There is an index for that file \n");
27
-        FILE *f=ADM_fopen(index,"rt");
28
-        char signature[10];
29
-        fread(signature,4,1,f);
30
-        signature[4]=0;
31
-        fclose(f);
32
-        if(!strcmp(signature,"PSD1"))
33
-        {
34
-                // Check if it is a valid index for us...
35
-                 indexFile indexFile;
36
-                 char *type;
37
-                 if(!indexFile.open(index))
38
-                 {
39
-                    printf("[tsDemux] Cannot open index file %s\n",index);
40
-                    indexFile.close();
41
-                    free(index);
42
-                    return false;
43
-                  }
44
-                 if(!indexFile.readSection("System"))
45
-                {
46
-                    printf("[tsDemux] Cannot read system section\n");
47
-                    indexFile.close();
48
-                    free(index);
49
-                    return false;
50
-                }
51
-                type=indexFile.getAsString("Type");
52
-                if(!type || type[0]!='T')
53
-                    {
54
-                        printf("[TsDemux] Incorrect or not found type\n");
55
-                        indexFile.close();
56
-                        free(index);
57
-                        return false;
58
-                    }
59
-                return 50;
60
-        }
61
-        printf("[TSDemuxer] Not a valid index\n");
62
-        return false;
63
-
64
-     }
65
-    if(count) return false;
66
-    printf("[TSDemuxer] Analyzing file..\n");
67
-    count++;
68
     
69
-  
70
-    if(true==tsIndexer(fileName)) goto again;
71
-    free(index);
72
-    printf("[TSDemuxer] Failed..\n");
73
-   return 0;
74
+    return 50;
75
 }
76
 #define PROBE_SIZE (1024*1024)
77
 /**
78
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp Changed
28
 
1
@@ -181,6 +181,17 @@
2
 
3
                 }
4
                 frame->len=len;
5
+                if(!interlaced && (frame->pictureType & AVI_FIELD_STRUCTURE))
6
+                {
7
+                    printf("[processVideoIndex] Setting interlaced flag.\n");
8
+                    interlaced=true;
9
+                    // Set fps to field rate for interlaced H.264 streams, necessary for copy mode
10
+                    if(_videostream.fccHandler==fourCC::get((uint8_t *)"H264"))
11
+                    {
12
+                        _videostream.dwRate*=2;
13
+                        printf("[processVideoIndex] Doubling fps1000 for interlaced H.264, new value = %d\n",_videostream.dwRate);
14
+                    }
15
+                }
16
                 ListOfFrames.push_back(frame);
17
                 count++;
18
                 if(!next) 
19
@@ -203,7 +214,7 @@
20
 {
21
     printf("[TsDemuxerer] Reading Video\n");
22
     if(!index->readSection("Video")) return false;
23
-    uint32_t w,h,fps,ar;
24
+    uint32_t w,h,fps;
25
     
26
     w=index->getAsUint32("Width");
27
     h=index->getAsUint32("height");
28
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer.conf -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer.conf Changed
9
 
1
@@ -1,6 +1,6 @@
2
 mp4_muxer{
3
 uint32_t:muxerType
4
-bool:useAlternateMp3Tag
5
+uint32_t:optimize
6
 bool:forceAspectRatio
7
 uint32_t:aspectRatio
8
 uint32_t:rotation
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer.h Changed
10
 
1
@@ -3,7 +3,7 @@
2
 #pragma once
3
 typedef struct {
4
 uint32_t muxerType;
5
-bool useAlternateMp3Tag;
6
+uint32_t optimize;
7
 bool forceAspectRatio;
8
 uint32_t aspectRatio;
9
 uint32_t rotation;
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer_desc.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/mp4_muxer_desc.cpp Changed
10
 
1
@@ -1,7 +1,7 @@
2
 // automatically generated by admSerialization.py, do not edit!
3
 extern const ADM_paramList mp4_muxer_param[]={
4
  {"muxerType",offsetof(mp4_muxer,muxerType),"uint32_t",ADM_param_uint32_t},
5
- {"useAlternateMp3Tag",offsetof(mp4_muxer,useAlternateMp3Tag),"bool",ADM_param_bool},
6
+ {"optimize",offsetof(mp4_muxer,optimize),"uint32_t",ADM_param_uint32_t},
7
  {"forceAspectRatio",offsetof(mp4_muxer,forceAspectRatio),"bool",ADM_param_bool},
8
  {"aspectRatio",offsetof(mp4_muxer,aspectRatio),"uint32_t",ADM_param_uint32_t},
9
  {"rotation",offsetof(mp4_muxer,rotation),"uint32_t",ADM_param_uint32_t},
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4.cpp Changed
55
 
1
@@ -32,7 +32,7 @@
2
 mp4_muxer muxerConfig=
3
 {
4
     MP4_MUXER_MP4,
5
-    true,
6
+    MP4_MUXER_OPT_FASTSTART,
7
     false,
8
     WIDE,
9
     MP4_MUXER_ROTATE_0
10
@@ -98,6 +98,8 @@
11
         c = video_st->codec;
12
         AVCodecParameters *par;
13
         par = video_st->codecpar;
14
+        if(isH265Compatible(s->getFCC()))
15
+            par->codec_tag = MKTAG('h', 'v', 'c', '1');
16
         rescaleFps(s->getAvgFps1000(),&(c->time_base));
17
         myTimeBase=video_st->time_base=c->time_base;
18
         ADM_info("Video stream time base :%d,%d\n",video_st->time_base.num,video_st->time_base.den);
19
@@ -139,7 +141,11 @@
20
             printf("[MP4] Failed to init audio\n");
21
             return false;
22
         }
23
-
24
+        // Mark all audio tracks as enabled, VLC is picky about that.
25
+        for(int i=0;i<nbAudioTrack;i++)
26
+        {
27
+            audio_st[i]->disposition |= AV_DISPOSITION_DEFAULT;
28
+        }
29
         // /audio
30
         int er = avio_open(&(oc->pb), file, AVIO_FLAG_WRITE);
31
 
32
@@ -158,9 +164,19 @@
33
         snprintf(buf, sizeof(buf), "%d", AV_TIME_BASE / 10);
34
         av_dict_set(&dict, "preload", buf, 0);
35
         av_dict_set(&dict, "max_delay", "200000", 0);
36
-#ifndef _WIN32 // does not work on windows as the file must be opened twice at the same time        
37
-        av_dict_set(&dict, "movflags","faststart",0);
38
-#endif
39
+
40
+        switch(muxerConfig.optimize)
41
+        {
42
+            case(MP4_MUXER_OPT_FASTSTART):
43
+                av_dict_set(&dict, "movflags", "faststart", 0);
44
+                break;
45
+            case(MP4_MUXER_OPT_FRAGMENT):
46
+                av_dict_set(&dict, "movflags", "frag_keyframe+empty_moov", 0);
47
+                av_dict_set(&dict, "min_frag_duration", "2000000", 0); // 2 seconds, an arbitrary value
48
+                break;
49
+            default: break;
50
+        }
51
+
52
         const char *angle=NULL;
53
         switch(muxerConfig.rotation)
54
         {
55
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4.h Changed
15
 
1
@@ -27,6 +27,13 @@
2
 
3
 typedef enum
4
 {
5
+    MP4_MUXER_OPT_NONE,
6
+    MP4_MUXER_OPT_FASTSTART,
7
+    MP4_MUXER_OPT_FRAGMENT
8
+}MP4_MUXER_OPTIMIZE;
9
+
10
+typedef enum
11
+{
12
     STANDARD,
13
     WIDE,
14
     UNI,
15
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4Config.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4/muxerMP4Config.cpp Changed
42
 
1
@@ -18,17 +18,22 @@
2
 #include "muxerMP4.h"
3
 #define ADM_MINIMAL_UI_INTERFACE
4
 #include "DIA_factory.h"
5
-#include "fourcc.h"
6
+
7
 bool mp4Configure(void)
8
 {
9
         uint32_t fmt=(uint32_t)muxerConfig.muxerType;
10
         uint32_t dar=(uint32_t)muxerConfig.aspectRatio;
11
         uint32_t rot=(uint32_t)muxerConfig.rotation;
12
-        bool alt=muxerConfig.useAlternateMp3Tag;
13
+        uint32_t opt=(uint32_t)muxerConfig.optimize;
14
         bool force=muxerConfig.forceAspectRatio;
15
         diaMenuEntry format[]={{MP4_MUXER_MP4,"MP4"},{MP4_MUXER_PSP,"PSP"}};
16
         diaElemMenu  menuFormat(&fmt,QT_TRANSLATE_NOOP("mp4muxer","Muxing Format"),2,format,"");
17
-        diaElemToggle alternate(&alt,QT_TRANSLATE_NOOP("mp4muxer","Use alternate MP3 tag"));
18
+        diaMenuEntry streamOpt[]={
19
+            {MP4_MUXER_OPT_NONE,QT_TRANSLATE_NOOP("mp4muxer","No optimization")},
20
+            {MP4_MUXER_OPT_FASTSTART,QT_TRANSLATE_NOOP("mp4muxer","Move index to the beginning of the file")},
21
+            {MP4_MUXER_OPT_FRAGMENT,QT_TRANSLATE_NOOP("mp4muxer","Use fragmentation")}
22
+        };
23
+        diaElemMenu  menuOptimize(&opt,QT_TRANSLATE_NOOP("mp4muxer","Optimize for Streaming"),3,streamOpt,"");
24
         diaElemToggle forceAR(&force,QT_TRANSLATE_NOOP("mp4muxer","Force aspect ratio"));
25
         diaMenuEntry aspect[]={{STANDARD,"4:3"},{WIDE,"16:9"},{UNI,"18:9"},{CINEMA,"64:27"}};
26
         diaElemMenu  menuAspect(&dar,QT_TRANSLATE_NOOP("mp4muxer","Aspect Ratio (DAR)"),4,aspect,"");
27
@@ -39,12 +44,12 @@
28
             {MP4_MUXER_ROTATE_270,QT_TRANSLATE_NOOP("mp4muxer","270°")}
29
         };
30
         diaElemMenu menuRotation(&rot,QT_TRANSLATE_NOOP("mp4muxer","Rotate video"),4,rotation,"");
31
+        diaElem *tabs[]={&menuFormat,&menuOptimize,&forceAR,&menuAspect,&menuRotation};
32
 
33
-        diaElem *tabs[]={&menuFormat,&alternate,&forceAR,&menuAspect,&menuRotation};
34
         if( diaFactoryRun(QT_TRANSLATE_NOOP("mp4muxer","MP4 Muxer"),5,tabs))
35
         {
36
             muxerConfig.muxerType=(MP4_MUXER_TYPE)fmt;
37
-            muxerConfig.useAlternateMp3Tag=alt;
38
+            muxerConfig.optimize=(MP4_MUXER_OPTIMIZE)opt;
39
             muxerConfig.forceAspectRatio=force;
40
             muxerConfig.aspectRatio=(MP4_MUXER_DAR)dar;
41
             muxerConfig.rotation=(MP4_MUXER_ROTATION)rot;
42
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4v2/muxerMp4v2.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_muxers/muxerMp4v2/muxerMp4v2.cpp Changed
11
 
1
@@ -309,7 +309,8 @@
2
         ADM_info("Optimizing...\n");
3
         MP4Optimize( tmpTargetFileName.c_str(), targetFileName.c_str() );
4
         // delete
5
-        unlink(tmpTargetFileName.c_str());
6
+        if(!ADM_eraseFile(tmpTargetFileName.c_str()))
7
+            ADM_warning("Could not delete %s\n",tmpTargetFileName.c_str());
8
     }
9
     closeUI();
10
     return result;
11
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_scriptEngines/tinyPy/src/ADM_pyAvidemux.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_scriptEngines/tinyPy/src/ADM_pyAvidemux.cpp Changed
9
 
1
@@ -118,6 +118,7 @@
2
                 frameType = "P";
3
                 break;
4
             case AVI_B_FRAME:
5
+            case AVI_B_FRAME+AVI_NON_REF_FRAME:
6
                 frameType = "B";
7
                 break;
8
             default:
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoEncoder/x264/qt4/Q_x264.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoEncoder/x264/qt4/Q_x264.cpp Changed
127
 
1
@@ -187,28 +187,34 @@
2
         }
3
 
4
         upload();
5
-        ADM_pluginInstallSystem( std::string("x264"),std::string(".json"),pluginVersion);
6
+        ADM_pluginInstallSystem( std::string("x264"),std::string("json"),pluginVersion);
7
         updatePresetList();
8
-        int n=ui.configurationComboBox->count();
9
-        ui.configurationComboBox->setCurrentIndex(n-1);
10
+        adjustSize();
11
 }
12
 /**
13
     \fn updatePresetList
14
 */
15
-bool x264Dialog::updatePresetList(void)
16
+bool x264Dialog::updatePresetList(const char *match)
17
 {
18
     QComboBox *combo=ui.configurationComboBox;
19
     std::string rootPath;
20
     vector <std::string >  list;
21
     ADM_pluginGetPath("x264",pluginVersion,rootPath);
22
-    ADM_listFile(rootPath,".json",list);
23
+    ADM_listFile(rootPath,"json",list);
24
     int l=list.size();
25
+    int idx=l;
26
+    std::string current;
27
+    if(match)
28
+        current=std::string(match);
29
     combo->clear();
30
     for( int i=0;i<l;i++)
31
     {
32
+        if(match && list[i]==current)
33
+            idx=i;
34
         combo->addItem(list[i].c_str());
35
     }
36
     combo->addItem(QString(QT_TRANSLATE_NOOP("x264","Custom")));
37
+    combo->setCurrentIndex(idx);
38
     return true;
39
 }
40
 
41
@@ -797,9 +803,9 @@
42
     \fn getProfileName  
43
     \brief Popup a dialog that asks the user the preset name
44
 */
45
-static char *getProfileName(void)
46
+static char *getProfileName(QDialog *parent)
47
 {
48
-  QDialog dialog;
49
+  QDialog dialog(parent);
50
   dialog.setWindowTitle(QString::fromUtf8(QT_TRANSLATE_NOOP("x264","Save Profile")));
51
   QDialogButtonBox *buttonBox = new QDialogButtonBox();  
52
   QVBoxLayout *vboxLayout = new QVBoxLayout();
53
@@ -811,22 +817,22 @@
54
   QLineEdit *text=new QLineEdit;
55
 //  text->setAcceptRichText(false);
56
 
57
-  text->setText(QT_TRANSLATE_NOOP("x264","my profile"));
58
+  text->setText("my profile");
59
   text->selectAll();
60
 
61
   vboxLayout->addWidget(text);
62
   vboxLayout->addWidget(buttonBox);
63
-
64
+//  dialog.setModal(true);
65
+//  dialog.setWindowModality(Qt::ApplicationModal);
66
   dialog.setLayout(vboxLayout);
67
 
68
   if(dialog.exec()!=QDialog::Accepted)
69
   {
70
-        ADM_info("Canceled");
71
+        ADM_info("Cancelled");
72
         return NULL;
73
   }
74
-  QString fileName=text->text();
75
-  const char *out=fileName.toUtf8().constData();
76
-  return ADM_strdup(out);
77
+  std::string st = std::string(text->text().toUtf8().constData());
78
+  return ADM_strdup(st.c_str());
79
 }
80
 /**
81
         \fn saveAsButton_pressed
82
@@ -835,13 +841,14 @@
83
 void x264Dialog::saveAsButton_pressed(void)
84
 {
85
   // 1-ask name
86
-  char *out=getProfileName();
87
+  char *out=getProfileName(this);
88
   if(!out) return;
89
   ADM_info("Using %s\n",out);
90
   download();
91
   std::string rootPath;
92
   ADM_pluginGetPath("x264",pluginVersion,rootPath);
93
-  std::string fullpath=rootPath+std::string(ADM_SEPARATOR)+out+std::string(".json");
94
+  std::string name=std::string(out);
95
+  std::string fullpath=rootPath+std::string(ADM_SEPARATOR)+name+std::string(".json");
96
 
97
   if(ADM_fileExist(fullpath.c_str()))
98
   {
99
@@ -857,7 +864,7 @@
100
         GUI_Error_HIG(QT_TRANSLATE_NOOP("x264","Error"),QT_TRANSLATE_NOOP("x264","Cannot save preset"));
101
         ADM_error("Cannot write to %s\n",out);
102
   }
103
-  updatePresetList();
104
+  updatePresetList(name.c_str());
105
 }
106
 /**
107
 
108
@@ -874,15 +881,15 @@
109
   QString preset=ui.configurationComboBox->itemText(n);
110
   QString msg=QString(QT_TRANSLATE_NOOP("x264","Do you really want to delete the "))+preset+
111
             QString(QT_TRANSLATE_NOOP("x264"," profile ?.\nIf it is a system profile it will be recreated next time."));
112
-  if(true==GUI_Confirmation_HIG(QT_TRANSLATE_NOOP("x264","Delete preset"),QT_TRANSLATE_NOOP("x264","Delete"),msg.toUtf8().constData()))
113
+  if(true==GUI_Confirmation_HIG(QT_TRANSLATE_NOOP("x264","Delete"),QT_TRANSLATE_NOOP("x264","Delete preset"),msg.toUtf8().constData()))
114
   {
115
     std::string rootPath;
116
     ADM_pluginGetPath("x264",pluginVersion,rootPath);
117
     QString text=QString("/")+ui.configurationComboBox->itemText(n);
118
     text=QString(rootPath.c_str())+text+QString(".json");
119
-    unlink(text.toUtf8().constData());
120
+    if(!ADM_eraseFile(text.toUtf8().constData()))
121
+        ADM_warning("Could not delete %s\n",text.toUtf8().constData());
122
   }
123
   updatePresetList();
124
 }
125
 
126
-
127
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoEncoder/x264/qt4/Q_x264.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoEncoder/x264/qt4/Q_x264.h Changed
10
 
1
@@ -47,7 +47,7 @@
2
         void saveAsButton_pressed(void);
3
         void deleteButton_pressed(void);
4
 
5
-        bool updatePresetList(void);
6
+        bool updatePresetList(const char *select=NULL);
7
 
8
         bool toogleAdvancedConfiguration(bool advancedEnabled);
9
         
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.cpp Changed
121
 
1
@@ -193,28 +193,34 @@
2
         }
3
 
4
         upload();
5
-        ADM_pluginInstallSystem( std::string("x265"),std::string(".json"),pluginVersion);
6
+        ADM_pluginInstallSystem( std::string("x265"),std::string("json"),pluginVersion);
7
         updatePresetList();
8
-        int n=ui.configurationComboBox->count();
9
-        ui.configurationComboBox->setCurrentIndex(n-1);
10
+        adjustSize();
11
 }
12
 /**
13
     \fn updatePresetList
14
 */
15
-bool x265Dialog::updatePresetList(void)
16
+bool x265Dialog::updatePresetList(const char *match)
17
 {
18
     QComboBox *combo=ui.configurationComboBox;
19
     std::string rootPath;
20
     vector <std::string >  list;
21
     ADM_pluginGetPath("x265",pluginVersion,rootPath);
22
-    ADM_listFile(rootPath,".json",list);
23
+    ADM_listFile(rootPath,"json",list);
24
     int l=list.size();
25
+    int idx=l;
26
+    std::string current;
27
+    if(match)
28
+        current=std::string(match);
29
     combo->clear();
30
     for( int i=0;i<l;i++)
31
     {
32
+        if(match && list[i]==current)
33
+            idx=i;
34
         combo->addItem(list[i].c_str());
35
     }
36
     combo->addItem(QString(QT_TRANSLATE_NOOP("x265","Custom")));
37
+    combo->setCurrentIndex(idx);
38
     return true;
39
 }
40
 
41
@@ -761,9 +767,9 @@
42
     \fn getProfileName  
43
     \brief Popup a dialog that asks the user the preset name
44
 */
45
-static char *getProfileName(void)
46
+static char *getProfileName(QDialog *parent)
47
 {
48
-  QDialog dialog;
49
+  QDialog dialog(parent);
50
   dialog.setWindowTitle(QString::fromUtf8(QT_TRANSLATE_NOOP("x265","Save Profile")));
51
   QDialogButtonBox *buttonBox = new QDialogButtonBox();  
52
   QVBoxLayout *vboxLayout = new QVBoxLayout();
53
@@ -780,17 +786,17 @@
54
 
55
   vboxLayout->addWidget(text);
56
   vboxLayout->addWidget(buttonBox);
57
-
58
   dialog.setLayout(vboxLayout);
59
+//  dialog.setModal(true);
60
+//  dialog.setWindowModality(Qt::ApplicationModal);
61
 
62
   if(dialog.exec()!=QDialog::Accepted)
63
   {
64
-        ADM_info("Canceled");
65
+        ADM_info("Cancelled");
66
         return NULL;
67
   }
68
-  QString fileName=text->text();
69
-  const char *out=fileName.toUtf8().constData();
70
-  return ADM_strdup(out);
71
+  std::string st = std::string( text->text().toUtf8().constData());
72
+  return ADM_strdup(st.c_str());
73
 }
74
 /**
75
         \fn saveAsButton_pressed
76
@@ -799,13 +805,14 @@
77
 void x265Dialog::saveAsButton_pressed(void)
78
 {
79
   // 1-ask name
80
-  char *out=getProfileName();
81
+  char *out=getProfileName(this);
82
   if(!out) return;
83
   ADM_info("Using %s\n",out);
84
   download();
85
   std::string rootPath;
86
   ADM_pluginGetPath("x265",pluginVersion,rootPath);
87
-  std::string fullpath=rootPath+std::string(ADM_SEPARATOR)+out+std::string(".json");
88
+  std::string name=std::string(out);
89
+  std::string fullpath=rootPath+std::string(ADM_SEPARATOR)+name+std::string(".json");
90
 
91
   if(ADM_fileExist(fullpath.c_str()))
92
   {
93
@@ -821,7 +828,7 @@
94
         GUI_Error_HIG(QT_TRANSLATE_NOOP("x265","Error"),QT_TRANSLATE_NOOP("x265","Cannot save preset"));
95
         ADM_error("Cannot write to %s\n",out);
96
   }
97
-  updatePresetList();
98
+  updatePresetList(name.c_str());
99
 }
100
 /**
101
 
102
@@ -838,15 +845,15 @@
103
   QString preset=ui.configurationComboBox->itemText(n);
104
   QString msg=QString(QT_TRANSLATE_NOOP("x265","Do you really want to delete the "))+preset+
105
             QString(QT_TRANSLATE_NOOP("x265"," profile ?.\nIf it is a system profile it will be recreated next time."));
106
-  if(true==GUI_Confirmation_HIG(QT_TRANSLATE_NOOP("x265","Delete preset"),QT_TRANSLATE_NOOP("x265","Delete"),msg.toUtf8().constData()))
107
+  if(true==GUI_Confirmation_HIG(QT_TRANSLATE_NOOP("x265","Delete"),QT_TRANSLATE_NOOP("x265","Delete preset"),msg.toUtf8().constData()))
108
   {
109
     std::string rootPath;
110
     ADM_pluginGetPath("x265",pluginVersion,rootPath);
111
     QString text=QString("/")+ui.configurationComboBox->itemText(n);
112
     text=QString(rootPath.c_str())+text+QString(".json");
113
-    unlink(text.toUtf8().constData());
114
+    if(!ADM_eraseFile(text.toUtf8().constData()))
115
+        ADM_warning("Could not delete %s\n",text.toUtf8().constData());
116
   }
117
   updatePresetList();
118
 }
119
 
120
-
121
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoEncoder/x265/qt4/Q_x265.h Changed
10
 
1
@@ -51,7 +51,7 @@
2
         void saveAsButton_pressed(void);
3
         void deleteButton_pressed(void);
4
 
5
-        bool updatePresetList(void);
6
+        bool updatePresetList(const char *select=NULL);
7
 
8
         bool toogleAdvancedConfiguration(bool advancedEnabled);
9
         
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/CMakeLists.txt -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/CMakeLists.txt Changed
22
 
1
@@ -1,11 +1,10 @@
2
 IF(NOT MSVC)
3
-        ADD_SUBDIRECTORY(asciiView)
4
-        ADD_SUBDIRECTORY(colorYUV)
5
         ADD_SUBDIRECTORY(fluxSmooth)
6
         ADD_SUBDIRECTORY(telecide)
7
 ENDIF(NOT MSVC)
8
 
9
 
10
+ADD_SUBDIRECTORY(asciiView)
11
 ADD_SUBDIRECTORY(addBorder)
12
 ADD_SUBDIRECTORY(admIvtc)
13
 ADD_SUBDIRECTORY(asharp)
14
@@ -14,6 +13,7 @@
15
 ADD_SUBDIRECTORY(black)
16
 ADD_SUBDIRECTORY(blackenBorder)
17
 ADD_SUBDIRECTORY(changeFps)
18
+ADD_SUBDIRECTORY(colorYUV)
19
 ADD_SUBDIRECTORY(contrast)
20
 ADD_SUBDIRECTORY(chromaShift)
21
 ADD_SUBDIRECTORY(crop)
22
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/asciiView/ADM_vidAscii.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/asciiView/ADM_vidAscii.cpp Changed
13
 
1
@@ -24,6 +24,11 @@
2
 #define REDUCE_WIDTH   12
3
 #define REDUCE_HEIGHT  20
4
 
5
+#ifdef _MSC_VER
6
+#  include <intrin.h>
7
+
8
+#  define __builtin_popcount __popcnt
9
+#endif
10
 /**
11
     \class AsciiFilter
12
 */
13
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/asharp/qt4/Q_asharp.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/asharp/qt4/Q_asharp.cpp Changed
25
 
1
@@ -52,9 +52,6 @@
2
           connect( ui.checkBox,SIGNAL(stateChanged(int)),this,SLOT(valueChanged2(int))); 
3
 
4
         setModal(true);
5
-        show();
6
-        myCrop->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
   void Ui_asharpWindow::sliderUpdate(int foo)
10
   {
11
@@ -97,6 +94,13 @@
12
     myCrop->adjustCanvasPosition();
13
 }
14
 
15
+void Ui_asharpWindow::showEvent(QShowEvent *event)
16
+{
17
+    QDialog::showEvent(event);
18
+    myCrop->adjustCanvasPosition();
19
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
20
+}
21
+
22
 #define MYSPIN(x) w->doubleSpinBox##x
23
 //************************
24
 uint8_t flyASharp::upload(void)
25
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/asharp/qt4/Q_asharp.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/asharp/qt4/Q_asharp.h Changed
8
 
1
@@ -31,5 +31,6 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
 #endif // Q_asharp_h
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt4/Q_blackenBorders.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt4/Q_blackenBorders.cpp Changed
25
 
1
@@ -49,9 +49,6 @@
2
     SPINNER(Bottom);
3
 
4
     setModal(true);
5
-    show();
6
-    myBlacken->adjustCanvasPosition();
7
-    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
   void Ui_blackenWindow::sliderUpdate(int foo)
10
   {
11
@@ -106,6 +103,13 @@
12
     myBlacken->adjustCanvasPosition();
13
 }
14
 
15
+void Ui_blackenWindow::showEvent(QShowEvent *event)
16
+{
17
+    QDialog::showEvent(event);
18
+    myBlacken->adjustCanvasPosition();
19
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
20
+}
21
+
22
 //************************
23
 uint8_t flyBlacken::upload(void)
24
 {
25
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt4/Q_blackenBorders.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt4/Q_blackenBorders.h Changed
9
 
1
@@ -28,6 +28,7 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
 
8
 
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/DIA_flyBlackenBorders.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/DIA_flyBlackenBorders.cpp Changed
9
 
1
@@ -35,7 +35,6 @@
2
                 : ADM_flyDialogRgb(parent,width, height,in,canvas, slider,RESIZE_LAST) 
3
   {
4
     rubber=new ADM_rubberControl(this,canvas);
5
-    rubber->resize(width,height);
6
     _ox=0;
7
     _oy=0;
8
     _ow=width;
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/Q_blackenBorders.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/Q_blackenBorders.cpp Changed
36
 
1
@@ -38,7 +38,7 @@
2
     myBlacken->addControl(ui.toolboxLayout);
3
     myBlacken->upload();
4
     myBlacken->sliderChanged();
5
-
6
+    myBlacken->rubber->nestedIgnore=1;
7
 
8
     connect( ui.horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(sliderUpdate(int)));
9
     connect( ui.pushButtonReset,SIGNAL(clicked(bool)),this,SLOT(reset(bool)));
10
@@ -49,9 +49,6 @@
11
     SPINNER(Bottom);
12
 
13
     setModal(true);
14
-    show();
15
-    myBlacken->adjustCanvasPosition();
16
-    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
17
   }
18
   void Ui_blackenWindow::sliderUpdate(int foo)
19
   {
20
@@ -121,6 +118,15 @@
21
     
22
 }
23
 
24
+void Ui_blackenWindow::showEvent(QShowEvent *event)
25
+{
26
+    myBlacken->rubber->rubberband->show(); // must be called first
27
+    QDialog::showEvent(event);
28
+    myBlacken->adjustCanvasPosition();
29
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
30
+    myBlacken->rubber->nestedIgnore=0;
31
+}
32
+
33
 //************************
34
 uint8_t flyBlacken::upload(bool redraw, bool toRubber)
35
 {
36
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/Q_blackenBorders.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/blackenBorder/qt5/Q_blackenBorders.h Changed
9
 
1
@@ -29,6 +29,7 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
 
8
 
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/changeFps/changeFps.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/changeFps/changeFps.cpp Changed
10
 
1
@@ -84,7 +84,7 @@
2
 const char *changeFps::getConfiguration( void )
3
 {
4
 static char buf[100];
5
- snprintf(buf,99," Resample from %2.2f to %2.2f fps",
6
+ snprintf(buf,99," Change FPS from %2.2f to %2.2f fps",
7
         (double)configuration.oldFpsNum/configuration.oldFpsDen,
8
         (double)configuration.newFpsNum/configuration.newFpsDen);
9
  return buf;  
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/chromaShift/qt4/Q_chromashift.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/chromaShift/qt4/Q_chromashift.cpp Changed
25
 
1
@@ -55,9 +55,6 @@
2
           SPINNER(V);
3
 
4
         setModal(true);
5
-        show();
6
-        myCrop->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
   void Ui_chromaShiftWindow::sliderUpdate(int foo)
10
   {
11
@@ -96,6 +93,13 @@
12
     myCrop->adjustCanvasPosition();
13
 }
14
 
15
+void Ui_chromaShiftWindow::showEvent(QShowEvent *event)
16
+{
17
+    QDialog::showEvent(event);
18
+    myCrop->adjustCanvasPosition();
19
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
20
+}
21
+
22
 #define MYSPIN(x) w->spinBox##x
23
 //************************
24
 uint8_t flyChromaShift::upload(void)
25
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/chromaShift/qt4/Q_chromashift.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/chromaShift/qt4/Q_chromashift.h Changed
8
 
1
@@ -28,5 +28,6 @@
2
 
3
  private:
4
    void resizeEvent(QResizeEvent *event);
5
+   void showEvent(QShowEvent *event);
6
  };
7
 
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/colorYUV/avsColor.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/colorYUV/avsColor.cpp Changed
55
 
1
@@ -59,7 +59,7 @@
2
    int i,j,wby4;
3
    int modulo;
4
 
5
-#ifdef _DEBUG
6
+#ifdef cyuv_DEBUG
7
    COUNT y0,u0,v0;
8
    COUNT y,u,v;
9
    COUNT r,g,b;
10
@@ -239,7 +239,7 @@
11
      MakeGammaLUT();
12
   }
13
 
14
-#ifdef _DEBUG
15
+#ifdef cyuv_DEBUG
16
    total = wby4 * h;
17
    totalby2 = total / 2;
18
 
19
@@ -275,7 +275,7 @@
20
          {
21
              pixel.data = *srcp;
22
 
23
-#ifdef _DEBUG
24
+#ifdef cyuv_DEBUG
25
            pixel0.data = pixel.data;
26
            CheckYUV(NULL, &pixel, &y0, &u0, &v0, 0);
27
            
28
@@ -291,7 +291,7 @@
29
              pixel.yuv.v  = LUT_V[pixel.yuv.v ];
30
              *srcp++ = pixel.data;
31
 
32
-#ifdef _DEBUG
33
+#ifdef cyuv_DEBUG
34
            CheckYUV(&pixel0, &pixel, &y, &u, &v, 1);
35
 
36
            YUV2RGB(pixel.yuv.y0, pixel.yuv.u, pixel.yuv.v, &r.d, &g.d, &b.d, matrix);
37
@@ -332,7 +332,7 @@
38
     }
39
   }
40
 
41
-#ifdef _DEBUG
42
+#ifdef cyuv_DEBUG
43
 /*
44
    y.ave  = ( y.ave+total)/total/2; u.ave  = ( u.ave+totalby2)/total;   v.ave  = ( v.ave+totalby2)/total;
45
    y0.ave = (y0.ave+total)/total/2; u0.ave = (u0.ave+totalby2)/total;   v0.ave = (v0.ave+totalby2)/total;
46
@@ -521,7 +521,7 @@
47
        LUT_V[i] = (unsigned char)val;
48
     }
49
 
50
-#ifdef _DEBUG
51
+#ifdef cyuv_DEBUG
52
    DumpLUT();
53
 #endif
54
 
55
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/contrast/qt4/Q_contrast.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/contrast/qt4/Q_contrast.cpp Changed
28
 
1
@@ -77,9 +77,6 @@
2
           connect( ui.toolButton__DVD2PC,SIGNAL(pressed()),this,SLOT(dvd2PC()));  
3
 
4
         setModal(true);
5
-        show();
6
-        myCrop->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
 /**
10
  * 
11
@@ -170,6 +167,16 @@
12
     myCrop->adjustCanvasPosition();
13
 }
14
 
15
+/**
16
+    \fn showEvent
17
+*/
18
+void Ui_contrastWindow::showEvent(QShowEvent *event)
19
+{
20
+    QDialog::showEvent(event);
21
+    myCrop->adjustCanvasPosition();
22
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
23
+}
24
+
25
 #define MYSPIN(x) w->dial##x
26
 #define MYCHECK(x) w->checkBox##x
27
 /**
28
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/contrast/qt4/Q_contrast.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/contrast/qt4/Q_contrast.h Changed
9
 
1
@@ -30,6 +30,7 @@
2
 private:
3
         void setDialTitles(void);
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 
7
 protected : 
8
    int lock;
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/crop/qt5/DIA_flyCrop.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/crop/qt5/DIA_flyCrop.cpp Changed
59
 
1
@@ -35,7 +35,6 @@
2
                 : ADM_flyDialogRgb(parent,width, height,in,canvas, slider,RESIZE_LAST)
3
 {
4
     rubber=new ADM_rubberControl(this,canvas);
5
-    rubber->resize(width,height);
6
     _ox=0;
7
     _oy=0;
8
     _ow=width;
9
@@ -344,7 +343,6 @@
10
     canvas=new ADM_QCanvas(ui.graphicsView,width,height);
11
 
12
     myCrop=new flyCrop( this,width, height,in,canvas,ui.horizontalSlider);
13
-    myCrop->rubber->nestedIgnore++; // don't modify crop parameters simply by opening the dialog
14
     myCrop->left=param->left;
15
     myCrop->right=param->right;
16
     myCrop->top=param->top;
17
@@ -354,9 +352,9 @@
18
     myCrop->addControl(ui.toolboxLayout);
19
     myCrop->upload(false,true);
20
     myCrop->sliderChanged();
21
+    myCrop->rubber->nestedIgnore=1;
22
 
23
     ui.checkBoxRubber->setChecked(myCrop->rubber_is_hidden);
24
-    myCrop->rubber->setVisible(!(myCrop->rubber_is_hidden));
25
 
26
     connect( ui.horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(sliderUpdate(int)));
27
     connect( ui.checkBoxRubber,SIGNAL(stateChanged(int)),this,SLOT(toggleRubber(int)));
28
@@ -369,10 +367,6 @@
29
       SPINNER(Bottom);
30
 
31
     setModal(true);
32
-    show();
33
-    myCrop->adjustCanvasPosition();
34
-    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
35
-    myCrop->rubber->nestedIgnore--;
36
 }
37
 /**
38
  * 
39
@@ -481,5 +475,19 @@
40
     myCrop->blockChanges(false);
41
 }
42
 
43
+/**
44
+ * \fn showEvent
45
+ * \brief set canvas size and position
46
+ */
47
+void Ui_cropWindow::showEvent(QShowEvent *event)
48
+{
49
+    myCrop->rubber->rubberband->show(); // must be called first
50
+    myCrop->rubber->setVisible(!(myCrop->rubber_is_hidden));
51
+    QDialog::showEvent(event);
52
+    myCrop->adjustCanvasPosition();
53
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
54
+    myCrop->rubber->nestedIgnore=0;
55
+}
56
+
57
 //EOF
58
 
59
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/crop/qt5/Q_crop.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/crop/qt5/Q_crop.h Changed
9
 
1
@@ -41,6 +41,7 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
 
8
 #endif // Q_crop_h
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/eq2/qt4/Q_eq2.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/eq2/qt4/Q_eq2.cpp Changed
28
 
1
@@ -70,9 +70,6 @@
2
     setResetSliderEnabledState();
3
 
4
     setModal(true);
5
-    show();
6
-    myCrop->adjustCanvasPosition();
7
-    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
 }
9
 
10
 /**
11
@@ -188,6 +185,16 @@
12
     myCrop->adjustCanvasPosition();
13
 }
14
 
15
+/**
16
+    \fn showEvent
17
+*/
18
+void Ui_eq2Window::showEvent(QShowEvent *event)
19
+{
20
+    QDialog::showEvent(event);
21
+    myCrop->adjustCanvasPosition();
22
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
23
+}
24
+
25
 #define sliderSet(x,y) w->horizontalSlider##x->setValue((int)(param.y*100));
26
 #define sliderGet(x,y) param.y=w->horizontalSlider##x->value()/100.;
27
 //************************
28
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/eq2/qt4/Q_eq2.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/eq2/qt4/Q_eq2.h Changed
9
 
1
@@ -48,6 +48,7 @@
2
 
3
 private:
4
     void resizeEvent(QResizeEvent *event);
5
+    void showEvent(QShowEvent *event);
6
     void setResetSliderEnabledState(void);
7
 };
8
 #endif // Q_eq2_h
9
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/hue/qt4/Q_hue.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/hue/qt4/Q_hue.cpp Changed
25
 
1
@@ -52,9 +52,6 @@
2
           SPINNER(Saturation);
3
 
4
         setModal(true);
5
-        show();
6
-        myCrop->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
   void Ui_hueWindow::sliderUpdate(int foo)
10
   {
11
@@ -92,6 +89,13 @@
12
     myCrop->adjustCanvasPosition();
13
 }
14
 
15
+void Ui_hueWindow::showEvent(QShowEvent *event)
16
+{
17
+    QDialog::showEvent(event);
18
+    myCrop->adjustCanvasPosition();
19
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
20
+}
21
+
22
 #define MYSPIN(x) w->horizontalSlider##x
23
 #define MYCHECK(x) w->checkBox##x
24
 //************************
25
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/hue/qt4/Q_hue.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/hue/qt4/Q_hue.h Changed
8
 
1
@@ -29,5 +29,6 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
 #endif // Q_hue_h
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/logo/qt4/Q_logo.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/logo/qt4/Q_logo.cpp Changed
29
 
1
@@ -208,9 +208,6 @@
2
         myLogo->sliderChanged();
3
 
4
         setModal(true);
5
-        show();
6
-        myLogo->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
 /**
10
     \fn sliderUpdate
11
@@ -316,6 +313,17 @@
12
 }
13
 
14
 /**
15
+    \fn showEvent
16
+    \brief set canvas initial size and position
17
+*/
18
+void Ui_logoWindow::showEvent(QShowEvent *event)
19
+{
20
+    QDialog::showEvent(event);
21
+    myLogo->adjustCanvasPosition();
22
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
23
+}
24
+
25
+/**
26
     \fn flyLogo ctor
27
 */
28
 flyLogo::flyLogo (QDialog *parent, uint32_t width, uint32_t height, ADM_coreVideoFilter *in, ADM_QCanvas *canvas, ADM_QSlider *slider)
29
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/logo/qt4/Q_logo.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/logo/qt4/Q_logo.h Changed
8
 
1
@@ -65,5 +65,6 @@
2
 
3
 private:
4
         void                resizeEvent(QResizeEvent *event);
5
+        void                showEvent(QShowEvent *event);
6
 };
7
 #endif
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/mSharpen/qt4/Q_msharpen.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/mSharpen/qt4/Q_msharpen.cpp Changed
25
 
1
@@ -55,9 +55,6 @@
2
         SPINNER(Strength);
3
 
4
         setModal(true);
5
-        show();
6
-        flymsharpen->adjustCanvasPosition();
7
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
8
   }
9
   void Ui_msharpenWindow::sliderUpdate(int foo)
10
   {
11
@@ -96,6 +93,13 @@
12
     flymsharpen->adjustCanvasPosition();
13
 }
14
 
15
+void Ui_msharpenWindow::showEvent(QShowEvent *event)
16
+{
17
+    QDialog::showEvent(event);
18
+    flymsharpen->adjustCanvasPosition();
19
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
20
+}
21
+
22
 #define MYSPIN(x) w->doubleSpinBox##x
23
 
24
 //____________________________________
25
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/mSharpen/qt4/Q_msharpen.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/mSharpen/qt4/Q_msharpen.h Changed
7
 
1
@@ -27,4 +27,5 @@
2
 
3
 private:
4
         void resizeEvent(QResizeEvent *event);
5
+        void showEvent(QShowEvent *event);
6
 };
7
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/mplayerDelogo/qt5/DIA_flyMpDelogo.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/mplayerDelogo/qt5/DIA_flyMpDelogo.cpp Changed
39
 
1
@@ -198,6 +198,8 @@
2
         aprintf("Uploading\n");
3
         myCrop->upload();
4
         myCrop->sliderChanged();
5
+        myCrop->rubber->nestedIgnore=1;
6
+
7
         connect( ui.horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(sliderUpdate(int)));
8
 #define SPINNER(x) connect( ui.x,SIGNAL(valueChanged(int)),this,SLOT(valueChanged(int))); 
9
         SPINNER(spinX);
10
@@ -216,9 +218,6 @@
11
         ui.labelHelp->setPixmap(QPixmap(":/images/grips.png"));
12
 
13
         setModal(true);
14
-        show();
15
-        myCrop->adjustCanvasPosition();
16
-        canvas->parentWidget()->setMinimumSize(30,30); // allow resizing after the dialog has settled
17
   }
18
 
19
 /**
20
@@ -239,6 +238,18 @@
21
 }
22
 
23
 /**
24
+    \fn showEvent
25
+*/
26
+void Ui_mpdelogoWindow::showEvent(QShowEvent *event)
27
+{
28
+    myCrop->rubber->rubberband->show(); // must be called first
29
+    QDialog::showEvent(event);
30
+    myCrop->adjustCanvasPosition();
31
+    canvas->parentWidget()->setMinimumSize(30,30); // allow resizing both ways after the dialog has settled
32
+    myCrop->rubber->nestedIgnore=0;
33
+}
34
+
35
+/**
36
     \fn sliderUpdate
37
 */
38
 
39
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/mplayerDelogo/qt5/Q_mpdelogo.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/mplayerDelogo/qt5/Q_mpdelogo.h Changed
8
 
1
@@ -33,5 +33,6 @@
2
 
3
 private:
4
         void                resizeEvent(QResizeEvent *event);
5
+        void                showEvent(QShowEvent *event);
6
 };
7
 
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif.cpp Changed
201
 
1
@@ -1,5 +1,29 @@
2
 /*
3
-   Yadif C-plugin for Avisynth 2.5 - Yet Another DeInterlacing Filter
4
+ * 
5
+ * Ported from yadif c plugin, then ported from ffmpeg vf_yadif
6
+ * 
7
+ * 
8
+ * Copyright (C) 2006-2011 Michael Niedermayer <michaelni@gmx.at>
9
+ *               2010      James Darnley <james.darnley@gmail.com>
10
+
11
+ * This file is part of FFmpeg.
12
+ *
13
+ * FFmpeg is free software; you can redistribute it and/or
14
+ * modify it under the terms of the GNU Lesser General Public
15
+ * License as published by the Free Software Foundation; either
16
+ * version 2.1 of the License, or (at your option) any later version.
17
+ *
18
+ * FFmpeg is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ * You should have received a copy of the GNU Lesser General Public
24
+ * License along with FFmpeg; if not, write to the Free Software
25
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26
+ * 
27
+ * 
28
+   Yadif C-plugin for Avisynth 2.5 - Yet Another DeInterlacing Filter
29
    Copyright (C)2007 Alexander G. Balakhnin aka Fizick  http://avisynth.org.ru
30
     Port of YADIF filter from MPlayer
31
    Copyright (C) 2006 Michael Niedermayer <michaelni@gmx.at>
32
@@ -21,10 +45,6 @@
33
    Assembler optimized for GNU C compiler
34
 
35
 */
36
-/*
37
-  Ported to avidemux by mean
38
-  Same license as original (?GPL)
39
-*/
40
 
41
 #include "ADM_default.h"
42
 #include "ADM_coreVideoFilter.h"
43
@@ -32,27 +52,49 @@
44
 #include "DIA_factory.h"
45
 #include "yadif.h"
46
 #include "yadif_desc.cpp"
47
-
48
-#if defined( ADM_CPU_X86) && !defined(_MSC_VER)
49
+#include "libavutil/common.h"
50
+#if defined( ADM_CPU_X86) 
51
         #define CAN_DO_INLINE_X86_ASM
52
 #endif
53
 
54
 
55
 //************************************************
56
-#define MIN(a,b) ((a) > (b) ? (b) : (a))
57
-#define MAX(a,b) ((a) < (b) ? (b) : (a))
58
-#define ABS(a) ((a) > 0 ? (a) : (-(a)))
59
 
60
-#define MIN3(a,b,c) MIN(MIN(a,b),c)
61
-#define MAX3(a,b,c) MAX(MAX(a,b),c)
62
+
63
+static void filter_line_c( uint8_t *dst1,  const uint8_t  *prev1, const uint8_t  *cur1, const uint8_t  *next1, int w, int prefs, int mrefs, int parity, int mode);
64
+static void filter_edges_c(uint8_t *dst1, const uint8_t  *prev1, const uint8_t  *cur1, const uint8_t  *next1, int w, int prefs, int mrefs, int parity, int mode);
65
+static void filter_end_c(void) {};
66
 
67
 //===========================================================================//
68
 #ifdef CAN_DO_INLINE_X86_ASM
69
 extern "C"
70
 {
71
-void filter_line_mmx2(int mode, uint8_t *dst, const uint8_t *prev, const uint8_t *cur, const uint8_t *next, int w, int refs, int parity);
72
+ void filter_end_sse(void);     // emms , not needed for sse2
73
+ void adm_yadif_filter_line_sse2( uint8_t *dst1,  const uint8_t  *prev1, const uint8_t  *cur1, const uint8_t  *next1, int w, int prefs, int mrefs, int parity, int mode);
74
+ void adm_yadif_filter_line_ssse3( uint8_t *dst1,  const uint8_t  *prev1, const uint8_t  *cur1, const uint8_t  *next1, int w, int prefs, int mrefs, int parity, int mode);
75
 }
76
 #endif
77
+
78
+
79
+enum YADIFMode {
80
+    YADIF_MODE_SEND_FRAME           = 0, ///< send 1 frame for each frame
81
+    YADIF_MODE_SEND_FIELD           = 1, ///< send 1 frame for each field
82
+    YADIF_MODE_SEND_FRAME_NOSPATIAL = 2, ///< send 1 frame for each frame but skips spatial interlacing check
83
+    YADIF_MODE_SEND_FIELD_NOSPATIAL = 3, ///< send 1 frame for each field but skips spatial interlacing check
84
+};
85
+
86
+enum YADIFParity {
87
+    YADIF_PARITY_TFF  =  0, ///< top field first
88
+    YADIF_PARITY_BFF  =  1, ///< bottom field first
89
+    YADIF_PARITY_AUTO = -1, ///< auto detection
90
+};
91
+
92
+enum YADIFDeint {
93
+    YADIF_DEINT_ALL        = 0, ///< deinterlace all frames
94
+    YADIF_DEINT_INTERLACED = 1, ///< only deinterlace frames marked as interlaced
95
+};
96
+
97
+
98
 //
99
 /**
100
     \class yadifFilter
101
@@ -72,6 +114,13 @@
102
         virtual bool         getCoupledConf(CONFcouple **couples) ;   /// Return the current filter configuration
103
        virtual void setCoupledConf(CONFcouple *couples);
104
         virtual bool         configure(void) ;                        /// Start graphical user interface
105
+        
106
+protected:
107
+    void (*filter_line) (uint8_t *dst, const uint8_t  *prev, const uint8_t  *cur, const uint8_t  *next, int w, int prefs, int mrefs, int parity, int mode);
108
+    void (*filter_edges)(uint8_t *dst, const uint8_t  *prev, const uint8_t  *cur, const uint8_t  *next, int w, int prefs, int mrefs, int parity, int mode);
109
+    void (*filter_end)(void);    
110
+    
111
+    void filter_plane(int mode, uint8_t *dst, int dst_stride, const uint8_t *prev0, const uint8_t *cur0, const uint8_t *next0, int refs, int w, int h, int parity, int tff, int mmx);
112
 };
113
 
114
 // Add the hook to make it valid plugin
115
@@ -98,11 +147,27 @@
116
     if(!setup || !ADM_paramLoad(setup,yadif_param,&configuration))
117
     {
118
         // Default value
119
-        configuration.mode=0;
120
-        configuration.order=1;
121
+        configuration.mode=YADIF_MODE_SEND_FRAME;
122
+        configuration.deint=YADIF_DEINT_ALL; 
123
+        configuration.parity=YADIF_PARITY_AUTO;
124
     }
125
-    
126
     updateInfo();
127
+
128
+    filter_line=filter_line_c;
129
+    filter_edges=filter_edges_c;
130
+    filter_end=filter_end_c;
131
+
132
+#ifdef CAN_DO_INLINE_X86_ASM    
133
+     if (CpuCaps::hasSSE3()) 
134
+     {
135
+        filter_line=adm_yadif_filter_line_ssse3;
136
+     }else 
137
+        if (CpuCaps::hasSSE2()) 
138
+        {
139
+           filter_line=adm_yadif_filter_line_sse2;
140
+        }
141
+#endif
142
+    
143
     myName="yadif";
144
 }
145
 /**
146
@@ -112,8 +177,6 @@
147
 {
148
         delete  original;
149
         original=NULL;
150
-       
151
-       
152
 }
153
 /**
154
     \fn updateInfo
155
@@ -121,7 +184,7 @@
156
 
157
 void yadifFilter::updateInfo(void)
158
 {
159
-   memcpy(&info,previousFilter->getInfo(),sizeof(info)); 
160
+  memcpy(&info,previousFilter->getInfo(),sizeof(info)); 
161
   if(configuration.mode &1 ) // Bob
162
   {
163
     info.frameIncrement/=2;
164
@@ -133,28 +196,37 @@
165
 bool yadifFilter::configure( void) 
166
 {
167
     
168
-     diaMenuEntry tMode[]={
169
-                             {0,      QT_TRANSLATE_NOOP("yadif","Temporal & spatial check"),NULL},
170
-                             {1,   QT_TRANSLATE_NOOP("yadif","Bob, temporal & spatial check"),NULL},
171
-                             {2,      QT_TRANSLATE_NOOP("yadif","Skip spatial temporal check"),NULL},
172
-                             {3,  QT_TRANSLATE_NOOP("yadif","Bob, skip spatial temporal check"),NULL}
173
+    diaMenuEntry tMode[]={
174
+                             {0,      QT_TRANSLATE_NOOP("yadif","Frame : Temporal & spatial check"),NULL},
175
+                             {1,   QT_TRANSLATE_NOOP("yadif","Field :  Temporal & spatial check"),NULL},
176
+                             {2,      QT_TRANSLATE_NOOP("yadif","Frame : Skip spatial temporal check"),NULL},
177
+                             {3,  QT_TRANSLATE_NOOP("yadif","Field : Skip spatial temporal check"),NULL}
178
           };
179
-     diaMenuEntry tOrder[]={
180
-                             {0,      QT_TRANSLATE_NOOP("yadif","Bottom field first"),NULL},
181
-                             {1,   QT_TRANSLATE_NOOP("yadif","Top field first"),NULL}
182
+    diaMenuEntry tOrder[]={
183
+                            //{0,   QT_TRANSLATE_NOOP("yadif","Auto"),NULL},
184
+                            {1,   QT_TRANSLATE_NOOP("yadif","Top field first"),NULL},
185
+                            {2,      QT_TRANSLATE_NOOP("yadif","Bottom field first"),NULL}                             
186
           };
187
-  
188
-     diaElemMenu mMode(&(configuration.mode),   QT_TRANSLATE_NOOP("yadif","_Mode:"), 4,tMode);
189
-     diaElemMenu morder(&(configuration.order),   QT_TRANSLATE_NOOP("yadif","_Order:"), 2,tOrder);
190
+
191
+    diaMenuEntry tDeint[]={
192
+                            {0,   QT_TRANSLATE_NOOP("yadif","Deint all"),NULL},
193
+                            {1,   QT_TRANSLATE_NOOP("yadif","Deint interlaced"),NULL}
194
+          };
195
+
196
      
197
-     diaElem *elems[]={&mMode,&morder};
198
+    uint32_t parity=configuration.parity+1;
199
+    diaElemMenu mMode(&(configuration.mode),   QT_TRANSLATE_NOOP("yadif","_Mode:"), 4,tMode);
200
+    diaElemMenu mDeint(&(configuration.deint),   QT_TRANSLATE_NOOP("yadif","_Deint:"), 2,tDeint);    
201
avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/ADM_vidYadif_body.cpp Added
201
 
1
@@ -0,0 +1,297 @@
2
+/*
3
+ * Copyright (C) 2006-2011 Michael Niedermayer <michaelni@gmx.at>
4
+ *               2010      James Darnley <james.darnley@gmail.com>
5
+
6
+ * This file is part of FFmpeg.
7
+ *
8
+ * FFmpeg is free software; you can redistribute it and/or
9
+ * modify it under the terms of the GNU Lesser General Public
10
+ * License as published by the Free Software Foundation; either
11
+ * version 2.1 of the License, or (at your option) any later version.
12
+ *
13
+ * FFmpeg is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
+ * Lesser General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU Lesser General Public
19
+ * License along with FFmpeg; if not, write to the Free Software
20
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
+ */
22
+
23
+
24
+#define MAX_ALIGN 8
25
+
26
+/**
27
+    \fn getConfiguration
28
+    \brief Return current setting as a string
29
+*/
30
+bool yadifFilter::getNextFrame(uint32_t *fn,ADMImage *image)
31
+{
32
+
33
+        int mode;
34
+        int parity;
35
+        int tff;
36
+        int iplane;
37
+        int cpu;
38
+        int n;
39
+        ADMImage *src, *dst, * prev, *next;
40
+        
41
+    
42
+        mode = configuration.mode;
43
+
44
+        if (mode & 1) 
45
+        {
46
+                n = (nextFrame>>1); // bob
47
+        }
48
+        else
49
+                n = nextFrame;
50
+
51
+        src = vidCache->getImage(n);
52
+        *fn=nextFrame;
53
+        if(!src) return false;
54
+        
55
+  
56
+        // If possible get previous image...
57
+        if (n>0)
58
+                prev =  vidCache->getImage( n-1); // get previous frame
59
+        else
60
+                prev= src; // get very first frame
61
+
62
+        ADM_assert(prev);
63
+        next=vidCache->getImage(n+1);
64
+        if(!next) next=src;
65
+        ADM_assert(next);
66
+        
67
+        dst = image;
68
+        dst->copyInfo(src);
69
+
70
+        if(!prev || !src || !next)
71
+        {
72
+            printf("Failed to read frame for frame %u\n",nextFrame);
73
+            vidCache->unlockAll();
74
+            return 0;
75
+        }
76
+        
77
+  // Construct a frame based on the information of the current frame
78
+  // contained in the "vi" struct.
79
+#if 0 //MEANX
80
+        if (configuration.order == -1)
81
+//     tff = avs_is_tff(&p->vi) == 0 ? 0 : 1; // 0 or 1
82
+                tff = avs_get_parity(p->child, n) ? 1 : 0; // 0 or 1
83
+        else
84
+#endif
85
+                tff = configuration.parity;    
86
+        
87
+        parity = (mode & 1) ? (nextFrame & 1) ^ (1^tff) : (tff ^ 1);  // 0 or 1
88
+
89
+      //MEANX  cpu = avs_get_cpu_flags(p->env);
90
+
91
+        for (iplane = 0; iplane<3; iplane++)
92
+        {
93
+                ADM_PLANE plane = (iplane==0) ? PLANAR_Y : (iplane==1) ? PLANAR_U : PLANAR_V;
94
+
95
+                const unsigned char* srcp = src->GetWritePtr(plane);
96
+          // Request a Read pointer from the current source frame
97
+
98
+                const unsigned char* prevp0 = prev->GetWritePtr( plane);
99
+                unsigned char* prevp = (unsigned char*) prevp0; // with same pitch
100
+          // Request a Read pointer from the prev source frame.
101
+
102
+                const unsigned char* nextp0 = next->GetWritePtr( plane);
103
+                unsigned char* nextp = (unsigned char*) nextp0; // with same pitch
104
+          // Request a Read pointer from the next source frame.
105
+
106
+                unsigned char* dstp = dst->GetWritePtr( plane);
107
+                // Request a Write pointer from the newly created destination image.
108
+          // You can request a writepointer to images that have just been
109
+
110
+                const int dst_pitch = dst->GetPitch( plane);
111
+          // Requests pitch (length of a line) of the destination image.
112
+          // For more information on pitch see: http://www.avisynth.org/index.php?page=WorkingWithImages
113
+                // (short version - pitch is always equal to or greater than width to allow for seriously fast assembly code)
114
+
115
+                const int width =dst->GetPitch( plane);
116
+          // Requests rowsize (number of used bytes in a line.
117
+          // See the link above for more information.
118
+
119
+                const int height = dst->GetHeight( plane);
120
+          // Requests the height of the destination image.
121
+
122
+                const int src_pitch = src->GetPitch(plane);
123
+                const int prev_pitch = prev->GetPitch(plane);
124
+                const int next_pitch = next->GetPitch(plane);
125
+
126
+                // in v.0.1-0.3  all source pitches are  assumed equal (for simplicity)
127
+                                // consider other (rare) case
128
+                if (prev_pitch != src_pitch)
129
+                {
130
+                    prevp = (unsigned char *)ADM_alloc(height*src_pitch);
131
+                    int h;
132
+                    for (h=0; h<0; h++)
133
+                      memcpy(prevp+h*src_pitch, prevp0+h*prev_pitch, width);
134
+                }
135
+                    
136
+                if (next_pitch != src_pitch)
137
+                {
138
+                    nextp = (unsigned char *)ADM_alloc(height*src_pitch);
139
+                    int h;
140
+                    for (h=0; h<0; h++)
141
+                      memcpy(nextp+h*src_pitch, nextp0+h*next_pitch, width);
142
+                }
143
+                    
144
+                filter_plane(mode, dstp, dst_pitch, prevp, srcp, nextp, src_pitch, width, height, parity, tff, 0);
145
+                if (prev_pitch != src_pitch)
146
+                        ADM_dealloc(prevp);
147
+                if (next_pitch != src_pitch)
148
+                        ADM_dealloc(nextp);
149
+        }
150
+      vidCache->unlockAll();
151
+      
152
+      if (mode & 1) 
153
+      {
154
+            if(nextFrame&1)
155
+                image->Pts+= info.frameIncrement;
156
+      }
157
+      //printf("out PTs=%"PRIu64", nextFrame=%d,inc=%d\n",image->Pts,(int)nextFrame,(int)info.frameIncrement);
158
+      nextFrame++;
159
+      filter_end();
160
+      return 1;
161
+}
162
+
163
+
164
+void yadifFilter::filter_plane(int mode, uint8_t *dst, int dst_stride, const uint8_t *prev0, const uint8_t *cur0, const uint8_t *next0, int refs, int w, int h, int parity, int tff, int mmx)
165
+{
166
+        int df = 1;
167
+        int pix_3 = 3 * df;
168
+        int edge = 3 + MAX_ALIGN / df - 1;
169
+        memcpy(dst, cur0, w);
170
+        memcpy(dst + dst_stride, cur0 + refs, w);
171
+        for(int y=2; y<h-1; y++){
172
+            if(((y ^ parity) & 1)){
173
+                const uint8_t *prev= prev0 + y*refs;
174
+                const uint8_t *cur = cur0 + y*refs;
175
+                const uint8_t *next= next0 + y*refs;
176
+                uint8_t *dst2= dst + y*dst_stride;
177
+                
178
+                filter_line(dst2 + pix_3, prev + pix_3, cur + pix_3,   next + pix_3, 
179
+                             w - edge,
180
+                           y + 1 < h ? refs : -refs,
181
+                           y ? -refs : refs,
182
+                           parity ^ tff, mode);
183
+                filter_edges(dst2, prev, cur, next, 
184
+                             w,
185
+                            y + 1 < h ? refs : -refs,
186
+                            y ? -refs : refs,
187
+                            parity ^ tff, mode);                
188
+                
189
+            }else{
190
+                memcpy(dst + y*dst_stride, cur0 + y*refs, w);
191
+            }
192
+        }
193
+        memcpy(dst + (h-1)*dst_stride, cur0 + (h-1)*refs, w);
194
+
195
+}
196
+
197
+//--- ff ---
198
+#define CHECK(j)\
199
+    {   int score = FFABS(cur[mrefs - 1 + (j)] - cur[prefs - 1 - (j)])\
200
+                  + FFABS(cur[mrefs  +(j)] - cur[prefs  -(j)])\
201
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/CMakeLists.txt -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/CMakeLists.txt Changed
14
 
1
@@ -1,8 +1,10 @@
2
 INCLUDE(vf_plugin)
3
 
4
-SET(ADM_vf_yadif_SRCS ADM_vidYadif.cpp ADM_vidYadif_asm.c)
5
+SET(ADM_vf_yadif_SRCS ADM_vidYadif.cpp vf_yadif.asm)
6
 
7
-ADD_VIDEO_FILTER(ADM_vf_yadif ${ADM_vf_yadif_SRCS})
8
+YASMIFY(azm vf_yadif)
9
+
10
+ADD_VIDEO_FILTER(ADM_vf_yadif ${ADM_vf_yadif_SRCS} ${azm})
11
 
12
 INIT_VIDEO_FILTER(ADM_vf_yadif)
13
 INSTALL_VIDEO_FILTER(ADM_vf_yadif)
14
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/vf_yadif.asm -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/vf_yadif.asm Changed
10
 
1
@@ -21,7 +21,7 @@
2
 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
3
 ;******************************************************************************
4
 
5
-%include "libavutil/x86/x86util.asm"
6
+%include "admx86util.asm"
7
 
8
 SECTION_RODATA
9
 
10
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif.conf -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif.conf Changed
8
 
1
@@ -1,4 +1,5 @@
2
 yadif{
3
 uint32_t:mode
4
-uint32_t:order
5
+int32_t:parity
6
+uint32_t:deint
7
 }
8
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif.h -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif.h Changed
15
 
1
@@ -1,9 +1,8 @@
2
-// automatically generated by admSerialization.py, do not edit!
3
 // automatically generated by admSerialization.py do not edit
4
-#ifndef ADM_yadif_CONF_H
5
-#define ADM_yadif_CONF_H
6
+#include "string"
7
+#pragma once
8
 typedef struct {
9
 uint32_t mode;
10
-uint32_t order;
11
+int32_t parity;
12
+uint32_t deint;
13
 }yadif;
14
-#endif
15
avidemux_2.7.3.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif_desc.cpp -> avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif_desc.cpp Changed
11
 
1
@@ -1,5 +1,7 @@
2
-const ADM_paramList yadif_param[]={
3
+// automatically generated by admSerialization.py, do not edit!
4
+extern const ADM_paramList yadif_param[]={
5
  {"mode",offsetof(yadif,mode),"uint32_t",ADM_param_uint32_t},
6
- {"order",offsetof(yadif,order),"uint32_t",ADM_param_uint32_t},
7
+ {"parity",offsetof(yadif,parity),"int32_t",ADM_param_int32_t},
8
+ {"deint",offsetof(yadif,deint),"uint32_t",ADM_param_uint32_t},
9
 {NULL,0,NULL}
10
 };
11
avidemux_2.7.4.tar.gz/avidemux_plugins/ADM_videoFilters6/yadif/yadif_json.cpp Added
22
 
1
@@ -0,0 +1,20 @@
2
+// automatically generated by admSerialization.py, do not edit!
3
+#include "ADM_default.h"
4
+#include "ADM_paramList.h"
5
+#include "ADM_coreJson.h"
6
+#include "yadif.h"
7
+bool  yadif_jserialize(const char *file, const yadif *key){
8
+admJson json;
9
+json.addUint32("mode",key->mode);
10
+json.addInt32("parity",key->parity);
11
+json.addUint32("deint",key->deint);
12
+return json.dumpToFile(file);
13
+};
14
+bool  yadif_jdeserialize(const char *file, const ADM_paramList *tmpl,yadif *key){
15
+admJsonToCouple json;
16
+CONFcouple *c=json.readFromFile(file);
17
+if(!c) {ADM_error("Cannot read json file");return false;}
18
+bool r= ADM_paramLoadPartial(c,tmpl,key);
19
+delete c;
20
+return r;
21
+};
22
avidemux_2.7.3.tar.gz/bootStrapCrossMingwQt5_mxe.sh -> avidemux_2.7.4.tar.gz/bootStrapCrossMingwQt5_mxe.sh Changed
79
 
1
@@ -6,6 +6,7 @@
2
 default_mxerootdir="/opt/mxe"
3
 mxerootdir="$default_mxerootdir"
4
 rebuild=0
5
+debug=0
6
 do_core=1
7
 do_qt=1
8
 do_cli=1
9
@@ -62,7 +63,11 @@
10
         export TOOLCHAIN_LOCATION=${MXE_ROOT}/usr
11
         export SDL2DIR=${MXE_ROOT}/usr/${MXE_TARGET}
12
         export PARAL="-j $(nproc)"
13
-        export INSTALL_DIR=${MINGW}/out/avidemux
14
+        if [ "x$debug" != "x1" ]; then
15
+            export INSTALL_DIR=${MINGW}/out/avidemux
16
+        else
17
+            export INSTALL_DIR=${MINGW}/out_debug/avidemux
18
+        fi
19
     fi
20
     export CROSS_PREFIX=$MXE_TARGET
21
     export PKG_CONFIG_PATH=$MINGW/lib/pkgconfig
22
@@ -84,6 +89,12 @@
23
     export BUILDDIR=$1
24
     export SOURCEDIR=$2
25
     export EXTRA=$3
26
+    GENERATOR="Unix Makefiles"
27
+    if [ "x$debug" = "x1" ]; then
28
+                DEBUG="-DVERBOSE=1 -DCMAKE_BUILD_TYPE=Debug"
29
+                BUILDDIR="${BUILDDIR}_debug"
30
+                GENERATOR="CodeBlocks - Unix Makefiles"
31
+    fi
32
     echo "Building $BUILDDIR from $SOURCEDIR (Extra=$EXTRA)"
33
     if [ "x$rebuild" != "x1" ]; then
34
         rm -Rf ./"$BUILDDIR"
35
@@ -104,10 +115,11 @@
36
     -DCMAKE_AR:STRING=${CROSS_PREFIX}-ar \
37
     -DCMAKE_RC_COMPILER:STRING=${CROSS_PREFIX}-windres \
38
     -DAVIDEMUX_TOP_SOURCE_DIR="$TOP" \
39
-    -G "Unix Makefiles" \
40
+    ${DEBUG} \
41
+    -G "${GENERATOR}" \
42
     $EXTRA \
43
     $SOURCEDIR || fail cmake
44
-    make $PARAL VERBOSE=1 >& /tmp/log$BUILDDIR || fail make
45
+    make $PARAL >& /tmp/log$BUILDDIR || fail "make, result in /tmp/log$BUILDDIR "
46
     make install || fail make_install
47
     # Only install  component=dev for dev package
48
     if [ "x$author_setup" = "x1" ]; then
49
@@ -121,6 +133,7 @@
50
     echo "  --help                : Print usage"
51
     echo "  --32                  : Build a 32 bit application (default)"
52
     echo "  --64                  : Build a 64 bit application"
53
+    echo "  --debug               : Switch debugging on"
54
     echo "  --mxe-root=DIR        : Use MXE installed in DIR (default: ${default_mxerootdir})"
55
     echo "  --rebuild             : Preserve existing build directories"
56
     echo "  --with-core           : Build core"
57
@@ -177,9 +190,12 @@
58
         echo "No avidemux.exe (${BITS} bit) found in ${INSTALL_DIR}, aborting"
59
         exit 1
60
     fi
61
-    echo "Preparing release package..."
62
+    echo "Preparing package..."
63
     cd $TOP
64
     PACKAGE_DIR="packaged_mingw_build_${BUILDDATE}"
65
+    if [ "x$debug" = "x1" ]; then
66
+        PACKAGE_DIR="packaged_mingw_debug_build_${BUILDDATE}"
67
+    fi
68
     if [ ! -e $PACKAGE_DIR ]; then
69
         mkdir $PACKAGE_DIR
70
     fi
71
@@ -236,6 +252,7 @@
72
     libwinpthread-*.dll \
73
     libx264-*.dll \
74
     libx265.dll \
75
+    libzstd.dll \
76
     SDL2.dll \
77
     ssleay32.dll \
78
     xvidcore.dll \
79
avidemux_2.7.3.tar.gz/cmake/admCheckMiscLibs.cmake -> avidemux_2.7.4.tar.gz/cmake/admCheckMiscLibs.cmake Changed
17
 
1
@@ -47,11 +47,13 @@
2
        MESSAGE(STATUS "*******************")
3
 
4
        FIND_HEADER_AND_LIB(XVIDEO X11/extensions/Xvlib.h Xv XvShmPutImage)
5
+       FIND_HEADER_AND_LIB(XEXT X11/extensions/XShm.h Xext XShmAttach)
6
        PRINT_LIBRARY_INFO("XVideo" XVIDEO_FOUND "${XVIDEO_INCLUDE_DIR}" "${XVIDEO_LIBRARY_DIR}")
7
+       PRINT_LIBRARY_INFO("Xext" XEXT_FOUND "${XEXT_INCLUDE_DIR}" "${XEXT_LIBRARY_DIR}")
8
 
9
-       IF (XVIDEO_FOUND)
10
+       IF (XVIDEO_FOUND AND XEXT_FOUND)
11
            SET(USE_XV 1)
12
-       ENDIF (XVIDEO_FOUND)
13
+       ENDIF (XVIDEO_FOUND AND XEXT_FOUND)
14
 
15
        MESSAGE("")
16
    ENDIF (XVIDEO)
17
avidemux_2.7.3.tar.gz/cmake/admFFmpegVersion.cmake -> avidemux_2.7.4.tar.gz/cmake/admFFmpegVersion.cmake Changed
5
 
1
@@ -1,2 +1,2 @@
2
-set(FFMPEG_VERSION "4.1.1")
3
+set(FFMPEG_VERSION "4.1.4")
4
 
5
avidemux_2.7.3.tar.gz/cmake/admInstallDir.cmake -> avidemux_2.7.4.tar.gz/cmake/admInstallDir.cmake Changed
10
 
1
@@ -55,7 +55,7 @@
2
 MACRO (ADM_INSTALL_LIB_FILES files)
3
         INSTALL(FILES ${files} 
4
                         DESTINATION ${AVIDEMUX_LIB_DIR}
5
-                        PERMISSIONS WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE
6
+                        PERMISSIONS WORLD_READ WORLD_EXECUTE GROUP_READ GROUP_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE
7
                         COMPONENT  runtime
8
                 )
9
 ENDMACRO (ADM_INSTALL_LIB_FILES)
10
avidemux_2.7.3.tar.gz/cmake/admYasm_gcc.cmake -> avidemux_2.7.4.tar.gz/cmake/admYasm_gcc.cmake Changed
10
 
1
@@ -17,7 +17,7 @@
2
     SET(CMAKE_ASM_NASM_COMPILER ${YASM_YASM})
3
     SET(ASM_ARGS "")
4
     IF(APPLE)
5
-            SET(ASM_ARGS_FORMAT  "-f macho64 -DPREFIX")
6
+            SET(ASM_ARGS_FORMAT  "-f macho64 -DPREFIX -DPIC")
7
     ELSE(APPLE)
8
       IF(WIN32)
9
         IF(ADM_CPU_X86_64)
10
avidemux_2.7.3.tar.gz/cmake/avidemuxVersion.cmake -> avidemux_2.7.4.tar.gz/cmake/avidemuxVersion.cmake Changed
10
 
1
@@ -7,7 +7,7 @@
2
 include(admTimeStamp)
3
 SET(CPACK_PACKAGE_VERSION_MAJOR "2")
4
 SET(CPACK_PACKAGE_VERSION_MINOR "7")
5
-SET(CPACK_PACKAGE_VERSION_P     "3")
6
+SET(CPACK_PACKAGE_VERSION_P     "4")
7
 SET(AVIDEMUX_MAJOR_MINOR "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
8
 SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_P}")
9
 IF(NOT AVIDEMUX_VERSION)
10
avidemux_2.7.3.tar.gz/cmake/osx/fonts.conf -> avidemux_2.7.4.tar.gz/cmake/osx/fonts.conf Changed
15
 
1
@@ -24,7 +24,12 @@
2
 <!-- Font directory list -->
3
 
4
    <dir>/usr/share/fonts</dir>
5
-   <dir>/usr/X11/lib/X11/fonts</dir> <dir>/opt/local/share/fonts</dir> <dir>/Library/Fonts</dir> <dir>/Network/Library/Fonts</dir> <dir>/System/Library/Fonts</dir>
6
+   <dir>/usr/X11/lib/X11/fonts</dir>
7
+   <dir>/opt/local/share/fonts</dir>
8
+   <dir>~/Library/Fonts</dir>
9
+   <dir>/Library/Fonts</dir>
10
+   <dir>/Network/Library/Fonts</dir>
11
+   <dir>/System/Library/Fonts</dir>
12
    <dir prefix="xdg">fonts</dir>
13
    <!-- the following element will be removed in the future -->
14
    <dir>~/.fonts</dir>
15