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 27
avidemux3.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Tue Mar 08 16:09:34 UTC 2016 - joerg.lorenzen@ki.tng.de
4
+
5
+- Update to version 2.6.12
6
+ + [H264] Fixed crash when saving h264 annexB in avi (Brundle)
7
+ + [Vdpau] Fixed VDPAU resize and deinterlace when height is padded
8
+ + [Mkv] Faster loading of VP9 and h265
9
+ + [MP4] Supports more flavors of H265
10
+ + [i18n] Spanish translation update by ringmaster
11
+ + [Edit] Another frame seeking bug fixed, happened rarely
12
+ + [All] Slightly better crash handler
13
+ + [FFmpeg]Update to 2.7.6
14
+ + [Muxer] Basic webm support
15
+ + [Jobs] Fixed right click menus with qt5
16
+
17
+-------------------------------------------------------------------
18
Fri Feb 05 21:02:11 UTC 2016 - joerg.lorenzen@ki.tng.de
19
20
- Update to version 2.6.11
21
avidemux3.spec
Changed
54
1
2
3
Name: avidemux3
4
Summary: Graphical video editing and transcoding tool
5
-Version: 2.6.11
6
+Version: 2.6.12
7
Release: 1
8
Url: http://avidemux.sourceforge.net/
9
Source0: avidemux_%{version}.tar.gz
10
11
Patch4: avidemux-package_version.patch
12
Patch5: avidemux-bootStrap.patch
13
Patch6: avidemux-cpu_armel.patch
14
-Patch7: avidemux-ADM_VERSION.patch
15
-Patch8: avidemux-cmake-permissions.patch
16
-Patch9: avidemux-find-lrelease-qt5.patch
17
+Patch7: avidemux-cmake-permissions.patch
18
+Patch8: avidemux-find-lrelease-qt5.patch
19
License: GPL-2.0
20
Group: Productivity/Multimedia/Video/Editors and Convertors
21
22
23
find ./ -name '*.sql' -exec dos2unix -q {} \;
24
find ./ -name '*.txt' -exec dos2unix -q {} \;
25
find . -type f -exec sed -i -e 's|intfloat_readwrite.h|intfloat.h|g' {} \;
26
-sed -i -e 's|set(FFMPEG_VERSION "2.7.2")|set(FFMPEG_VERSION "%{ffmpeg_version}")|g' cmake/admFFmpegBuild.cmake
27
-rm -f avidemux_core/ffmpeg_package/ffmpeg-2.7.2.tar.bz2
28
+sed -i -e 's|set(FFMPEG_VERSION "2.7.6")|set(FFMPEG_VERSION "%{ffmpeg_version}")|g' cmake/admFFmpegBuild.cmake
29
+rm -f avidemux_core/ffmpeg_package/ffmpeg-2.7.6.tar.bz2
30
cp %{S:2} avidemux_core/ffmpeg_package/
31
pushd avidemux_core/ffmpeg_package/patches
32
rm -f config.mak.diff
33
34
%patch4 -p0
35
%patch5 -p0
36
%patch6 -p0
37
-%patch7 -p0
38
-%patch8 -p1
39
+%patch7 -p1
40
%if %{with build_qt5}
41
-%patch9 -p0
42
+%patch8 -p0
43
%endif
44
chmod 755 bootStrap.bash
45
chmod 644 AUTHORS COPYING README
46
47
%{_libdir}/ADM_plugins6/muxers/libADM_mx_mp4.so
48
%{_libdir}/ADM_plugins6/muxers/libADM_mx_mp4v2.so
49
%{_libdir}/ADM_plugins6/muxers/libADM_mx_raw.so
50
+%{_libdir}/ADM_plugins6/muxers/libADM_mx_Webm.so
51
%{_libdir}/ADM_plugins6/pluginSettings/x264/3/ultraFast.json
52
%{_libdir}/ADM_plugins6/pluginSettings/x264/3/PSP.json
53
%{_libdir}/ADM_plugins6/pluginSettings/x264/3/veryFast.json
54
avidemux-ADM_VERSION.patch
Deleted
23
1
2
---- avidemux/common/main.cpp.orig 2014-11-28 22:27:34.739989392 +0100
3
-+++ avidemux/common/main.cpp 2014-11-28 22:27:19.253254919 +0100
4
-@@ -137,7 +137,7 @@
5
- int startAvidemux(int argc, char *argv[])
6
- {
7
- printf("*************************\n");
8
-- printf(" Avidemux v"ADM_VERSION);
9
-+ printf(" Avidemux v",ADM_VERSION);
10
-
11
- #if defined( ADM_SUBVERSION )
12
- #define MKSTRING(x) x
13
---- avidemux/gtk/CMakeLists.txt.orig 2014-11-28 22:42:25.006820533 +0100
14
-+++ avidemux/gtk/CMakeLists.txt 2014-11-28 22:42:25.039819908 +0100
15
-@@ -34,6 +34,7 @@
16
-
17
- SDLify(../common/main.cpp)
18
- ADD_SOURCE_CFLAGS(../common/main.cpp "-DADM_SUBVERSION=\"${ADM_SUBVERSION}\"")
19
-+ADD_SOURCE_CFLAGS(../common/main.cpp "-DADM_VERSION='\"${AVIDEMUX_VERSION}\"'")
20
-
21
- ###########################################
22
- # Version Info
23
avidemux_2.6.11.tar.gz/avidemux_core/ffmpeg_package/ffmpeg-2.7.2.tar.bz2
Deleted
avidemux_2.6.11.tar.gz/avidemux/common/ADM_editor/include/ADM_edit.hxx -> avidemux_2.6.12.tar.gz/avidemux/common/ADM_editor/include/ADM_edit.hxx
Changed
9
1
2
bool updateImageTiming(_SEGMENT *seg,ADMImage *image);
3
// Need to get the image just before targetPts
4
bool decodeTillPictureAtPts(uint64_t targetPts,ADMImage *image);
5
+ bool getFrameNumFromPtsOrBefore(_VIDEOS *v,uint64_t refTime,int &frameNumber);
6
7
protected:
8
/// Decode frame and on until frame is popped out of decoders
9
avidemux_2.6.11.tar.gz/avidemux/common/ADM_editor/src/ADM_edSearch.cpp -> avidemux_2.6.12.tar.gz/avidemux/common/ADM_editor/src/ADM_edSearch.cpp
Changed
165
1
2
#include "fourcc.h"
3
#include "ADM_edit.hxx"
4
#include "ADM_vidMisc.h"
5
+
6
+#define pivotPrintf(...) {}
7
+
8
/**
9
\fn getNKFramePTS
10
*/
11
12
}
13
return false;
14
}
15
+/**
16
+ * \fn getFrameNumberBeforePts
17
+ * \brief Search the framenumber that has a valid PTS = what's given or before
18
+ * it can be equal to refTime
19
+ * @param v
20
+ * @param refTime
21
+ * @param frameNumber
22
+ * @return
23
+ */
24
+bool ADM_Composer::getFrameNumFromPtsOrBefore(_VIDEOS *v,uint64_t refTime,int &frameNumber)
25
+{
26
+ uint32_t nbFrame = v->_nb_video_frames;
27
+ uint64_t pts, dts;
28
+ uint32_t curFrame=nbFrame >> 1;
29
+ uint32_t splitMoval = curFrame >> 1;
30
+ pivotPrintf("Looking for frame with a pts %s\n",ADM_us2plain(refTime));
31
+ // Try to find the frame that as the timestamp close enough to refTime, while being smaller
32
+ do
33
+ {
34
+ // seems like the pts determination, not always works -> retry if necessary
35
+ bool worked;
36
+ do {
37
+ pts=ADM_NO_PTS;
38
+ worked = v->_aviheader->getPtsDts(curFrame,&pts,&dts);
39
+ if (worked && pts != ADM_NO_PTS)
40
+ break; // found
41
+ curFrame--;
42
+ if (!curFrame)
43
+ {
44
+ ADM_warning("The whole segment is corrupted. Abort the search");
45
+ return false;
46
+ }
47
+ } while(true);
48
+ pivotPrintf("SplitMoval=%d\n",splitMoval);
49
+ if(pts==refTime)
50
+ break;
51
+ if (!splitMoval)
52
+ break;
53
+ pivotPrintf("Pivot time is %d, %s\n",curFrame,ADM_us2plain(pts));
54
+ if (pts >= refTime)
55
+ curFrame -= splitMoval;
56
+ else
57
+ curFrame += splitMoval;
58
+ splitMoval >>= 1;
59
+ pivotPrintf("Split=%d\n",splitMoval);
60
+ } while(refTime != pts);
61
+
62
+ pivotPrintf("-Matching frame is %d, time is %s\n",curFrame,ADM_us2plain(pts));
63
+ if (pts > refTime && curFrame)
64
+ curFrame--;
65
+ frameNumber=curFrame;
66
+ return true;
67
+}
68
/**
69
\fn searchPreviousKeyFrameInRef
70
\brief Search next key frame in ref video ref
71
72
@param nkTime : Time of the ref video
73
74
*/
75
+
76
bool ADM_Composer::searchPreviousKeyFrameInRef(int ref,uint64_t refTime,uint64_t *nkTime)
77
{
78
// Search for the current frame with quick search
79
_VIDEOS *v = _segments.getRefVideo(ref);
80
uint32_t nbFrame = v->_nb_video_frames;
81
uint64_t pts, dts;
82
- uint32_t curFrame=nbFrame >> 1;
83
- uint32_t splitMoval = curFrame >> 1;
84
- do {
85
- // seems like the pts determination, not always works -> retry if necessary
86
- bool worked;
87
- do {
88
- worked = v->_aviheader->getPtsDts(curFrame,&pts,&dts);
89
- if (!worked || pts == ADM_NO_PTS) {
90
- curFrame++;
91
- if (curFrame == nbFrame) {
92
- ADM_warning("The whole segment is corrupted. Abort the search");
93
- return false;
94
- }
95
- } else
96
- break;
97
- } while(true);
98
-
99
- if (splitMoval != 0) {
100
- if (pts >= refTime)
101
- curFrame -= splitMoval;
102
- else
103
- curFrame += splitMoval;
104
- splitMoval >>= 1;
105
- } else
106
- break;
107
- } while(refTime != pts);
108
+ int curFrame;
109
110
- if (pts < refTime)
111
- curFrame++;
112
- for (int i=curFrame; i>=0; i--)
113
- {
114
- uint64_t p;
115
- uint32_t flags;
116
- v->_aviheader->getFlags(i,&flags);
117
- if(!(flags & AVI_KEY_FRAME)) continue;
118
- if(!v->_aviheader->getPtsDts(i,&pts,&dts) || pts == ADM_NO_PTS)
119
- {
120
- ADM_warning("The keyframe with PTS less than %"PRIu32"ms is corrupted\n",refTime/1000);
121
- continue;
122
- }
123
- if(pts>=refTime) continue;
124
- *nkTime = pts;
125
- return true;
126
- }
127
- ADM_warning("Cannot find keyframe with PTS less than %"PRIu32"ms\n",refTime/1000);
128
+ // look up the frame we are starting from...
129
+ if(!getFrameNumFromPtsOrBefore(v,refTime,curFrame))
130
+ {
131
+ ADM_warning("Cannot locate the frame we are talking about at PTS=%s\n",ADM_us2plain(refTime));
132
+ return false;
133
+ }
134
+ // rewind until we find a keyframe
135
+ for (int i=curFrame; i>=0; i--)
136
+ {
137
+ uint64_t p;
138
+ uint32_t flags;
139
+ v->_aviheader->getFlags(i,&flags);
140
+ if(!(flags & AVI_KEY_FRAME))
141
+ continue;
142
+ if(!v->_aviheader->getPtsDts(i,&pts,&dts))
143
+ continue;
144
+ if(pts == ADM_NO_PTS)
145
+ continue;
146
+ pivotPrintf("-- Previous Kf ! This one is %s\n",ADM_us2plain(pts));
147
+ pivotPrintf("-- Ref is %s\n",ADM_us2plain(refTime));
148
+ pivotPrintf("-- DTS %s\n",ADM_us2plain(dts));
149
+ if(pts>=refTime)
150
+ continue;
151
+ *nkTime = pts; // ok found it
152
+#if 0
153
+ for(int j=0;j<5;j++)
154
+ {
155
+ if(!v->_aviheader->getPtsDts(i+j,&pts,&dts)) continue ;
156
+ printf("Neighbor [%d] = %s\n",j,ADM_us2plain(pts));
157
+ }
158
+#endif
159
+ return true;
160
+ }
161
+ ADM_warning("Cannot find keyframe with PTS less than %s\n",ADM_us2plain(refTime));
162
return false;
163
}
164
165
avidemux_2.6.11.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioPcm.cpp -> avidemux_2.6.12.tar.gz/avidemux/common/ADM_editor/src/audio/ADM_edAudioPcm.cpp
Changed
13
1
2
{
3
if(labs((int64_t)lastDts-(int64_t)packetBufferDts)>ADM_ALLOWED_DRIFT_US)
4
{
5
- printf("[Composer::getPCMPacket] Track %d,%"PRIx64" : drift %d, computed :%"PRIu64" got %"PRIu64"\n",
6
- (int)myTrackNumber,(uint64_t)trk,(int)(lastDts-packetBufferDts),lastDts,packetBufferDts);
7
+ ADM_info("[Composer::getPCMPacket] Track %d,%"PRIx64" : drift %d, computed :%s",
8
+ (int)myTrackNumber,(uint64_t)trk,(int)(lastDts-packetBufferDts),ADM_us2plain(lastDts));
9
+ ADM_info(" got %s\n", ADM_us2plain(packetBufferDts));
10
if(packetBufferDts<lastDts)
11
{
12
printf("[Composer::getPCMPacket] Track %d:%"PRIx64" : Dropping packet %"PRIu32" last =%"PRIu32"\n",myTrackNumber,(uint64_t)trk,(uint32_t)(lastDts/1000),(uint32_t)(packetBufferDts/1000));
13
avidemux_2.6.11.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopyFromAnnexB.cpp -> avidemux_2.6.12.tar.gz/avidemux/common/ADM_muxerGate/src/ADM_videoCopyFromAnnexB.cpp
Changed
12
1
2
context->pix_fmt = PIX_FMT_YUV420P;
3
4
video_body->getExtraHeaderData(&extraLen,&extraData);
5
- context->extradata=extraData;
6
+ // duplicate extraData with malloc scheme, it will be freed by the bitstream filter
7
+ context->extradata=(uint8_t*)av_malloc(extraLen);
8
+ memcpy( context->extradata,extraData,extraLen);
9
context->extradata_size=extraLen;
10
codecContext=(void *)context;
11
12
avidemux_2.6.11.tar.gz/avidemux/common/gui_savenew.cpp -> avidemux_2.6.12.tar.gz/avidemux/common/gui_savenew.cpp
Changed
43
1
2
uint32_t extraLen;
3
video_body->getExtraHeaderData(&extraLen,&extra);
4
//#warning do something better
5
- ADM_videoStreamCopy *copy=NULL;
6
+ ADM_videoStreamCopy *copy=NULL;
7
if(isH264Compatible(info.fcc))
8
{
9
+ bool isAnnexB=!extraLen; // this is not very good
10
if(muxer->preferH264AnnexB())
11
{
12
- ADM_info("The video stream is H264\n");
13
+ ADM_info("The video stream is a flavor of H264\n");
14
ADM_info("The muxer prefers AnnexB H264 bitstream\n");
15
- if(extraLen)
16
+ if(!isAnnexB)
17
{
18
// Need to do mp4 to annexB
19
- ADM_info("Probably AnnexB bitstream\n");
20
+ ADM_info("Input is probably MP4 bitstream\n");
21
copy=new ADM_videoStreamCopyToAnnexB(markerA,markerB);
22
}
23
}else
24
{
25
- if(!extraLen)
26
+ ADM_info("The video stream is a flavor of H264\n");
27
+ ADM_info("The muxer prefers MP4 style H264 bitstream\n");
28
+ if(isAnnexB)
29
{
30
- ADM_info("Probably AnnexB bitstream\n");
31
+ ADM_info("Input is probably AnnexB bitstream\n");
32
copy=new ADM_videoStreamCopyFromAnnexB(markerA,markerB);
33
}
34
}
35
36
37
if(!copy)
38
{
39
+ ADM_info("Simple copy mode engaged\n");
40
copy=new ADM_videoStreamCopy(markerA,markerB);
41
}
42
video=copy;
43
avidemux_2.6.11.tar.gz/avidemux/common/main.cpp -> avidemux_2.6.12.tar.gz/avidemux/common/main.cpp
Changed
10
1
2
int startAvidemux(int argc, char *argv[])
3
{
4
printf("*************************\n");
5
- printf(" Avidemux v"ADM_VERSION);
6
+ printf(" Avidemux v%s", ADM_VERSION);
7
8
#if defined( ADM_SUBVERSION )
9
#define MKSTRING(x) x
10
avidemux_2.6.11.tar.gz/avidemux/gtk/ADM_userInterfaces/ADM_gui2/GUI_bindings.cpp -> avidemux_2.6.12.tar.gz/avidemux/gtk/ADM_userInterfaces/ADM_gui2/GUI_bindings.cpp
Changed
16
1
2
{
3
return;
4
}
5
+/**
6
+*/
7
+bool UI_setDisplayName(const char *name)
8
+{
9
+ return true;
10
+}
11
+bool UI_reset(void)
12
+{
13
+ return true;
14
+}
15
// EOF
16
avidemux_2.6.11.tar.gz/avidemux/gtk/ADM_userInterfaces/ADM_gui2/GUI_gtkRender.cpp -> avidemux_2.6.12.tar.gz/avidemux/gtk/ADM_userInterfaces/ADM_gui2/GUI_gtkRender.cpp
Changed
10
1
2
xinfo->display = 0;
3
xinfo->window = getMainNSWindow();
4
#else
5
- xinfo->window = GDK_WINDOW_XID(win);
6
+ xinfo->systemWindowId = GDK_WINDOW_XID(win);
7
xinfo->display = GDK_WINDOW_XDISPLAY(parentWin);
8
#endif
9
10
avidemux_2.6.11.tar.gz/avidemux/gtk/CMakeLists.txt -> avidemux_2.6.12.tar.gz/avidemux/gtk/CMakeLists.txt
Changed
11
1
2
ADD_SUBDIRECTORY(ADM_userInterfaces ./ADM_userInterfacesGtk)
3
4
SDLify(../common/main.cpp)
5
-ADD_SOURCE_CFLAGS(../common/main.cpp "-DADM_SUBVERSION=\"${ADM_SUBVERSION}\"")
6
+ADD_SOURCE_CFLAGS(../common/main.cpp "-DADM_SUBVERSION='\"${ADM_SUBVERSION}\"'")
7
+ADD_SOURCE_CFLAGS(../common/main.cpp "-DADM_VERSION='\"${AVIDEMUX_VERSION}\"'")
8
9
###########################################
10
# Version Info
11
avidemux_2.6.11.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobControl.cpp -> avidemux_2.6.12.tar.gz/avidemux/qt4/ADM_jobs/src/ADM_jobControl.cpp
Changed
39
1
2
ui.tableWidget->addAction(runNow);
3
ui.tableWidget->addAction(setOk);
4
ui.tableWidget->addAction(setReady);
5
- connect(del,SIGNAL(activated()),this, SLOT(del()));
6
- connect(runNow,SIGNAL(activated()),this, SLOT(runNow()));
7
- connect(setOk,SIGNAL(activated()),this, SLOT(setOk()));
8
- connect(setReady,SIGNAL(activated()),this,SLOT(setReady()));
9
+ connect(del,SIGNAL(triggered()),this, SLOT(del()));
10
+ connect(runNow,SIGNAL(triggered()),this, SLOT(runNow()));
11
+ connect(setOk,SIGNAL(triggered()),this, SLOT(setOk()));
12
+ connect(setReady,SIGNAL(triggered()),this,SLOT(setReady()));
13
14
connect(ui.pushButtonQuit,SIGNAL(pressed()),this,SLOT(quit()));
15
connect(ui.pushButtonRunAll,SIGNAL(pressed()),this,SLOT(runAllJob()));
16
17
18
void jobWindow::del(void)
19
{
20
+ ADM_info("Del\n");
21
runAction(JobAction_delete);
22
}
23
void jobWindow::setOk(void)
24
{
25
+ ADM_info("Ok\n");
26
runAction(JobAction_setOk);
27
}
28
void jobWindow::setReady(void)
29
{
30
+ ADM_info("setReady\n");
31
runAction(JobAction_setReady);
32
}
33
void jobWindow::runNow(void)
34
{
35
+ ADM_info("runNow\n");
36
runAction(JobAction_runNow);
37
}
38
39
avidemux_2.6.11.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp -> avidemux_2.6.12.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/Q_gui2.cpp
Changed
28
1
2
#include <QKeyEvent>
3
#include <QGraphicsView>
4
#include <QtCore/QDir>
5
+#include <QMessageBox>
6
#include "ADM_cpp.h"
7
#define MENU_DECLARE
8
#include "Q_gui2.h"
9
10
*/
11
static void FatalFunctionQt(const char *title, const char *info)
12
{
13
- GUI_Info_HIG(ADM_LOG_IMPORTANT, title, info);
14
+ printf("Crash Dump for %s\n",title);
15
+ printf("%s\n",info);
16
+ fflush(stdout);
17
+
18
+ QMessageBox msgBox;
19
+ msgBox.setText(title);
20
+ msgBox.setInformativeText(QT_TR_NOOP("The application has encountered a fatal problem\nThe current editing has been saved and will be reloaded at next start"));
21
+ msgBox.setDetailedText(info);
22
+ msgBox.setIcon(QMessageBox::Critical);
23
+ msgBox.exec();
24
+ abort();
25
}
26
27
/**
28
avidemux_2.6.11.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/file_qt4.cpp -> avidemux_2.6.12.tar.gz/avidemux/qt4/ADM_userInterfaces/ADM_gui/file_qt4.cpp
Changed
10
1
2
label, // caption
3
str, // folder
4
filterFile, // filter
5
- NULL); // selected filter
6
+ NULL,QFileDialog::DontConfirmOverwrite); // selected filter
7
8
9
if (fileName.isNull() ) return;
10
avidemux_2.6.11.tar.gz/avidemux/qt4/i18n/avidemux_es.ts -> avidemux_2.6.12.tar.gz/avidemux/qt4/i18n/avidemux_es.ts
Changed
201
1
2
</message>
3
<message>
4
<source>MPEG-2 requant</source>
5
- <translation type="obsolete">Cuantizador MPEG</translation>
6
+ <translation type="obsolete">recuantizar MPEG-2</translation>
7
</message>
8
<message>
9
<source>dummy</source>
10
- <translation type="obsolete">
11
- </translation>
12
+ <translation type="obsolete">vacio</translation>
13
</message>
14
<message>
15
<source>Copy</source>
16
17
</message>
18
<message>
19
<source>Dummy</source>
20
- <translation type="obsolete">
21
- </translation>
22
+ <translation type="obsolete">Vacio</translation>
23
</message>
24
<message>
25
<source>None</source>
26
27
<message>
28
<source>The beginning frame is not a key frame.
29
Please move the A marker.</source>
30
- <translation type="obsolete">La imagen inicial no es un Imagen-Clave
31
+ <translation type="obsolete">La imagen inicial no es una Imagen-Clave
32
Desplace el marcador A.</translation>
33
</message>
34
<message>
35
<source>_Use systray while encoding</source>
36
- <translation type="obsolete">Minimizar en el tray al codificar</translation>
37
+ <translation type="obsolete">_Minimizar al codificar</translation>
38
</message>
39
<message>
40
<source>_Accept non-standard audio frequency for DVD</source>
41
- <translation type="obsolete">Permitir frecuencia de sonido no estándar para DVD</translation>
42
+ <translation type="obsolete">_Permitir frecuencia de sonido no estándar para DVD</translation>
43
</message>
44
<message>
45
<source>Create _OpenDML files</source>
46
47
</message>
48
<message>
49
<source>Automatically _index MPEG files</source>
50
- <translation type="obsolete">Indexar automáticamente archivos MPEG</translation>
51
+ <translation type="obsolete">_Indexar automáticamente archivos MPEG</translation>
52
</message>
53
<message>
54
<source>Automatically _swap A and B if A>B</source>
55
- <translation type="obsolete">Indexar automáticamente archivos MPEG</translation>
56
+ <translation type="obsolete">Intercambiar _automaticamente A y B si A>B</translation>
57
</message>
58
<message>
59
<source>_Disable NUV audio sync</source>
60
- <translation type="obsolete">Desactivar sincronización de audio NUV</translation>
61
+ <translation type="obsolete">_Desactivar sincronización de audio NUV</translation>
62
</message>
63
<message>
64
<source>Automatically _build VBR map</source>
65
- <translation type="obsolete">Construir automáticamente mapa VBR</translation>
66
+ <translation type="obsolete">_Construir automáticamente mapa VBR</translation>
67
</message>
68
<message>
69
<source>Automatically _rebuild index</source>
70
- <translation type="obsolete">Reconstruir automáticamente el índice</translation>
71
+ <translation type="obsolete">_Reconstruir automáticamente el índice</translation>
72
</message>
73
<message>
74
<source>Automatically remove _packed bitstream</source>
75
- <translation type="obsolete">Eliminar automáticamente el empaquetado bitstream</translation>
76
+ <translation type="obsolete">Eliminar automáticamente el em_paquetado bitstream</translation>
77
</message>
78
<message>
79
<source>SIMD</source>
80
81
</message>
82
<message>
83
<source>_lavc threads:</source>
84
- <translation type="obsolete">Procesos Xvid:</translation>
85
+ <translation type="obsolete">Hilos _lavc:</translation>
86
</message>
87
<message>
88
<source>Multi-threading</source>
89
- <translation type="obsolete">Multi-tarea</translation>
90
+ <translation type="obsolete">Multi-hilo</translation>
91
</message>
92
<message>
93
<source>Above normal</source>
94
95
</message>
96
<message>
97
<source>_Encoding priority:</source>
98
- <translation type="obsolete">Prioridad de codificación:</translation>
99
+ <translation type="obsolete">_Prioridad de codificación:</translation>
100
</message>
101
<message>
102
<source>_Indexing/unpacking priority:</source>
103
- <translation type="obsolete">Prioridad de Indexado/descompresión:</translation>
104
+ <translation type="obsolete">Prioridad de _Indexado/descompresión:</translation>
105
</message>
106
<message>
107
<source>_Playback priority:</source>
108
- <translation type="obsolete">Prioridad de reproducción:</translation>
109
+ <translation type="obsolete">Prioridad de _reproducción:</translation>
110
</message>
111
<message>
112
<source>Prioritisation</source>
113
114
</message>
115
<message>
116
<source>_Use alternative tag for MP3 in .mp4</source>
117
- <translation type="obsolete">Usar un tag alternativo para MP3 en .mp4</translation>
118
+ <translation type="obsolete">_Usar tag alternativo para MP3 en .mp4</translation>
119
</message>
120
<message>
121
<source>XVideo (best)</source>
122
123
</message>
124
<message>
125
<source>Video _display:</source>
126
- <translation type="obsolete">Bitrate vídeo:</translation>
127
+ <translation type="obsolete">Mostrar _Video:</translation>
128
</message>
129
<message>
130
<source>No alerts</source>
131
132
</message>
133
<message>
134
<source>_Message level:</source>
135
- <translation type="obsolete">Nivel de mensaje:</translation>
136
+ <translation type="obsolete">Nivel de _mensaje:</translation>
137
</message>
138
<message>
139
<source>Master</source>
140
141
</message>
142
<message>
143
<source>_Volume control:</source>
144
- <translation type="obsolete">Control de volumen:</translation>
145
+ <translation type="obsolete">Control de _Volumen:</translation>
146
</message>
147
<message>
148
<source>No downmixing</source>
149
- <translation type="obsolete">Sin downmixing (multicanal)</translation>
150
+ <translation type="obsolete">Sin downmixing</translation>
151
</message>
152
<message>
153
<source>Pro Logic</source>
154
155
</message>
156
<message>
157
<source>_Local playback downmixing:</source>
158
- <translation type="obsolete">Downmixing de reproducción Local:</translation>
159
+ <translation type="obsolete">Downmixing de reproducción _Local:</translation>
160
</message>
161
<message>
162
<source>De_ringing</source>
163
164
</message>
165
<message>
166
<source>Timecode:</source>
167
- <translation type="obsolete">Marca de tiempo:</translation>
168
+ <translation type="obsolete">Marcador de tiempo:</translation>
169
</message>
170
<message>
171
<source>_Dynamic range compression</source>
172
173
</message>
174
<message>
175
<source>Marker A > B</source>
176
- <translation type="obsolete">Marcador A > B</translation>
177
+ <translation type="obsolete">Marcadordor A > B</translation>
178
</message>
179
<message>
180
<source>Cannot copy.</source>
181
182
</message>
183
<message>
184
<source>Smart Copy</source>
185
- <translation type="obsolete">
186
- </translation>
187
+ <translation type="obsolete">Copia Inteligente</translation>
188
</message>
189
<message>
190
<source>Trouble initializing audio device</source>
191
192
</message>
193
<message>
194
<source>Timecode:</source>
195
- <translation type="unfinished">Marca de tiempo:</translation>
196
+ <translation type="unfinished">Marcador de tiempo:</translation>
197
</message>
198
<message>
199
<source>0/0</source>
200
201
avidemux_2.6.11.tar.gz/avidemux/winInstaller/avidemux_crossQt5.nsi -> avidemux_2.6.12.tar.gz/avidemux/winInstaller/avidemux_crossQt5.nsi
Changed
14
1
2
SetOutPath $INSTDIR\plugins\muxers
3
${File} ${ROOT_FOLDER}/plugins/muxers/libADM_mx_raw.dll
4
${MementoSectionEnd}
5
+ ${MementoSection} "Raw Video" SecMuxWebm
6
+ SectionIn 1 2
7
+ SetOverwrite on
8
+ SetOutPath $INSTDIR\plugins\muxers
9
+ ${File} ${ROOT_FOLDER}/plugins/muxers/libADM_mx_Webm.dll
10
+ ${MementoSectionEnd}
11
SectionGroupEnd
12
SectionGroup "Script Engines" SecGrpScriptEngine
13
#${MementoSection} "QtScript" SecScriptQt
14
avidemux_2.6.11.tar.gz/avidemux_core/ADM_core/include/ADM_crashdump_mingw.h -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_core/include/ADM_crashdump_mingw.h
Changed
27
1
2
-#if defined(__MINGW32__) && !defined ADM_CRASHDUMP_MINGW_H
3
-#define ADM_CRASHDUMP_MINGW_H
4
+/**
5
+ * \file ADM_crashdump_mingw
6
+ * \brief Catch low level error, mingw version
7
+ */
8
+#if defined(__MINGW32__)
9
10
-#include <windows.h>
11
-#include <excpt.h>
12
-
13
-#if defined(_WIN64)
14
-ADM_CORE6_EXPORT LONG WINAPI ExceptionFilter(struct _EXCEPTION_POINTERS *exceptionInfo);
15
-#define installSigHandler() SetUnhandledExceptionFilter(ExceptionFilter)
16
-#define uninstallSigHandler()
17
-#else
18
-ADM_CORE6_EXPORT EXCEPTION_DISPOSITION ExceptionHandler(struct _EXCEPTION_RECORD *exceptionRecord, void *establisherFrame, struct _CONTEXT *contextRecord, void *dispatcherContext);
19
-#define installSigHandler() __try1(ExceptionHandler)
20
-#define uninstallSigHandler() __except1
21
-#endif
22
+#pragma once
23
+ADM_CORE6_EXPORT void installSigHandler(void);
24
+ADM_CORE6_EXPORT void uninstallSigHandler(void);
25
26
#endif
27
avidemux_2.6.11.tar.gz/avidemux_core/ADM_core/src/ADM_crashdump_mingw.cpp -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_core/src/ADM_crashdump_mingw.cpp
Changed
123
1
2
* (at your option) any later version. *
3
* *
4
***************************************************************************/
5
+#include <windows.h>
6
+#include <excpt.h>
7
8
#include "ADM_crashdump.h"
9
#include <stdio.h>
10
11
#include <imagehlp.h>
12
#include <cxxabi.h>
13
14
+
15
+static LONG WINAPI ExceptionFilter(struct _EXCEPTION_POINTERS *exceptionInfo);
16
static ADM_saveFunction *mysaveFunction = NULL;
17
static ADM_fatalFunction *myFatalFunction = NULL;
18
+
19
+
20
+/**
21
+ * \fn installSigHandler
22
+ * \brief add hook to catch exception (null pointers etc...)
23
+ */
24
+void installSigHandler(void)
25
+{
26
+ SetUnhandledExceptionFilter(ExceptionFilter);
27
+}
28
+/**
29
+ * \fn uninstallSigHandler
30
+ * \brief
31
+ */
32
+void uninstallSigHandler(void)
33
+{
34
+
35
+}
36
+
37
+
38
/**
39
*
40
* @param save
41
42
RtlCaptureContext_* contextFunc = (RtlCaptureContext_*)GetProcAddress(hinstLib, "RtlCaptureContext");
43
STACKFRAME frame;
44
CONTEXT context;
45
- int limit = 50;
46
+ int limit = 70;
47
DWORD machineType;
48
49
memset(&frame, 0, sizeof(STACKFRAME));
50
51
* @param exceptionRecord
52
* @param contextRecord
53
*/
54
-void HandleException(struct _EXCEPTION_RECORD *exceptionRecord, struct _CONTEXT *contextRecord)
55
+void HandleException(const char *message,struct _EXCEPTION_RECORD *exceptionRecord, struct _CONTEXT *contextRecord)
56
{
57
std::string s;
58
fflush(stderr);
59
60
{
61
s+=DumpExceptionInfo(process, exceptionRecord, contextRecord);
62
}
63
+ fflush(stderr);
64
+ fflush(stdout);
65
66
s+=DumpBackTrace(process);
67
+ fflush(stderr);
68
+ fflush(stdout);
69
+
70
+ const char *title;
71
+ if(!message) title="Crash";
72
+ else title=message;
73
if (myFatalFunction)
74
- myFatalFunction("Crash", s.c_str());
75
+ myFatalFunction(title, s.c_str());
76
SymCleanup(process);
77
-
78
+ fflush(stderr);
79
+ fflush(stdout);
80
exit(1);
81
}
82
/**
83
84
*/
85
EXCEPTION_DISPOSITION ExceptionHandler(struct _EXCEPTION_RECORD *exceptionRecord, void *establisherFrame, struct _CONTEXT *contextRecord, void *dispatcherContext)
86
{
87
- HandleException(exceptionRecord, contextRecord);
88
+ HandleException("ExceptionHandler",exceptionRecord, contextRecord);
89
}
90
/**
91
*
92
93
*/
94
LONG WINAPI ExceptionFilter(struct _EXCEPTION_POINTERS *exceptionInfo)
95
{
96
- HandleException(exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord);
97
+ HandleException("ExceptionFilter",exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord);
98
+ return EXCEPTION_CONTINUE_SEARCH;
99
+}
100
+/**
101
+ *
102
+ * @param pExceptionInfo
103
+ * @return
104
+ */
105
+LONG WINAPI TopLevelExceptionHandler(struct _EXCEPTION_POINTERS *exceptionInfo)
106
+{
107
+ HandleException("TopLevelExceptionHandler",exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord);
108
+ return EXCEPTION_CONTINUE_SEARCH;
109
}
110
+
111
/**
112
*
113
* @param info
114
115
*/
116
void ADM_backTrack(const char *info, int lineno, const char *file)
117
{
118
- HandleException(NULL, NULL);
119
+ char title[2048]={0};
120
+ snprintf(title,2000,"%s at line %d, file %s",info,lineno,file);
121
+ HandleException(title,NULL, NULL);
122
}
123
avidemux_2.6.11.tar.gz/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
Changed
74
1
2
{
3
if(mysaveFunction)
4
mysaveFunction();
5
-
6
-#if !defined(__HAIKU__)
7
- char wholeStuff[2048];
8
-#if !defined(__sun__)
9
+#define MAX_BACKTRACK 30
10
+#if !defined(__HAIKU__) && !defined(__sun__)
11
+ char wholeStuff[2048];
12
char buffer[4096];
13
char in[2048];
14
- void *stack[20];
15
+ void *stack[MAX_BACKTRACK+1];
16
char **functions;
17
int count, i;
18
-#endif
19
wholeStuff[0]=0;
20
21
printf("\n*********** BACKTRACK **************\n");
22
23
-#if !defined(__sun__)
24
- count = backtrace(stack, 20);
25
+ count = backtrace(stack, MAX_BACKTRACK);
26
functions = backtrace_symbols(stack, count);
27
-#endif
28
sprintf(wholeStuff,"%s\n at line %d, file %s",info,lineno,file);
29
-#if !defined(__sun__)
30
- int status;
31
- size_t size=2047;
32
+ int status;
33
+ size_t size=2047;
34
// it looks like that xxxx (functionName+0x***) XXXX
35
for (i=0; i < count; i++)
36
{
37
- char *s=strstr(functions[i],"(");
38
- buffer[0]=0;
39
- if(s && strstr(s+1,"+"))
40
- {
41
- strcpy(in,s+1);
42
- char *e=strstr(in,"+");
43
- *e=0;
44
- __cxxabiv1::__cxa_demangle(in,buffer,&size,&status);
45
- if(status) strcpy(buffer,in);
46
- }else
47
- strcpy(buffer,functions[i]);
48
- printf("%s:%d:<%s>:%d\n",functions[i],i,buffer,status);
49
- strcat(wholeStuff,buffer);
50
- strcat(wholeStuff,"\n");
51
- }
52
-#else
53
- backtrace(fileno(stdout));
54
-#endif
55
+ char *s=strstr(functions[i],"(");
56
+ buffer[0]=0;
57
+ if(s && strstr(s+1,"+"))
58
+ {
59
+ strcpy(in,s+1);
60
+ char *e=strstr(in,"+");
61
+ *e=0;
62
+ __cxxabiv1::__cxa_demangle(in,buffer,&size,&status);
63
+ if(status)
64
+ strcpy(buffer,in);
65
+ }else
66
+ strcpy(buffer,functions[i]);
67
+ printf("%s:%d:<%s>:%d\n",functions[i],i,buffer,status);
68
+ strcat(wholeStuff,buffer);
69
+ strcat(wholeStuff,"\n");
70
+ }
71
printf("*********** BACKTRACK **************\n");
72
73
if(myFatalFunction)
74
avidemux_2.6.11.tar.gz/avidemux_core/ADM_core/src/CMakeLists.txt -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_core/src/CMakeLists.txt
Changed
12
1
2
ENDIF (WIN32)
3
4
if (HAVE_EXECINFO)
5
- include_directories("${LIBEXECINFO_INCLUDE_DIR}")
6
- target_link_libraries(ADM_core6 "${LIBEXECINFO_LIBRARY_DIR}")
7
+ include_directories("${EXECINFO_INCLUDE_DIR}")
8
+ target_link_libraries(ADM_core6 "${EXECINFO_LIBRARY_DIR}")
9
endif (HAVE_EXECINFO)
10
11
if (ADM_DEBUG AND FIND_LEAKS)
12
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreSocket/include/ADM_coreSocket.h -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreSocket/include/ADM_coreSocket.h
Changed
12
1
2
#ifndef ADM_CORE_SOCKET_H
3
#define ADM_CORE_SOCKET_H
4
5
+#ifdef _WIN32
6
+#include "winsock2.h"
7
+#endif
8
+
9
#include "ADM_coreSocket6_export.h"
10
#include "ADM_threads.h"
11
12
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/include/ADM_coreVdpau.h -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/include/ADM_coreVdpau.h
Changed
25
1
2
static VdpStatus mixerCreate(uint32_t width,uint32_t height, VdpVideoMixer *mixer,bool deinterlace=false);
3
static VdpStatus mixerDestroy(VdpVideoMixer mixer);
4
static VdpStatus mixerRender(VdpVideoMixer mixer,VdpVideoSurface sourceSurface,VdpOutputSurface targetOutputSurface, uint32_t targetWidth, uint32_t targetHeight );
5
+ static VdpStatus mixerRenderWithCropping(VdpVideoMixer mixer,VdpVideoSurface sourceSurface,VdpOutputSurface targetOutputSurface, uint32_t targetWidth, uint32_t targetHeight ,
6
+ uint32_t sourceWidth, uint32_t sourceHeight);
7
static VdpStatus mixerRenderWithPastAndFuture(bool topField,VdpVideoMixer mixer,
8
VdpVideoSurface sourceSurface[3], // Past present future
9
- VdpOutputSurface targetOutputSurface,
10
- uint32_t targetWidth, uint32_t targetHeight );
11
+ VdpOutputSurface targetOutputSurface, uint32_t targetWidth, uint32_t targetHeight,uint32_t sourceWidth, uint32_t sourceHeight );
12
static VdpStatus mixerGetAttributesValue(VdpVideoMixer mixer,
13
uint32_t attrCount,
14
const VdpVideoMixerAttribute *xkeys,
15
16
{
17
return (x+15) & ~15;
18
}
19
+ static VdpStatus outputSurfaceGetParameters( VdpOutputSurface surface, VdpRGBAFormat * rgba_format,
20
+ uint32_t * width, uint32_t * height);
21
+ static VdpStatus surfaceGetParameters(VdpVideoSurface surface,VdpChromaType *chomra,uint32_t *w,uint32_t *h);
22
23
#endif
24
};
25
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/include/ADM_coreVdpauInternal.h -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/include/ADM_coreVdpauInternal.h
Changed
11
1
2
VdpVideoMixerGetAttributeValues *mixerGetAttributesValue;
3
VdpVideoMixerSetAttributeValues *mixerSetAttributesValue;
4
5
+ VdpOutputSurfaceGetParameters *mixerGetOutputSurfaceParameters;
6
+ VdpVideoSurfaceGetParameters *mixerGetSurfaceParameters;
7
+
8
VdpPresentationQueueTargetCreateX11 *presentationQueueDisplayX11Create;
9
}VdpFunctions;
10
11
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/src/ADM_coreVdpau.cpp -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/src/ADM_coreVdpau.cpp
Changed
45
1
2
GetMe(putBitsYV12OutputSurface,VDP_FUNC_ID_OUTPUT_SURFACE_PUT_BITS_Y_CB_CR);
3
GetMe(putBitsCapsOutputSurface,VDP_FUNC_ID_OUTPUT_SURFACE_QUERY_PUT_BITS_Y_CB_CR_CAPABILITIES);
4
GetMe(getBitsNativeOutputSurface,VDP_FUNC_ID_OUTPUT_SURFACE_GET_BITS_NATIVE);
5
+
6
+
7
8
GetMe(presentationQueueDestroy,VDP_FUNC_ID_PRESENTATION_QUEUE_DESTROY);
9
GetMe(presentationQueueCreate,VDP_FUNC_ID_PRESENTATION_QUEUE_CREATE);
10
11
12
GetMe(mixerGetAttributesValue,VDP_FUNC_ID_VIDEO_MIXER_GET_ATTRIBUTE_VALUES);
13
GetMe(mixerSetAttributesValue,VDP_FUNC_ID_VIDEO_MIXER_SET_ATTRIBUTE_VALUES);
14
-
15
+ GetMe(mixerGetOutputSurfaceParameters,VDP_FUNC_ID_OUTPUT_SURFACE_GET_PARAMETERS); ///
16
+ GetMe(mixerGetSurfaceParameters,VDP_FUNC_ID_VIDEO_SURFACE_GET_PARAMETERS); ///
17
if(VDP_STATUS_OK!=ADM_coreVdpau::funcs.presentationQueueDisplayX11Create(ADM_coreVdpau::vdpDevice,x->systemWindowId,&queueX11))
18
{
19
ADM_warning("Cannot create X11 Presentation Queue\n");
20
21
( void * const *)ptr,
22
pitches));
23
}
24
+
25
+
26
+/**
27
+ \fn
28
+ \brief
29
+*/
30
+VdpStatus admVdpau::outputSurfaceGetParameters( VdpOutputSurface surface, VdpRGBAFormat * rgba_format,
31
+ uint32_t * width, uint32_t * height)
32
+{
33
+ CHECK(ADM_coreVdpau::funcs.mixerGetOutputSurfaceParameters(surface,rgba_format,width,height));
34
+}
35
+/**
36
+ */
37
+VdpStatus admVdpau::surfaceGetParameters(VdpVideoSurface surface,VdpChromaType *chroma,uint32_t *w,uint32_t *h)
38
+{
39
+ CHECK(ADM_coreVdpau::funcs.mixerGetSurfaceParameters(surface,chroma,w,h));
40
+}
41
+
42
/**
43
\fn
44
\brief
45
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/src/ADM_coreVdpauMixer.cpp -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/ADM_hwAccel/ADM_coreVdpau/src/ADM_coreVdpauMixer.cpp
Changed
143
1
2
#include "ADM_default.h"
3
#include "../include/ADM_coreVdpau.h"
4
5
-#ifdef USE_VDPAU
6
+#if defined(USE_VDPAU)
7
#include "../include/ADM_coreVdpauInternal.h"
8
#include "ADM_dynamicLoading.h"
9
10
-#if 1
11
+#if 0
12
#define aprintf ADM_info
13
#else
14
#define aprintf(...) {}
15
16
uint32_t color=VDP_CHROMA_TYPE_420;
17
void *values[MIXER_NB_PARAM]={&width,&height,&color};
18
int nbFeature=0;
19
+ ADM_info("Creating vdpauMixer with width=%d, height=%d color=%d\n",width,height,color);
20
//features[nbFeature++]=VDP_VIDEO_MIXER_FEATURE_HIGH_QUALITY_SCALING_L5;
21
if(deinterlace)
22
{
23
24
NULL, // dest video Rec
25
0,NULL); // Layers
26
27
+#if 0
28
+ ADM_info("Target width=%d height=%d\n", targetWidth,targetHeight);
29
+ VdpRGBAFormat fmt;
30
+ VdpChromaType chroma;
31
+ uint32_t tw,th;
32
+
33
+ if(VDP_STATUS_OK!=ADM_coreVdpau::funcs.mixerGetOutputSurfaceParameters(targetOutputSurface,&fmt,&tw,&th))
34
+ {
35
+ ADM_warning("VdpOutputSurfaceGetParameters failed\n");
36
+ }
37
+ ADM_info("output surface width=%d height=%d fmt=%d\n", tw,th,fmt);
38
+ if(VDP_STATUS_OK!=ADM_coreVdpau::funcs.mixerGetSurfaceParameters(sourceSurface,&chroma,&tw,&th))
39
+ {
40
+ ADM_warning("mixerGetSurfaceParameters failed\n");
41
+ }
42
+ ADM_info("input surface width=%d height=%d fmt=%d\n", tw,th,chroma);
43
+#endif
44
+ if(VDP_STATUS_OK!=e)
45
+ {
46
+
47
+ ADM_warning("MixerRender failed :%s\n",getErrorString(e));
48
+
49
+ }
50
+ return e;
51
+}
52
+/**
53
+ * \fn mixerRenderWithCropping
54
+ * \brief Same as above but allow to take only top/left of the input image
55
+ * @param mixer
56
+ * @param sourceSurface
57
+ * @param targetOutputSurface
58
+ * @param targetWidth
59
+ * @param targetHeight
60
+ * @param sourceWidth
61
+ * @param sourceHeight
62
+ * @return
63
+ */
64
+VdpStatus admVdpau::mixerRenderWithCropping(VdpVideoMixer mixer,
65
+ VdpVideoSurface sourceSurface,
66
+ VdpOutputSurface targetOutputSurface,
67
+ uint32_t targetWidth,
68
+ uint32_t targetHeight,uint32_t sourceWidth, uint32_t sourceHeight )
69
+{
70
+const VdpVideoSurface listOfInvalidSurface[1]={VDP_INVALID_HANDLE};
71
+
72
+ VdpRect rect;
73
+ rect.x0=rect.y0=0;
74
+ rect.x1=sourceWidth;
75
+ rect.y1=sourceHeight;
76
+#if 0
77
+ VdpChromaType sourceChroma;
78
+ uint32_t sourceW,sourceH;
79
+ ADM_coreVdpau::funcs.mixerGetSurfaceParameters(sourceSurface,&sourceChroma,&sourceW,&sourceH);
80
+ ADM_info("Source is %d %d x %d\n",sourceChroma,sourceW,sourceH);
81
+ VdpRGBAFormat rgb;
82
+ ADM_coreVdpau::funcs.mixerGetOutputSurfaceParameters(targetOutputSurface,&rgb,&sourceW,&sourceH);
83
+ ADM_info("Target is %d %d x %d\n",rgb,sourceW,sourceH);
84
+ ADM_info("Cropped to %d x %d ==> %d x %d\n",sourceWidth,sourceHeight,targetWidth,targetHeight);
85
+ ADM_info("Rect %d %d %d %d\n",rect.x0,rect.y0,rect.x1,rect.y1);
86
+#endif
87
+ VdpStatus e=ADM_coreVdpau::funcs.mixerRender(mixer,
88
+ VDP_INVALID_HANDLE,NULL, // Background
89
+ VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME,
90
+
91
+ 0, listOfInvalidSurface, // Past...
92
+ sourceSurface, // current
93
+ 0, listOfInvalidSurface, // Future
94
+ &rect, // source RECT
95
+ targetOutputSurface,
96
+ NULL, // dest Rec
97
+ NULL, // dest video Rec
98
+ 0,NULL); // Layers
99
+
100
101
if(VDP_STATUS_OK!=e)
102
{
103
104
}
105
return e;
106
}
107
+
108
/**
109
\fn mixerGetAttributesValue
110
*/
111
112
VdpVideoSurface sourceSurface[3], // Past present future
113
VdpOutputSurface targetOutputSurface,
114
uint32_t targetWidth,
115
- uint32_t targetHeight )
116
+ uint32_t targetHeight,
117
+ uint32_t sourceWidth,
118
+ uint32_t sourceHeight )
119
{
120
int nbPrev=2,nbNext=2;
121
VdpVideoMixerPictureStructure fieldType=VDP_VIDEO_MIXER_PICTURE_STRUCTURE_TOP_FIELD;
122
123
VdpVideoSurface future[2]={VDP_INVALID_HANDLE,VDP_INVALID_HANDLE};
124
VdpVideoSurface present;
125
126
+ VdpRect rect;
127
+ rect.x0=rect.y0=0;
128
+ rect.x1=sourceWidth;
129
+ rect.y1=sourceHeight;
130
+
131
present=sourceSurface[1];
132
int index=0;
133
if(!topField) index=1;
134
135
nbPrev, past, // Past...
136
present, // current
137
nbNext, future, // Future
138
- NULL, // source RECT
139
+ &rect, // source RECT
140
targetOutputSurface,
141
NULL, // dest Rec
142
NULL, // dest video Rec
143
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/include/ADM_ffmp43.h
Changed
13
1
2
#pragma once
3
4
#include "ADM_coreVideoCodec6_export.h"
5
+typedef void (AV_FATAL_HANDLER)(const char *why,int fileno,const char *filewhereitcrashed);
6
7
extern "C" {
8
#include "libavcodec/avcodec.h"
9
+extern void av_setFatalHandler(AV_FATAL_HANDLER *func);
10
}
11
12
#include "ADM_codec.h"
13
avidemux_2.6.11.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffmp43.cpp -> avidemux_2.6.12.tar.gz/avidemux_core/ADM_coreVideoCodec/src/ADM_ffmp43.cpp
Changed
27
1
2
{
3
void adm_lavLogCallback(void *instance, int level, const char* fmt, va_list list);
4
}
5
+
6
+
7
+extern "C"
8
+{
9
+static void ffFatalError(const char *what,int lineno, const char *filez)
10
+{
11
+ ADM_backTrack(what,lineno,filez);
12
+}
13
+
14
+}
15
/**
16
\fn ADM_lavInit
17
\brief Init both lavcodec and lavformat
18
19
{
20
avcodec_register_all();
21
av_log_set_callback(adm_lavLogCallback);
22
-
23
+ av_setFatalHandler(ffFatalError);
24
#ifdef ADM_DEBUG
25
av_log_set_level(AV_LOG_DEBUG);
26
#endif
27
avidemux_2.6.12.tar.gz/avidemux_core/ffmpeg_package/ffmpeg-2.7.6.tar.bz2
Added
avidemux_2.6.12.tar.gz/avidemux_core/ffmpeg_package/patches/libavutil_avassert_h.patch
Added
24
1
2
+--- libavutil/avassert.h.old 2016-01-31 00:43:51.000000000 +0100
3
++++ libavutil/avassert.h 2016-02-16 21:21:02.768117422 +0100
4
+@@ -30,14 +30,17 @@
5
+ #include <stdlib.h>
6
+ #include "avutil.h"
7
+ #include "log.h"
8
++extern void av_fatalHandler(const char *why,const char *file, int lineno);
9
++typedef void (AV_FATAL_HANDLER)(const char *why,int lineno, const char *file);
10
++
11
++extern void av_setFatalHandler(AV_FATAL_HANDLER *func);
12
+
13
+ /**
14
+ * assert() equivalent, that is always enabled.
15
+ */
16
+ #define av_assert0(cond) do { \
17
+ if (!(cond)) { \
18
+- av_log(NULL, AV_LOG_PANIC, "Assertion %s failed at %s:%d\n", \
19
+- AV_STRINGIFY(cond), __FILE__, __LINE__); \
20
++ av_fatalHandler( AV_STRINGIFY(cond),__FILE__,__LINE__); \
21
+ abort(); \
22
+ } \
23
+ } while (0)
24
avidemux_2.6.12.tar.gz/avidemux_core/ffmpeg_package/patches/libavutil_log_c.patch
Added
43
1
2
+--- libavutil/log.c.old 2016-01-31 00:43:51.000000000 +0100
3
++++ libavutil/log.c 2016-02-16 21:24:19.943656163 +0100
4
+@@ -39,6 +39,7 @@
5
+ #include "common.h"
6
+ #include "internal.h"
7
+ #include "log.h"
8
++#include "avassert.h" // MEANX
9
+
10
+ #if HAVE_PTHREADS
11
+ #include <pthread.h>
12
+@@ -121,7 +122,7 @@
13
+
14
+ #endif
15
+ static int use_color = -1;
16
+-
17
++static AV_FATAL_HANDLER *fatalHandler=NULL; // MEANX
18
+ static void check_color_terminal(void)
19
+ {
20
+ #if defined(_WIN32) && !defined(__MINGW32CE__) && HAVE_SETCONSOLETEXTATTRIBUTE
21
+@@ -430,7 +431,21 @@
22
+ missing_feature_sample(0, avc, msg, argument_list);
23
+ va_end(argument_list);
24
+ }
25
++// MEANX
26
+
27
++void av_fatalHandler(const char *why,const char *filez, int lineno)
28
++{
29
++char *cleartext[2048];
30
++ if(!fatalHandler)
31
++ printf("[CRASH] %s, file %s, lineno=%d\n",cleartext,filez,lineno);
32
++ else
33
++ (fatalHandler)(cleartext,lineno,filez);
34
++}
35
++void av_setFatalHandler(AV_FATAL_HANDLER *func)
36
++{
37
++ fatalHandler=func;
38
++}
39
++//
40
+ #ifdef TEST
41
+ // LCOV_EXCL_START
42
+ #include <string.h>
43
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_audioDecoders/ADM_ad_opus/ADM_opus.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_audioDecoders/ADM_ad_opus/ADM_opus.cpp
Changed
10
1
2
3
4
int err=opus_decode_float(opus_handle,inptr,nbIn,outptr,5760,false); //??
5
- ADM_info("Incoming = %d bytes, out samples=%d\n",nbIn,err);
6
+ //ADM_info("Incoming = %d bytes, out samples=%d\n",nbIn,err);
7
if(err>0)
8
{
9
*nbOut=err*wavHeader.channels;
10
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_ebml.h -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_ebml.h
Changed
51
1
2
uint32_t readu32(void);
3
int32_t reads32(void);
4
/***********************************/
5
- virtual uint8_t readBin(uint8_t *whereto,uint32_t len)=0;
6
- virtual uint8_t skip(uint32_t nbBytes)=0;
7
+ virtual bool readBin(uint8_t *whereto,uint32_t len)=0;
8
+ virtual bool skip(uint32_t nbBytes)=0;
9
virtual uint64_t tell(void)=0;
10
};
11
-
12
+/**
13
+ */
14
class ADM_ebml_file : public ADM_ebml
15
{
16
protected:
17
18
uint64_t _size;
19
uint32_t _close;
20
public:
21
- ADM_ebml_file();
22
- ADM_ebml_file(ADM_ebml_file *father,uint64_t size);
23
- ~ADM_ebml_file();
24
- uint8_t open(const char *fn);
25
+ ADM_ebml_file();
26
+ ADM_ebml_file(ADM_ebml_file *father,uint64_t size);
27
+ ~ADM_ebml_file();
28
+ bool open(const char *fn);
29
30
- virtual uint8_t readBin(uint8_t *whereto,uint32_t len);
31
- virtual uint8_t skip(uint32_t nbBytes);
32
+ virtual bool readBin(uint8_t *whereto,uint32_t len);
33
+ virtual bool skip(uint32_t nbBytes);
34
uint64_t tell(void);
35
- uint8_t seek(uint64_t pos);
36
- uint8_t finished(void);
37
+ bool seek(uint64_t pos);
38
+ bool finished(void);
39
uint64_t getFileSize(void) {return _size;};
40
- uint8_t find(ADM_MKV_SEARCHTYPE search,
41
- MKV_ELEM_ID prim,MKV_ELEM_ID second,uint64_t *len,uint32_t rewind=1);
42
- uint8_t simplefind(MKV_ELEM_ID prim,uint64_t *len,uint32_t rewind=1);
43
- uint64_t remaining(void);
44
+ bool find(ADM_MKV_SEARCHTYPE search,
45
+ MKV_ELEM_ID prim,MKV_ELEM_ID second,uint64_t *len,bool rewind=1);
46
+ bool simplefind(MKV_ELEM_ID prim,uint64_t *len,bool rewind=true);
47
+ uint64_t remaining(void);
48
};
49
50
void bigHexPrint(uint64_t v);
51
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv.cpp
Changed
201
1
2
_timeBase=timeBase/1000; // We work in us
3
}
4
}
5
- /* Now find tracks */
6
- if(!ebml.find(ADM_MKV_SECONDARY,MKV_SEGMENT,MKV_TRACKS,&alen))
7
+ /* --*/
8
+ if(!ebml.simplefind(MKV_SEGMENT,&len,true))
9
{
10
- printf("[MKV] Cannot find tracks\n");
11
- return 0;
12
+ printf("[MKV] Cannot find Segment\n");
13
+ return false;
14
+ }
15
+ _segmentPosition=ebml.tell();
16
+ printf("[MKV] found Segment at 0x%llx\n",(uint64_t)_segmentPosition);
17
+ /* Now find tracks */
18
+ if(ebml.find(ADM_MKV_SECONDARY,MKV_SEGMENT,MKV_SEEK_HEAD,&alen))
19
+ {
20
+ ADM_ebml_file seekHead( &ebml,alen);
21
+ readSeekHead(&seekHead);
22
}
23
+ /* Now find tracks */
24
/* And analyze them */
25
- if(!analyzeTracks(&ebml,alen))
26
+ if(!analyzeTracks(&ebml))
27
{
28
printf("[MKV] incorrect tracks\n");
29
}
30
31
printf("[MKV] No video\n");
32
return 0;
33
}
34
+ readCue(&ebml);
35
printf("[MKV] Indexing clusters\n");
36
if(!indexClusters(&ebml))
37
{
38
printf("[MKV] Cluster indexing failed\n");
39
return 0;
40
- }
41
- readCue(&ebml);
42
+ }
43
printf("[MKV]Found %u clusters\n",_clusters.size());
44
printf("[MKV] Indexing video\n");
45
if(!videoIndexer(&ebml))
46
47
return 1;
48
49
}
50
+
51
+/**
52
+ * \fn goBeforeAtomAtPosition
53
+ * \brief check and position the read at the payload for atom searchedId, return payloadSize in outputLen
54
+ */
55
+bool mkvHeader::goBeforeAtomAtPosition(ADM_ebml_file *parser, uint64_t position,uint64_t &outputLen, MKV_ELEM_ID searchedId,const char *txt)
56
+{
57
+ uint64_t id,len;
58
+ ADM_MKV_TYPE type;
59
+ const char *ss;
60
+
61
+ if(!position)
62
+ {
63
+ ADM_warning("No offset available for %s\n",txt);
64
+ return false;
65
+ }
66
+ parser->seek(position);
67
+ if(!parser->readElemId(&id,&len))
68
+ {
69
+ ADM_warning("No element available for %s\n",txt);
70
+ return false;
71
+ }
72
+ if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
73
+ {
74
+ printf("[MKV/SeekHead] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
75
+ return false;
76
+ }
77
+ if(id!=searchedId)
78
+ {
79
+ printf("Found %s instead of %s, ignored \n",ss,txt);
80
+ return false;
81
+ }
82
+ outputLen=len;
83
+ return true;
84
+}
85
+
86
/**
87
\fn analyzeTracks
88
\brief Read Tracks Info.
89
*/
90
-uint8_t mkvHeader::analyzeTracks(void *head,uint32_t headlen)
91
+bool mkvHeader::analyzeTracks(ADM_ebml_file *parser)
92
{
93
- uint64_t id,len;
94
- ADM_MKV_TYPE type;
95
+ uint64_t len;
96
+ uint64_t id;
97
const char *ss;
98
- ADM_ebml_file father( (ADM_ebml_file *)head,headlen);
99
- while(!father.finished())
100
- {
101
+ ADM_MKV_TYPE type;
102
+
103
+ if(!goBeforeAtomAtPosition(parser, _trackPosition,len, MKV_TRACKS,"MKV_TRACKS"))
104
+ {
105
+ ADM_warning("Cannot go to the TRACKS atom\n");
106
+ return false;
107
+ }
108
+
109
+ ADM_ebml_file father( parser,len);
110
+ while(!father.finished())
111
+ {
112
father.readElemId(&id,&len);
113
if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
114
{
115
116
continue;
117
}
118
if(!analyzeOneTrack(&father,len)) return 0;
119
- }
120
+ }
121
return 1;
122
}
123
124
125
_audioStreams=NULL;
126
127
readBuffer=NULL;
128
+ _cuePosition=0;
129
+ _segmentPosition=0;
130
+ _trackPosition=0;
131
}
132
/**
133
\fn ~mkvHeader
134
135
return true;
136
137
}
138
-
139
-
140
+/**
141
+ * \fn readSeekHead
142
+ * \bried used to locate the interesting parts of the file
143
+ */
144
+bool mkvHeader::readSeekHead(ADM_ebml_file *body)
145
+{
146
+ uint64_t vlen,len;
147
+ ADM_info("Parsing SeekHead\n");
148
+ while(!body->finished())
149
+ {
150
+ if(!body->simplefind(MKV_SEEK,&vlen,false))
151
+ break;
152
+ ADM_ebml_file item(body,vlen);
153
+ uint64_t id;
154
+ ADM_MKV_TYPE type;
155
+ const char *ss;
156
+
157
+ item.readElemId(&id,&len);
158
+ if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
159
+ {
160
+ printf("[MKV/SeekHead] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
161
+ return false;
162
+ }
163
+ if(id!=MKV_ID)
164
+ {
165
+ printf("Found %s in CUES, ignored \n",ss);
166
+ item.skip(len);
167
+ return false;
168
+ }
169
+ // read id
170
+ uint64_t t=item.readEBMCode_Full();
171
+ if(!ADM_searchMkvTag( (MKV_ELEM_ID)t,&ss,&type))
172
+ {
173
+ printf("[MKV/SeekHead] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
174
+ return false;
175
+ }
176
+ ADM_info("Found entry for %s\n",ss);
177
+ item.readElemId(&id,&len);
178
+ if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
179
+ {
180
+ printf("[MKV/SeekHead] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
181
+ return false;
182
+ }
183
+ if(id!=MKV_SEEK_POSITION)
184
+ {
185
+ printf("Found %s in CUES, ignored \n",ss);
186
+ item.skip(len);
187
+ return false;
188
+ }
189
+ uint64_t position=item.readUnsignedInt(len);
190
+ switch(t)
191
+ {
192
+ case MKV_CUES:
193
+ _cuePosition=position+_segmentPosition;
194
+ ADM_info(" at position 0x%llx\n",_cuePosition);
195
+ break;
196
+ case MKV_TRACKS:
197
+ _trackPosition=position+_segmentPosition;;
198
+ ADM_info(" at position at 0x%llx\n",_trackPosition);
199
+ case MKV_INFO:
200
+ default:
201
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv.h -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkv.h
Changed
39
1
2
uint32_t _nbAudioTrack;
3
uint32_t _currentAudioTrack;
4
uint32_t _reordered;
5
+ //
6
+ uint64_t _segmentPosition;
7
+ uint64_t _cuePosition;
8
+ uint64_t _trackPosition;
9
10
uint8_t checkHeader(void *head,uint32_t headlen);
11
- uint8_t analyzeTracks(void *head,uint32_t headlen);
12
+ bool analyzeTracks(ADM_ebml_file *parser);
13
uint8_t analyzeOneTrack(void *head,uint32_t headlen);
14
uint8_t walk(void *seed);
15
uint64_t walkAndFind(void *seed,MKV_ELEM_ID searched);
16
int searchTrackFromTid(uint32_t tid);
17
+ bool readSeekHead(ADM_ebml_file *body);
18
//
19
uint8_t reformatVorbisHeader(mkvTrak *trk);
20
// Indexers
21
22
uint8_t addIndexEntry(uint32_t track,ADM_ebml_file *parser,uint64_t where, uint32_t size,uint32_t flags,
23
uint32_t timecodeMS);
24
uint8_t videoIndexer(ADM_ebml_file *parser);
25
- uint8_t readCue(ADM_ebml_file *parser);
26
+ bool readCue(ADM_ebml_file *parser);
27
uint8_t indexClusters(ADM_ebml_file *parser);
28
uint8_t indexBlock(ADM_ebml_file *parser,uint32_t count,uint32_t timecodeMS);
29
30
31
bool ComputeDeltaAndCheckBFrames(uint32_t *minDeltaX, uint32_t *maxDeltaX, bool *bFramePresent);
32
bool updateFlagsWithCue(void); // in case we can trust it, update KEY_FRAME_FLAGS
33
bool dumpVideoIndex(int maxIndex);
34
+ bool goBeforeAtomAtPosition(ADM_ebml_file *parser, uint64_t position,uint64_t &outputLen,
35
+ MKV_ELEM_ID searchedId,const char *txt);
36
public:
37
38
39
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ADM_mkvIndexer.cpp
Changed
201
1
2
}
3
return -1;
4
}
5
+
6
+static bool canRederiveFrameType(uint32_t fcc)
7
+{
8
+ if(isMpeg4Compatible(fcc)) return true;
9
+ if(isH264Compatible(fcc)) return true;
10
+ if(isMpeg12Compatible(fcc)) return true;
11
+ return false;
12
+
13
+}
14
+
15
/**
16
\fn addVideoEntry
17
\brief add an entry to the video index
18
19
// For the 2 most common cases : mp4 & h264.
20
// Hackish, we already read the 3 bytes header
21
// But they are already taken into account in the size part
22
- if(!track) // Track 0 is video
23
+ if(!track && canRederiveFrameType(_videostream.fccHandler)) // Track 0 is video
24
{
25
if( isMpeg4Compatible(_videostream.fccHandler))
26
{
27
28
\brief Update index with cue content
29
30
*/
31
-uint8_t mkvHeader::readCue(ADM_ebml_file *parser)
32
+bool mkvHeader::readCue(ADM_ebml_file *parser)
33
{
34
- uint64_t fileSize,len,bsize;
35
- uint64_t alen,vlen;
36
+ uint64_t len,vlen;
37
uint64_t id;
38
ADM_MKV_TYPE type;
39
const char *ss;
40
uint64_t time;
41
- uint64_t segmentPos;
42
+
43
+
44
45
- parser->seek(0);
46
+ if(!goBeforeAtomAtPosition(parser, _cuePosition,vlen, MKV_CUES,"MKV_CUES"))
47
+ {
48
+ ADM_warning("Cannot go to the CUES atom\n");
49
+ return false;
50
+ }
51
52
- if(!parser->simplefind(MKV_SEGMENT,&vlen,1))
53
- {
54
- printf("[MKV] Cannot find CLUSTER atom\n");
55
- return 0;
56
- }
57
- ADM_ebml_file segment(parser,vlen);
58
- segmentPos=segment.tell();
59
+ ADM_ebml_file cues(parser,vlen);
60
+ while(!cues.finished())
61
+ {
62
+ cues.readElemId(&id,&len);
63
+ if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
64
+ {
65
+ printf("[MKV] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
66
+ cues.skip(len);
67
+ continue;
68
+ }
69
+ if(id!=MKV_CUE_POINT)
70
+ {
71
+ printf("Found %s in CUES, ignored \n",ss);
72
+ cues.skip(len);
73
+ continue;
74
+ }
75
+ ADM_ebml_file cue(&cues,len);
76
+ // Cue TIME normally
77
+ cue.readElemId(&id,&len);
78
+ if(id!=MKV_CUE_TIME)
79
+ {
80
+ ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
81
+ printf("Found %s(0x%"PRIx64"), expected CUE_TIME (0x%x)\n", ss,id,MKV_CUE_TIME);
82
+ cue.skip(cue.remaining());
83
+ continue;
84
+ }
85
+ time=cue.readUnsignedInt(len);
86
87
- while(segment.simplefind(MKV_CUES,&alen,0))
88
- {
89
- ADM_ebml_file cues(&segment,alen);
90
- while(!cues.finished())
91
- {
92
- cues.readElemId(&id,&len);
93
- if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
94
- {
95
- printf("[MKV] Tag 0x%"PRIx64" not found (len %"PRIu64")\n",id,len);
96
- cues.skip(len);
97
- continue;
98
- }
99
- if(id!=MKV_CUE_POINT)
100
- {
101
- printf("Found %s in CUES, ignored \n",ss);
102
- cues.skip(len);
103
- continue;
104
- }
105
- ADM_ebml_file cue(&cues,len);
106
- // Cue TIME normally
107
- cue.readElemId(&id,&len);
108
- if(id!=MKV_CUE_TIME)
109
- {
110
- ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
111
- printf("Found %s(0x%"PRIx64"), expected CUE_TIME (0x%x)\n", ss,id,MKV_CUE_TIME);
112
- cue.skip(cue.remaining());
113
- continue;
114
- }
115
- time=cue.readUnsignedInt(len);
116
117
+ cue.readElemId(&id,&len);
118
+ if(id!=MKV_CUE_TRACK_POSITION)
119
+ {
120
+ ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
121
+ printf("Found %s (0x%"PRIx64"), expected MKV_CUE_TRACK_POSITION (0x%x)\n", ss,id,MKV_CUE_TRACK_POSITION);
122
+ cue.skip(cues.remaining());
123
+ continue;
124
+ }
125
+ ADM_ebml_file trackPos(&cue,len);
126
+ uint64_t tid=0;
127
+ uint64_t cluster_position=0;
128
+ uint64_t cue_position=0;
129
+ while(!trackPos.finished())
130
+ {
131
+ trackPos.readElemId(&id,&len);
132
+ switch(id)
133
+ {
134
+ case MKV_CUE_TRACK: tid=trackPos.readUnsignedInt(len);break;
135
+ case MKV_CUE_CLUSTER_POSITION: cluster_position=trackPos.readUnsignedInt(len);break;
136
+ case MKV_CUE_RELATIVE_POSITION: cue_position=trackPos.readUnsignedInt(len);break;
137
+ default:
138
+ ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
139
+ printf("[MKV] in cluster position found tag %s (0x%"PRIx64")\n",ss,id);
140
+ trackPos.skip(len);
141
+ continue;
142
+ }
143
+ }
144
+ aprintf("Track %"PRIx64" segmentPos=%"PRIx64" Cluster Position 0x%"PRIx64" Cue position 0x%"PRIx64" Absolute=%"PRIx64" time %"PRIu64"\n",
145
+ tid,_segmentPosition,cluster_position,cue_position,cue_position+cluster_position+_segmentPosition,time);
146
147
- cue.readElemId(&id,&len);
148
- if(id!=MKV_CUE_TRACK_POSITION)
149
- {
150
- ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
151
- printf("Found %s (0x%"PRIx64"), expected MKV_CUE_TRACK_POSITION (0x%x)\n", ss,id,MKV_CUE_TRACK_POSITION);
152
- cue.skip(cues.remaining());
153
- continue;
154
- }
155
- ADM_ebml_file trackPos(&cue,len);
156
- uint64_t tid=0;
157
- uint64_t cluster_position=0;
158
- uint64_t cue_position=0;
159
- while(!trackPos.finished())
160
- {
161
- trackPos.readElemId(&id,&len);
162
- switch(id)
163
- {
164
- case MKV_CUE_TRACK: tid=trackPos.readUnsignedInt(len);break;
165
- case MKV_CUE_CLUSTER_POSITION: cluster_position=trackPos.readUnsignedInt(len);break;
166
- case MKV_CUE_RELATIVE_POSITION: cue_position=trackPos.readUnsignedInt(len);break;
167
- default:
168
- ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type);
169
- printf("[MKV] in cluster position found tag %s (0x%"PRIx64")\n",ss,id);
170
- trackPos.skip(len);
171
- continue;
172
- }
173
- }
174
- aprintf("Track %"PRIx64" segmentPos=%"PRIx64" Cluster Position 0x%"PRIx64" Cue position 0x%"PRIx64" Absolute=%"PRIx64" time %"PRIu64"\n",
175
- tid,segmentPos,cluster_position,cue_position,cue_position+cluster_position+segmentPos,time);
176
-
177
- if(!searchTrackFromTid(tid)) //only keep video i.e. track zero
178
- _cueTime.append(time);
179
- }
180
+ if(!searchTrackFromTid(tid)) //only keep video i.e. track zero
181
+ {
182
+ //printf("Adding cue entry\n");
183
+ _cueTime.append(time);
184
+ }
185
}
186
- printf("[MKV] Cues updated\n");
187
- return 1;
188
+ if(_cueTime.size())
189
+ {
190
+ ADM_info("[MKV] Cues updated\n");
191
+ return true;
192
+ }
193
+ else
194
+ {
195
+ ADM_info("[MKV] No Cue found\n");
196
+ return false;
197
+ }
198
+
199
}
200
/**
201
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ebml.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Matroska/ebml.cpp
Changed
93
1
2
}
3
fp=NULL;
4
}
5
-uint8_t ADM_ebml_file::open(const char *name)
6
+/**
7
+ *
8
+ * @param name
9
+ * @return
10
+ */
11
+bool ADM_ebml_file::open(const char *name)
12
{
13
14
fp=ADM_fopen(name,"rb");
15
16
fseeko(fp,0,SEEK_SET);
17
return 1;
18
}
19
-uint8_t ADM_ebml_file::readBin(uint8_t *whereto,uint32_t len)
20
+/**
21
+ *
22
+ * @param whereto
23
+ * @param len
24
+ * @return
25
+ */
26
+bool ADM_ebml_file::readBin(uint8_t *whereto,uint32_t len)
27
{
28
ADM_assert(fp);
29
if(!fread(whereto,len,1,fp)) return 0;
30
return 1;
31
}
32
-
33
-uint8_t ADM_ebml_file::skip(uint32_t vv)
34
+/**
35
+ *
36
+ * @param vv
37
+ * @return
38
+ */
39
+bool ADM_ebml_file::skip(uint32_t vv)
40
{
41
fseeko(fp,vv,SEEK_CUR);
42
return 1;
43
44
{
45
return ftello(fp);
46
}
47
-uint8_t ADM_ebml_file::seek(uint64_t pos)
48
+/**
49
+ *
50
+ * @param pos
51
+ * @return
52
+ */
53
+bool ADM_ebml_file::seek(uint64_t pos)
54
{
55
fseeko(fp,pos,SEEK_SET);
56
return 1;
57
}
58
-uint8_t ADM_ebml_file::finished(void)
59
+/**
60
+ *
61
+ * @return
62
+ */
63
+bool ADM_ebml_file::finished(void)
64
{
65
if(tell()>(_fileSize-2)) return 1;
66
if(tell()>(_begin+_size-2)) return 1;
67
68
\fn find
69
\brief Search for the tag given and returns the corresponding atom
70
*/
71
- uint8_t ADM_ebml_file::find(ADM_MKV_SEARCHTYPE search,MKV_ELEM_ID prim,MKV_ELEM_ID second,uint64_t *len,uint32_t rewind)
72
+ bool ADM_ebml_file::find(ADM_MKV_SEARCHTYPE search,MKV_ELEM_ID prim,MKV_ELEM_ID second,uint64_t *len,bool rewind)
73
{
74
uint64_t id,pos;
75
ADM_MKV_TYPE type;
76
77
\fn find
78
\brief Search for the tag given and returns the corresponding atom
79
*/
80
-uint8_t ADM_ebml_file::simplefind(MKV_ELEM_ID prim,uint64_t *len,uint32_t rewind)
81
+bool ADM_ebml_file::simplefind(MKV_ELEM_ID prim,uint64_t *len,bool rewind)
82
{
83
uint64_t id,alen;
84
ADM_MKV_TYPE type;
85
86
87
while(!finished())
88
{
89
+ //printf("Offset is %d\n",(int)(this->tell()>>10));
90
readElemId(&id,&alen);
91
if(!ADM_searchMkvTag( (MKV_ELEM_ID)id,&ss,&type))
92
{
93
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Analyzer.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/Mp4/ADM_mp4Analyzer.cpp
Changed
9
1
2
break;
3
//
4
case MKFCCR('h','e','v','1'): // hev1 / hevc
5
+ case MKFCCR('h','v','c','1'): // hev1 / hevc
6
{
7
commonPart(H265);
8
while(!son.isDone())
9
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsAudio.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsAudio.cpp
Changed
10
1
2
again:
3
if(latm.empty()==true) // fetch next LOAS frame, it will contain several frames
4
{
5
-
6
-
7
if(!retries)
8
{
9
ADM_error("Cannot get AAC packet from LATM\n");
10
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_demuxers/MpegTS/ADM_tsReadIndex.cpp
Changed
13
1
2
}
3
head=tail+1;
4
ADM_tsAccess *track=listOfAudioTracks[trackNb]->access;
5
- track->push(startAt,dts,size);
6
+ if(dts!=ADM_NO_PTS)
7
+ track->push(startAt,dts,size);
8
+ else
9
+ ADM_warning("No audio DTS\n");
10
11
trackNb++;
12
//printf("[%s] => %"PRIx32" Dts:%"PRId64" Size:%"PRId64"\n",buffer,pes,dts,size);
13
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_muxers/CMakeLists.txt -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/CMakeLists.txt
Changed
9
1
2
ADD_SUBDIRECTORY(muxerFlv)
3
ADD_SUBDIRECTORY(muxerMp4)
4
ADD_SUBDIRECTORY(muxerMkv)
5
+ADD_SUBDIRECTORY(muxerWebm)
6
ADD_SUBDIRECTORY(muxerffPS)
7
ADD_SUBDIRECTORY(muxerffTS)
8
#ADD_SUBDIRECTORY(muxerMplex)
9
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm
Added
2
1
+(directory)
2
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/CMakeLists.txt
Added
15
1
2
+include(mx_plugin)
3
+SET(ADM_Webm_SRCS
4
+ muxerWebm.cpp
5
+ muxerWebmPlugin.cpp
6
+ muxerWebmConfig.cpp
7
+)
8
+
9
+ADD_MUXER(ADM_mx_Webm ${ADM_Webm_SRCS})
10
+
11
+TARGET_LINK_LIBRARIES(ADM_mx_Webm ADM_libavutil ADM_libavcodec ADM_libavformat)
12
+INIT_MUXER(ADM_mx_Webm)
13
+INSTALL_MUXER(ADM_mx_Webm)
14
+
15
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/muxerWebm.cpp
Added
183
1
2
+/***************************************************************************
3
+ \file muxerWebm
4
+ \brief i/f to lavformat Matroska muxer
5
+ -------------------
6
+
7
+ copyright : (C) 2009 by mean
8
+ email : fixounet@free.fr
9
+
10
+ ***************************************************************************/
11
+
12
+/***************************************************************************
13
+ * *
14
+ * This program is free software; you can redistribute it and/or modify *
15
+ * it under the terms of the GNU General Public License as published by *
16
+ * the Free Software Foundation; either version 2 of the License, or *
17
+ * (at your option) any later version. *
18
+ * *
19
+ ***************************************************************************/
20
+
21
+#include "ADM_default.h"
22
+#include "fourcc.h"
23
+#include "muxerWebm.h"
24
+#include "DIA_coreToolkit.h"
25
+#include "ADM_muxerUtils.h"
26
+
27
+#if 0
28
+#define aprintf(...) {}
29
+#else
30
+#define aprintf printf
31
+#endif
32
+
33
+Webm_muxer WebmMuxerConfig=
34
+{
35
+ false, // Force
36
+ 1280 // Display width
37
+};
38
+
39
+
40
+/**
41
+ \fn muxerWebm
42
+ \brief Constructor
43
+*/
44
+muxerWebm::muxerWebm()
45
+{
46
+};
47
+/**
48
+ \fn muxerWebm
49
+ \brief Destructor
50
+*/
51
+
52
+muxerWebm::~muxerWebm()
53
+{
54
+
55
+}
56
+/**
57
+ \fn open
58
+ \brief Check that the streams are ok, initialize context...
59
+*/
60
+
61
+bool muxerWebm::open(const char *file, ADM_videoStream *s,uint32_t nbAudioTrack,ADM_audioStream **a)
62
+{
63
+ // We only support VP8 + Vorbis
64
+ uint32_t fcc=s->getFCC();
65
+ if(!fourCC::check(fcc,(const uint8_t *)"VP8 ") && !fourCC::check(fcc,(const uint8_t *)"VP9 "))
66
+ {
67
+ GUI_Error_HIG("Webm","Unsupported Video.\nOnly VP8/VP9 Video and Vorbis/Opus audio supported");
68
+ return false;
69
+ }
70
+ for( int i=0;i<nbAudioTrack;i++)
71
+ {
72
+ uint16_t encoding=a[i]->getInfo()->encoding;
73
+ switch(encoding)
74
+ {
75
+ case WAV_OGG_VORBIS:
76
+ case WAV_OPUS:
77
+ break;
78
+ default:
79
+ GUI_Error_HIG("Webm","Unsupported Audio.\nOnly VP8/VP9 Video and Vorbis/Opus audio supported");
80
+ return false;
81
+ }
82
+ }
83
+ /* All seems fine, open stuff */
84
+ if(false==setupMuxer("webm",file))
85
+ {
86
+ ADM_warning("[Webm] Failed to open muxer (setup)\n");
87
+ return false;
88
+ }
89
+
90
+ if(initVideo(s)==false)
91
+ {
92
+ ADM_warning("[Webm] Failed to init video\n");
93
+ return false;
94
+ }
95
+
96
+
97
+ AVCodecContext *c;
98
+ c = video_st->codec;
99
+ rescaleFps(s->getAvgFps1000(),&(c->time_base));
100
+ video_st->time_base=c->time_base;
101
+ c->gop_size=15;
102
+
103
+ if(true==WebmMuxerConfig.forceDisplayWidth && WebmMuxerConfig.displayWidth)
104
+ {
105
+ //sar=display/code
106
+ int num=1,den=1;
107
+ av_reduce(&num, &den, WebmMuxerConfig.displayWidth, s->getWidth(),65535);
108
+ c->sample_aspect_ratio.num=num;
109
+ c->sample_aspect_ratio.den=den;
110
+ video_st->sample_aspect_ratio.num=num;
111
+ video_st->sample_aspect_ratio.den=den;
112
+ ADM_info("Forcing display width of %d\n",(int)WebmMuxerConfig.displayWidth);
113
+ }
114
+
115
+ if(initAudio(nbAudioTrack,a)==false)
116
+ {
117
+ ADM_warning("[Webm] Failed to init audio\n");
118
+ return false;
119
+ }
120
+
121
+ // /audio
122
+ int er = avio_open(&(oc->pb), file, AVIO_FLAG_WRITE);
123
+
124
+ if (er)
125
+ {
126
+ ADM_error("[Webm]: Failed to open file :%s, er=%d\n",file,er);
127
+ return false;
128
+ }
129
+
130
+ AVDictionary *dict = NULL;
131
+ char buf[64];
132
+
133
+ snprintf(buf, sizeof(buf), "%d", AV_TIME_BASE / 10);
134
+ av_dict_set(&dict, "preload", buf, 0);
135
+ av_dict_set(&dict, "max_delay", "200000", 0);
136
+ av_dict_set(&dict, "muxrate", "10080000", 0);
137
+
138
+ ADM_assert(avformat_write_header(oc, &dict) >= 0);
139
+ ADM_info("Timebase codec = %d/%d\n",video_st->time_base.num,video_st->time_base.den);
140
+// ADM_info("Original timebase = %d/%d\n",myTimeBase.num,myTimeBase.den);
141
+
142
+
143
+ vStream=s;
144
+ aStreams=a;
145
+ nbAStreams=nbAudioTrack;
146
+ initialized=true;
147
+ return true;
148
+}
149
+
150
+/**
151
+ \fn save
152
+*/
153
+bool muxerWebm::save(void)
154
+{
155
+ const char *title=QT_TRANSLATE_NOOP("Webmmuxer","Saving Webm");
156
+ return saveLoop(title);
157
+}
158
+
159
+bool muxerWebm::muxerRescaleVideoTimeDts(uint64_t *time,uint64_t computedDts)
160
+{
161
+ if(*time==ADM_NO_PTS)
162
+ {
163
+ *time=computedDts;
164
+ return muxerRescaleVideoTime(time);
165
+ }
166
+ return muxerRescaleVideoTime(time);
167
+}
168
+/**
169
+ \fn close
170
+ \brief Cleanup is done in the dtor
171
+*/
172
+bool muxerWebm::close(void)
173
+{
174
+
175
+ ADM_info("[Webm] Closing\n");
176
+ return closeMuxer();
177
+}
178
+
179
+//EOF
180
+
181
+
182
+
183
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/muxerWebm.h
Added
41
1
2
+/***************************************************************************
3
+ oplug_vcdff.h - description
4
+ -------------------
5
+ begin : Sun Nov 10 2002
6
+ copyright : (C) 2002 by mean
7
+ email : fixounet@free.fr
8
+ ***************************************************************************/
9
+
10
+/***************************************************************************
11
+ * *
12
+ * This program is free software; you can redistribute it and/or modify *
13
+ * it under the terms of the GNU General Public License as published by *
14
+ * the Free Software Foundation; either version 2 of the License, or *
15
+ * (at your option) any later version. *
16
+ * *
17
+ ***************************************************************************/
18
+#ifndef ADM_MUXER_Webm
19
+#define ADM_MUXER_Webm
20
+
21
+#include "ADM_muxer.h"
22
+#include "ADM_coreMuxerFfmpeg.h"
23
+#include "webm_muxer.h"
24
+extern Webm_muxer WebmMuxerConfig;
25
+
26
+class muxerWebm : public muxerFFmpeg
27
+{
28
+protected:
29
+ bool muxerRescaleVideoTimeDts(uint64_t *time,uint64_t computedDts);
30
+ const char *getContainerName(void) {return "Webm";};
31
+public:
32
+ muxerWebm();
33
+ virtual ~muxerWebm();
34
+ virtual bool open(const char *file, ADM_videoStream *s,uint32_t nbAudioTrack,ADM_audioStream **a);
35
+ virtual bool save(void) ;
36
+ virtual bool close(void) ;
37
+ virtual bool useGlobalHeader(void) {return true;}
38
+};
39
+
40
+#endif
41
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/muxerWebmConfig.cpp
Added
43
1
2
+/***************************************************************************
3
+ copyright : (C) 2007 by mean
4
+ email : fixounet@free.fr
5
+
6
+ ***************************************************************************/
7
+
8
+/***************************************************************************
9
+ * *
10
+ * This program is free software; you can redistribute it and/or modify *
11
+ * it under the terms of the GNU General Public License as published by *
12
+ * the Free Software Foundation; either version 2 of the License, or *
13
+ * (at your option) any later version. *
14
+ * *
15
+ ***************************************************************************/
16
+
17
+#include "ADM_default.h"
18
+#include "ADM_muxerInternal.h"
19
+#include "muxerWebm.h"
20
+#define ADM_MINIMAL_UI_INTERFACE
21
+#include "DIA_factory.h"
22
+#include "fourcc.h"
23
+bool WebmConfigure(void)
24
+{
25
+ bool force=WebmMuxerConfig.forceDisplayWidth;
26
+ uint32_t displayWidth=(uint32_t)WebmMuxerConfig.displayWidth;
27
+
28
+ diaElemToggle alternate(&force,"Force display width");
29
+ diaElemUInteger dWidth(&displayWidth,"Display width",16,65535);
30
+
31
+ diaElem *tabs[]={&alternate,&dWidth};
32
+ if( diaFactoryRun(("Webm Muxer"),2,tabs))
33
+ {
34
+ WebmMuxerConfig.forceDisplayWidth=(bool)force;
35
+ WebmMuxerConfig.displayWidth=displayWidth;
36
+ return true;
37
+ }
38
+ return false;
39
+
40
+}
41
+
42
+
43
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/muxerWebmPlugin.cpp
Added
36
1
2
+/***************************************************************************
3
+ copyright : (C) 2007 by mean
4
+ email : fixounet@free.fr
5
+
6
+ See lavformat/flv[dec/env].c for detail
7
+ ***************************************************************************/
8
+
9
+/***************************************************************************
10
+ * *
11
+ * This program is free software; you can redistribute it and/or modify *
12
+ * it under the terms of the GNU General Public License as published by *
13
+ * the Free Software Foundation; either version 2 of the License, or *
14
+ * (at your option) any later version. *
15
+ * *
16
+ ***************************************************************************/
17
+
18
+#include "ADM_default.h"
19
+#include "ADM_muxerInternal.h"
20
+#include "muxerWebm.h"
21
+#include "webm_muxer_desc.cpp"
22
+#include "fourcc.h"
23
+ bool WebmConfigure(void);
24
+
25
+ADM_MUXER_BEGIN( "Webm",muxerWebm,
26
+ 1,0,0,
27
+ "Webm", // Internal name
28
+ "Webm muxer plugin (c) Mean 2009",
29
+ "Webm Muxer", // DIsplay name
30
+ WebmConfigure,
31
+ Webm_muxer_param, //template
32
+ &WebmMuxerConfig, //config
33
+ sizeof(Webm_muxer)
34
+ );
35
+
36
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/webm_muxer.conf
Added
6
1
2
+Webm_muxer{
3
+bool:forceDisplayWidth
4
+uint32_t:displayWidth
5
+}
6
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/webm_muxer.h
Added
11
1
2
+// automatically generated by admSerialization.py, do not edit!
3
+// automatically generated by admSerialization.py do not edit
4
+#ifndef ADM_Webm_muxer_CONF_H
5
+#define ADM_Webm_muxer_CONF_H
6
+typedef struct {
7
+bool forceDisplayWidth;
8
+uint32_t displayWidth;
9
+}Webm_muxer;
10
+#endif
11
avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_muxers/muxerWebm/webm_muxer_desc.cpp
Added
7
1
2
+const ADM_paramList Webm_muxer_param[]={
3
+ {"forceDisplayWidth",offsetof(Webm_muxer,forceDisplayWidth),"bool",ADM_param_bool},
4
+ {"displayWidth",offsetof(Webm_muxer,displayWidth),"uint32_t",ADM_param_uint32_t},
5
+{NULL,0,NULL}
6
+};
7
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_videoFilters6/fields/ADM_vidSeparateField.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_videoFilters6/fields/ADM_vidSeparateField.cpp
Changed
55
1
2
3
#include "ADM_default.h"
4
#include "ADM_coreVideoFilter.h"
5
+#include "ADM_vidMisc.h"
6
7
/**
8
\class AVDMVideoSeparateField
9
10
AVDMVideoSeparateField::AVDMVideoSeparateField( ADM_coreVideoFilter *in,CONFcouple *setup)
11
: ADM_coreVideoFilterCached(4,in,setup)
12
{
13
-
14
- info.height>>=1;
15
- info.frameIncrement/=2;
16
-
17
+ info.height>>=1;
18
+ info.frameIncrement/=2;
19
}
20
/**
21
\fn AVDMVideoSeparateField
22
23
ADMImage *cur,*next;
24
uint32_t frame=nextFrame++;
25
*fn=frame;
26
- cur=vidCache->getImage(frame/2);
27
- if(!cur)
28
- {
29
- ADM_warning("Seoarate field : cannot read\n");
30
- vidCache->unlockAll();
31
- return 0;
32
- }
33
-
34
+ cur=vidCache->getImage(frame/2);
35
+ if(!cur)
36
+ {
37
+ ADM_warning("Seoarate field : cannot read\n");
38
+ vidCache->unlockAll();
39
+ return 0;
40
+ }
41
+
42
for(int i=0;i<3;i++)
43
{
44
ADM_PLANE plane=(ADM_PLANE)i;
45
46
image->copyInfo(cur);
47
if(frame&1)
48
image->Pts+=info.frameIncrement;
49
- vidCache->unlockAll();
50
+ vidCache->unlockAll();
51
+ //ADM_info("Output PTS=%s\n",ADM_us2plain(image->Pts));
52
return 1;
53
}
54
// EOF
55
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_videoFilters6/vdpauFilters/ADM_vidVdpauFilter.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_videoFilters6/vdpauFilters/ADM_vidVdpauFilter.cpp
Changed
54
1
2
// check if we have something to do
3
if(info.width==previousFilter->getInfo()->width && info.height==previousFilter->getInfo()->height)
4
return false;
5
+
6
if(VDP_STATUS_OK!=admVdpau::outputSurfaceCreate(VDP_RGBA_FORMAT_B8G8R8A8,
7
info.width,info.height,&outputSurface))
8
{
9
10
goto badInit;
11
}
12
}
13
+ {
14
+ int paddedHeight=(previousFilter->getInfo()->height+15)&~15;
15
if(VDP_STATUS_OK!=admVdpau::mixerCreate(previousFilter->getInfo()->width,
16
- previousFilter->getInfo()->height,&mixer))
17
+ paddedHeight,&mixer))
18
{
19
ADM_error("Cannot create mixer\n");
20
goto badInit;
21
- }
22
+ }
23
+ }
24
setIdentityCSC();
25
tempBuffer=new uint8_t[info.width*info.height*4];
26
scaler=new ADMColorScalerSimple( info.width,info.height, ADM_COLOR_RGB32A,ADM_COLOR_YV12);
27
28
{
29
//printf("Uploading image to vdpau\n");
30
if(false==uploadImage(next,0,nextFrame))
31
- {
32
- vidCache->unlockAll();
33
- return false;
34
- }
35
+ {
36
+ vidCache->unlockAll();
37
+ return false;
38
+ }
39
tmpSurface=input[0];
40
}
41
42
// Call mixer...
43
- if(VDP_STATUS_OK!=admVdpau::mixerRender(
44
+ if(VDP_STATUS_OK!=admVdpau::mixerRenderWithCropping(
45
mixer,
46
tmpSurface,
47
outputSurface,
48
- info.width,info.height))
49
+ info.width,info.height, // target
50
+ previousFilter->getInfo()->width,previousFilter->getInfo()->height))
51
52
{
53
ADM_warning("[Vdpau] Cannot mixerRender\n");
54
avidemux_2.6.11.tar.gz/avidemux_plugins/ADM_videoFilters6/vdpauFilters/ADM_vidVdpauFilterDeint.cpp -> avidemux_2.6.12.tar.gz/avidemux_plugins/ADM_videoFilters6/vdpauFilters/ADM_vidVdpauFilterDeint.cpp
Changed
29
1
2
scaler=NULL;
3
secondField=false;
4
nextFrame=0;
5
+ int paddedHeight=(previousFilter->getInfo()->height+15)&~15;
6
if(!admVdpau::isOperationnal())
7
{
8
ADM_warning("Vdpau not operationnal\n");
9
10
for(int i=0;i<3;i++)
11
slots[i].image=new ADMImageDefault( previousFilter->getInfo()->width,
12
previousFilter->getInfo()->height);
13
-
14
+
15
if(VDP_STATUS_OK!=admVdpau::mixerCreate(previousFilter->getInfo()->width,
16
- previousFilter->getInfo()->height,&mixer,true))
17
+ paddedHeight,&mixer,true))
18
{
19
ADM_error("Cannot create mixer\n");
20
goto badInit;
21
22
mixer,
23
in,
24
outputSurface,
25
+ getInfo()->width,getInfo()->height,
26
previousFilter->getInfo()->width,previousFilter->getInfo()->height))
27
28
{
29
avidemux_2.6.11.tar.gz/bootStrap.bash -> avidemux_2.6.12.tar.gz/bootStrap.bash
Changed
58
1
2
do_gtk=0
3
do_qt4=1
4
do_plugins=1
5
+do_asan=0
6
debug=0
7
qt_ext=Qt4
8
+export QT_SELECT=4 # default for ubuntu, harmless for others
9
export O_PARAL="-j 2"
10
fail()
11
{
12
13
export SOURCEDIR=$2
14
export EXTRA=$3
15
export DEBUG=""
16
+ export ASAN=""
17
BUILDER="Unix Makefiles"
18
if [ "x$debug" = "x1" ] ; then
19
DEBUG="-DVERBOSE=1 -DCMAKE_BUILD_TYPE=Debug "
20
BUILDDIR="${BUILDDIR}_debug"
21
BUILDER="CodeBlocks - Unix Makefiles"
22
fi
23
+ if [ "x$do_asan" = "x1" ] ; then
24
+ BUILDDIR="${BUILDDIR}_asan"
25
+ ASAN="-DASAN=True"
26
+ fi
27
FAKEROOT=" -DFAKEROOT=$FAKEROOT_DIR "
28
echo "Building $BUILDDIR from $SOURCEDIR with EXTRA=<$EXTRA>, DEBUG=<$DEBUG>"
29
rm -Rf ./$BUILDDIR
30
mkdir $BUILDDIR || fail mkdir
31
cd $BUILDDIR
32
- cmake $PKG $FAKEROOT $QT_FLAVOR -DCMAKE_EDIT_COMMAND=vim -DAVIDEMUX_SOURCE_DIR=$TOP -DCMAKE_INSTALL_PREFIX=/usr $EXTRA $DEBUG -G "$BUILDER" $SOURCEDIR || fail cmakeZ
33
+ cmake $PKG $FAKEROOT $QT_FLAVOR -DCMAKE_EDIT_COMMAND=vim -DAVIDEMUX_SOURCE_DIR=$TOP -DCMAKE_INSTALL_PREFIX=/usr $EXTRA $ASAN $DEBUG -G "$BUILDER" $SOURCEDIR || fail cmakeZ
34
make $PARAL >& /tmp/log$BUILDDIR || fail "make, result in /tmp/log$BUILDDIR"
35
if [ "x$PKG" != "x" ] ; then
36
$FAKEROOT_COMMAND make package DESTDIR=$FAKEROOT_DIR/tmp || fail package
37
38
echo " --with-plugins : Build plugins"
39
echo " --without-plugins : Dont build plugins"
40
echo " --enable-qt5 : Try to use qt5 instead of qt4"
41
+ echo " --enable-asan : Enable Clang/llvm address sanitizer"
42
echo "The end result will be in the install folder. You can then copy it to / or whatever"
43
config
44
45
46
;;
47
--enable-qt5)
48
QT_FLAVOR="-DENABLE_QT5=True"
49
+ export QT_SELECT=5
50
qt_ext=Qt5
51
;;
52
+ --enable-asan)
53
+ do_asan=1
54
+ ;;
55
--with-qt4)
56
do_qt4=1
57
;;
58
avidemux_2.6.11.tar.gz/cmake/admAsNeeded.cmake -> avidemux_2.6.12.tar.gz/cmake/admAsNeeded.cmake
Changed
18
1
2
AS_NEEDED(${name})
3
4
if (UNIX AND NOT APPLE)
5
+ if(NOT ASAN)
6
TARGET_LINK_LIBRARIES( ${name} "-Wl,-z,defs")
7
+ endif(NOT ASAN)
8
TARGET_LINK_LIBRARIES( ${name} "stdc++") # for clang
9
endif (UNIX AND NOT APPLE)
10
ENDMACRO(ADM_ADD_SHARED_LIBRARY name)
11
12
if (CMAKE_COMPILER_IS_GNUCC)
13
ADD_TARGET_CFLAGS(${name} "-fno-exceptions -fno-rtti")
14
endif (CMAKE_COMPILER_IS_GNUCC)
15
-ENDMACRO(ADM_TARGET_NO_EXCEPTION name)
16
\ No newline at end of file
17
+ENDMACRO(ADM_TARGET_NO_EXCEPTION name)
18
avidemux_2.6.11.tar.gz/cmake/admCheckFaad.cmake -> avidemux_2.6.12.tar.gz/cmake/admCheckFaad.cmake
Changed
14
1
2
FIND_HEADER_AND_LIB(FAAD faad.h faad)
3
4
IF (FAAD_FOUND)
5
- ADM_CHECK_FUNCTION_EXISTS(faacDecInit "${FAAD_LIBRARY_DIR}" FAACDEC_FUNCTION_FOUND)
6
+ ADM_CHECK_FUNCTION_EXISTS(faacDecInit "${FAAD_LIBRARY_DIR}" FAACDEC_FUNCTION_FOUND "" -I"${FAAD_INCLUDE_DIR}")
7
8
IF (NOT FAACDEC_FUNCTION_FOUND)
9
- ADM_CHECK_FUNCTION_EXISTS(NeAACDecInit "${FAAD_LIBRARY_DIR}" NEAACDEC_FUNCTION_FOUND)
10
+ ADM_CHECK_FUNCTION_EXISTS(NeAACDecInit "${FAAD_LIBRARY_DIR}" NEAACDEC_FUNCTION_FOUND "" -I"${FAAD_INCLUDE_DIR}")
11
12
IF (NOT NEAACDEC_FUNCTION_FOUND)
13
SET(FAAD_FOUND 0)
14
avidemux_2.6.11.tar.gz/cmake/admCheckMiscLibs.cmake -> avidemux_2.6.12.tar.gz/cmake/admCheckMiscLibs.cmake
Changed
36
1
2
MESSAGE(STATUS "Checking for execinfo")
3
MESSAGE(STATUS "*********************")
4
5
-FIND_HEADER_AND_LIB(execinfo execinfo.h execinfo backtrace_symbols)
6
-PRINT_LIBRARY_INFO("execinfo" EXECINFO_FOUND "${LIBEXECINFO_INCLUDE_DIR}" "${LIBEXECINFO_LIBRARY_DIR}")
7
+FIND_HEADER_AND_LIB(EXECINFO execinfo.h c backtrace_symbols)
8
+PRINT_LIBRARY_INFO("execinfo" EXECINFO_FOUND "${EXECINFO_INCLUDE_DIR}" "${EXECINFO_LIBRARY_DIR}")
9
10
-IF (LIBEXECINFO_INCLUDE_DIR)
11
+IF (EXECINFO_INCLUDE_DIR)
12
# Try linking without -lexecinfo
13
- ADM_COMPILE(execinfo.cpp "" ${LIBEXECINFO_INCLUDE_DIR} "" WITHOUT_LIBEXECINFO outputWithoutLibexecinfo)
14
+ ADM_COMPILE(execinfo.cpp "" ${EXECINFO_INCLUDE_DIR} "" WITHOUT_LIBEXECINFO outputWithoutLibexecinfo)
15
16
IF (WITHOUT_LIBEXECINFO)
17
- SET(LIBEXECINFO_LIBRARY_DIR "")
18
+ SET(EXECINFO_LIBRARY_DIR "")
19
SET(HAVE_EXECINFO 1)
20
21
MESSAGE(STATUS "execinfo not required")
22
ELSE (WITHOUT_LIBEXECINFO)
23
- ADM_COMPILE(execinfo.cpp "" ${LIBEXECINFO_INCLUDE_DIR} ${LIBEXECINFO_LIBRARY_DIR} WITH_LIBEXECINFO outputWithLibexecinfo)
24
+ ADM_COMPILE(execinfo.cpp "" ${EXECINFO_INCLUDE_DIR} ${EXECINFO_LIBRARY_DIR} WITH_LIBEXECINFO outputWithLibexecinfo)
25
26
IF (WITH_LIBEXECINFO)
27
SET(HAVE_EXECINFO 1)
28
29
MESSAGE(STATUS "Does not work, with ${outputWithLibexecinfo}")
30
ENDIF (WITH_LIBEXECINFO)
31
ENDIF (WITHOUT_LIBEXECINFO)
32
-ENDIF (LIBEXECINFO_INCLUDE_DIR)
33
+ENDIF (EXECINFO_INCLUDE_DIR)
34
35
MESSAGE("")
36
avidemux_2.6.11.tar.gz/cmake/admFFmpegBuild.cmake -> avidemux_2.6.12.tar.gz/cmake/admFFmpegBuild.cmake
Changed
30
1
2
3
option(FF_INHERIT_BUILD_ENV "" ON)
4
5
-set(FFMPEG_VERSION "2.7.2")
6
+set(FFMPEG_VERSION "2.7.6")
7
set(FFMPEG_ROOT_DIR "${AVIDEMUX_TOP_SOURCE_DIR}/avidemux_core/ffmpeg_package")
8
set(FFMPEG_PATCH_DIR "${FFMPEG_ROOT_DIR}/patches/")
9
set(FFMPEG_SOURCE_ARCHIVE "ffmpeg-${FFMPEG_VERSION}.tar.bz2")
10
11
svq3 theora tscc mp2 mp3 mp2_float mp3_float
12
vc1 vp3 vp6 vp6a vp6f vp8 vp9 wmapro wmav2 wmv1 wmv2 wmv3 cscd)
13
set(FFMPEG_ENCODERS ac3 ac3_float dvvideo ffv1 ffvhuff flv h263 huffyuv mjpeg mp2 mpeg1video mpeg2video mpeg4 snow aac dca)
14
-set(FFMPEG_MUXERS flv matroska mpeg1vcd mpeg2dvd mpeg2svcd mpegts mov mp4 psp)
15
+set(FFMPEG_MUXERS flv matroska mpeg1vcd mpeg2dvd mpeg2svcd mpegts mov mp4 psp webm)
16
set(FFMPEG_PARSERS ac3 h263 h264 hevc mpeg4video)
17
set(FFMPEG_PROTOCOLS file)
18
set(FFMPEG_BSFS h264_mp4toannexb aac_adtstoasc)
19
20
xadd(--ld "${CMAKE_C_COMPILER}")
21
xadd(--ar "${CMAKE_AR}")
22
# nm should be ok if we do not cross compile
23
-
24
+ if(CMAKE_LD_FLAGS)
25
+ xadd(--extra-ldflags ${CMAKE_LD_FLAGS})
26
+ endif(CMAKE_LD_FLAGS)
27
if (CMAKE_C_FLAGS)
28
xadd(--extra-cflags ${CMAKE_C_FLAGS})
29
endif (CMAKE_C_FLAGS)
30
avidemux_2.6.11.tar.gz/cmake/admMainChecks.cmake -> avidemux_2.6.12.tar.gz/cmake/admMainChecks.cmake
Changed
20
1
2
########################################
3
INCLUDE(admDetermineSystem)
4
5
+# Address sanitizer only works with llvm/clang
6
+IF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
7
+ IF (ASAN)
8
+ MESSAGE(STATUS "Address Sanitizer activated")
9
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
10
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
11
+ SET(CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -fsanitize=address ")
12
+ ELSE (ASAN)
13
+ MESSAGE(STATUS "Address Sanitizer not activated")
14
+ ENDIF (ASAN)
15
+ENDIF(${CMAKE_CXX_COMPILER} MATCHES ".*[cC]lang.*")
16
+
17
IF (ADM_CPU_ALTIVEC)
18
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ADM_ALTIVEC_FLAGS}")
19
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ADM_ALTIVEC_FLAGS}")
20
avidemux_2.6.11.tar.gz/cmake/avidemuxVersion.cmake -> avidemux_2.6.12.tar.gz/cmake/avidemuxVersion.cmake
Changed
10
1
2
include(admTimeStamp)
3
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
4
SET(CPACK_PACKAGE_VERSION_MINOR "6")
5
-SET(CPACK_PACKAGE_VERSION_P "11")
6
+SET(CPACK_PACKAGE_VERSION_P "12")
7
SET(CPACK_PACKAGE_VERSION_PATCH "${CPACK_PACKAGE_VERSION_P}")
8
SET(AVIDEMUX_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
9
IF(NOT RELEASE)
10