We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 46
avidemux3.changes
Changed
x
1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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(©ModeSanitizeDts,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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
3
4
5
-#if 1
6
+#if 0
7
#define aprintf printf
8
#else
9
#define aprintf(...) {}
10
11
12
protected:
13
admMutex lock;
14
+ bool failure;
15
GUI_WindowInfo info;
16
IDirect3DSurface9 *mySurface;
17
IDirect3DSurface9 *myYV12Surface;
18
19
videoBuffer=NULL;
20
videoWidget=NULL;
21
d3dHandle=admD3D::getHandle();
22
-
23
+ failure=false;
24
}
25
/**
26
\fn dxvaRender
27
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
}
3
delete r;
4
}
5
- vdpau.fullQueue.clear();
6
}
7
+ vdpau.fullQueue.clear();
8
}
9
/**
10
\fn uncompress
11
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
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
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
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
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
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
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
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
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
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
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
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
165
166
{
167
int i;
168
+#if 0
169
FILE *fd = NULL;
170
char magic[4];
171
172
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
38
}
39
r=true;
40
}
41
+
42
+ qtUnregisterDialog(cookie->dialog);
43
+
44
delete cookie;
45
return r;
46
}
47
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
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
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
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
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
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
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
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
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
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
2
this,SLOT(languagesClicked(int)));
3
* */
4
}
5
- // set the parent and show the window
6
- qtRegisterDialog(window);
7
};
8
/**
9
* \fn setLanguageFromPool
10
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
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
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
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
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
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
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
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
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
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
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
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
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
2
void filtermainWindow::closePreview()
3
{
4
if (previewDialog)
5
- {
6
qtUnregisterDialog(previewDialog);
7
- delete previewDialog;
8
- previewDialog = NULL;
9
- }
10
}
11
12
/**
13
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
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
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
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
70
*/
71
uint32_t Ui_seekablePreviewWindow::frameIndex()
72
{
73
- return seekablePreview->sliderGet();
74
+ return seekablePreview->sliderGet();
75
}
76
77
/**
78
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
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
16
17
threshold = RESIZE_THRESHOLD;
18
actZoomCalled = false;
19
- ignoreResizeEvent = true;
20
+ ignoreResizeEvent = false;
21
blockResizing = false;
22
blockZoomChanges = true;
23
24
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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'intent d'obrir %s!</translation>
9
</message>
10
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
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'àudio no estàndard per a DVD</translation>
42
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
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
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
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
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
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'avsproxy</translation>
122
</message>
123
124
<translation type="unfinished">S'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'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'esteu segur?</translation>
156
</message>
157
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
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
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
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
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
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
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
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
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
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
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
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
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
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'er ved at dekodere hele videoen. Dette kan tage lang tid. Fortsæt?</translation>
9
</message>
10
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 'Tag' für MP3-Tonspuren in MPEG-4 Containern benutzen</translation>
35
+ <translation type="obsolete">_Alternativen 'Tag' 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
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
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
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
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
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&eferences</source>
96
<translation>&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
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 &Warteschlange hinzufügen...</translation>
113
</message>
114
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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>&Open...</translation>
27
</message>
28
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&eue</translation>
36
</message>
37
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&eferences</source>
100
<translation>Pr&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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 "%s".</source>
117
<translation>Impossible d'ouvrir "%s".</translation>
118
</message>
119
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'anormal c'est produit</translation>
128
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
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
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
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'utiliser la même méthode d'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
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
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
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
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
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
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
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
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
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
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
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&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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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&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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
20
<message>
21
<location line="-10"/>
22
<source>&Tools</source>
23
- <translation type="unfinished">С&ервис</translation>
24
+ <translation type="unfinished">&Инструменты</translation>
25
</message>
26
<message>
27
<location line="-36"/>
28
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
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
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
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
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
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&eferences</source>
106
<translation>&Настройки</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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
158
<translation>它没'有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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
158
<translation>它沒'有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
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
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
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
2
</message>
3
<message>
4
<source>Show </source>
5
- <translation>Mostra</translation>
6
+ <translation>Mostra </translation>
7
</message>
8
<message>
9
<source>&Rename</source>
10
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
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
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 '%1'</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 '%1'.</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 '%1'</source>
50
<translation>Ha fallat en extreure les metadades del connector des de «%1»</translation>
51
</message>
52
53
<name>QPSQLResult</name>
54
<message>
55
<source>Query results lost - probably discarded on executing another SQL query.</source>
56
- <translation>S'han perdut els resultats de la consulta - probablement s'han descartat en executar una altra consulta SQL.</translation>
57
+ <translation>S'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
62
</message>
63
<message>
64
<source>Unable to get result</source>
65
- <translation>No s'ha pogut obtenir el resultat</translation>
66
+ <translation>No s'ha pogut obtenir els resultats</translation>
67
</message>
68
<message>
69
<source>Unable to send query</source>
70
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 ',' to separate ranges and pages, '-' 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
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
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
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'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'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
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 > 255</source>
120
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
130
</message>
131
<message>
132
<source>unrecognised compile-time option bit(s)</source>
133
- <translation>bit/s no reconegut/s d'opció en temps de compilació </translation>
134
+ <translation>bit/s no reconegut/s d'opció en temps de compilació</translation>
135
</message>
136
<message>
137
<source>missing ) after (?# comment</source>
138
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'Unicode</translation>
144
</message>
145
<message>
146
<source>parentheses are too deeply nested (stack check)</source>
147
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
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
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
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
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
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
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
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
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
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
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
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
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 '%1' requires Qt %2, found Qt %3.</source>
70
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't Save</source>
133
+ <translation>Не сохранять</translation>
134
+ </message>
135
+</context>
136
+<context>
137
<name>QColorDialog</name>
138
<message>
139
<source>Hu&e:</source>
140
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 '%1'.</source>
162
- <translation>Неизвестный параметр '%1'.</translation>
163
+ <translation>Неизвестный параметр «%1».</translation>
164
</message>
165
<message>
166
<source>Unknown options: %1.</source>
167
168
</message>
169
<message>
170
<source>Missing value after '%1'.</source>
171
- <translation>Отсутствует значение после '%1'.</translation>
172
+ <translation>Отсутствует значение после «%1».</translation>
173
</message>
174
<message>
175
<source>Unexpected value after '%1'.</source>
176
- <translation>Неожиданное значение после '%1'.</translation>
177
+ <translation>Неожиданное значение после «%1».</translation>
178
</message>
179
<message>
180
<source>[options]</source>
181
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
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
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
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>&Select All</source>
137
+ <translation>全部選擇(&S)</translation>
138
</message>
139
<message>
140
- <source>Left</source>
141
- <translation>左鍵</translation>
142
+ <source>&Step up</source>
143
+ <translation>單步向上(&S)</translation>
144
</message>
145
<message>
146
- <source>Menu</source>
147
- <translation>選單</translation>
148
+ <source>Step &down</source>
149
+ <translation>單步向下(&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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
23
24
protected:
25
FILE *f;
26
+ int startOffset;
27
int fq;
28
int channels;
29
int payload;
30
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
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
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
2
}
3
}
4
5
- uint32_t length;
6
wRead32(t32);
7
ADM_info(" %lu bytes data \n", totalSize);
8
info.blockalign=1;
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
add dst2q,4
3
sub w4d,1
4
jnz .again
5
- ret
6
+ RET
7
;
8
;
9
;
10
11
add dstvq,8
12
sub w8q,1
13
jnz .nv12_again
14
- ret
15
+ RET
16
17
;yuv444_MMX
18
; xdst=dst;
19
20
add dstq,8
21
sub w8q,1
22
jnz .again3
23
- ret
24
+ RET
25
26
27
;eof
28
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
82
CHECK ("hevc");
83
CHECK ("HVC1");
84
CHECK ("hvc1");
85
- return h265;
86
-
87
-#undef CHECK
88
+ return false;
89
}
90
91
/**
92
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
18
{
19
20
int xError;
21
- VASurfaceStatus status;
22
CHECK_WORKING(false);
23
CHECK_ERROR(vaPutImage(ADM_coreLibVA::display,
24
dst->surface,
25
26
{
27
28
int xError;
29
- VASurfaceStatus status;
30
CHECK_WORKING(false);
31
CHECK_ERROR(vaGetImage(ADM_coreLibVA::display,
32
dst->surface,
33
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
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
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
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
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
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
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
2
bool hurryUp;
3
bool _drain;
4
bool _done;
5
+ bool _keepFeeding;
6
bool _endOfStream;
7
bool _setBpp;
8
bool _setFcc;
9
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
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
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
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
27
hurryUp=false;
28
_drain=false;
29
_done=false;
30
+ _keepFeeding=false;
31
_endOfStream=false;
32
_setBpp=false;
33
_setFcc=false;
34
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
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
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
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
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
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
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
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
===================================================================
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
id=0;
3
memset(&_rdWav,0,sizeof(_rdWav));
4
delay=0;
5
-
6
+ totalDataSize=0;
7
}
8
MP4Track::~MP4Track()
9
{
10
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
12
char *type;
13
uint64_t startDts;
14
uint32_t version=0;
15
+ bool reindex=false;
16
indexFile index;
17
r=0;
18
19
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
46
// 2 Index
47
//******************
48
bool fourBytes;
49
- while(keepRunning)
50
+ while(true)
51
{
52
fourBytes=false;
53
int startCode=pkt->findStartCode2(fourBytes);
54
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
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
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
11
indexerData data;
12
dmxPacketInfo tmpInfo;
13
14
+uint8_t result=1;
15
bool bAppend=false;
16
17
listOfUnits.clear();
18
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
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
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
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
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
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
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
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
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
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
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
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
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
58
break;
59
}
60
}
61
-
62
+the_end:
63
printf("\n");
64
// Mark(&data,&info,2);
65
qfprintf(index,"\n[End]\n");
66
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
11
MakeGammaLUT();
12
}
13
14
-#ifdef _DEBUG
15
+#ifdef cyuv_DEBUG
16
total = wby4 * h;
17
totalby2 = total / 2;
18
19
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
147
{
148
delete original;
149
original=NULL;
150
-
151
-
152
}
153
/**
154
\fn updateInfo
155
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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